iris: Allow HiZ for copy_region sources
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 26 Dec 2019 07:43:01 +0000 (23:43 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 4 Jan 2020 20:25:55 +0000 (12:25 -0800)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/gallium/drivers/iris/iris_blit.c
src/gallium/drivers/iris/iris_resolve.c
src/gallium/drivers/iris/iris_resource.h

index e803950a560007890bc05f6788cec68f3fd6536d..f58bf343892b16b5d8d91f97ba1a03efce64d48a 100644 (file)
@@ -573,6 +573,15 @@ get_copy_region_aux_settings(const struct gen_device_info *devinfo,
                              bool is_render_target)
 {
    switch (res->aux.usage) {
+   case ISL_AUX_USAGE_HIZ:
+      if (!is_render_target && iris_sample_with_depth_aux(devinfo, res)) {
+         *out_aux_usage = ISL_AUX_USAGE_HIZ;
+         *out_clear_supported = true;
+      } else {
+         *out_aux_usage = ISL_AUX_USAGE_NONE;
+         *out_clear_supported = false;
+      }
+      break;
    case ISL_AUX_USAGE_MCS:
    case ISL_AUX_USAGE_MCS_CCS:
    case ISL_AUX_USAGE_CCS_E:
index ddd86ea23854acffc34268cd8a82495cff25468b..eb9c0f0cfd9b286537b87da8b1bdc677ecd8c631 100644 (file)
@@ -559,9 +559,9 @@ format_ccs_e_compat_with_resource(const struct gen_device_info *devinfo,
    return isl_formats_are_ccs_e_compatible(devinfo, isl_format, access_format);
 }
 
-static bool
-sample_with_depth_aux(const struct gen_device_info *devinfo,
-                      const struct iris_resource *res)
+bool
+iris_sample_with_depth_aux(const struct gen_device_info *devinfo,
+                           const struct iris_resource *res)
 {
    switch (res->aux.usage) {
    case ISL_AUX_USAGE_HIZ:
@@ -1339,12 +1339,12 @@ iris_resource_texture_aux_usage(struct iris_context *ice,
 
    switch (res->aux.usage) {
    case ISL_AUX_USAGE_HIZ:
-      if (sample_with_depth_aux(devinfo, res))
+      if (iris_sample_with_depth_aux(devinfo, res))
          return ISL_AUX_USAGE_HIZ;
       break;
 
    case ISL_AUX_USAGE_HIZ_CCS:
-      if (sample_with_depth_aux(devinfo, res))
+      if (iris_sample_with_depth_aux(devinfo, res))
          return ISL_AUX_USAGE_CCS_E;
       break;
 
index ab09279d02b42a3f1b9dc307ddb6d350ff8fa0b8..52f8396bd77483018b47971bf56be6647263a32a 100644 (file)
@@ -475,6 +475,10 @@ void iris_resource_check_level_layer(const struct iris_resource *res,
 
 bool iris_resource_level_has_hiz(const struct iris_resource *res,
                                  uint32_t level);
+
+bool iris_sample_with_depth_aux(const struct gen_device_info *devinfo,
+                                const struct iris_resource *res);
+
 bool iris_has_color_unresolved(const struct iris_resource *res,
                                unsigned start_level, unsigned num_levels,
                                unsigned start_layer, unsigned num_layers);