iris: Make iris_has_color_unresolved more generic
authorNanley Chery <nanley.g.chery@intel.com>
Tue, 23 Jun 2020 16:52:47 +0000 (09:52 -0700)
committerMarge Bot <eric+marge@anholt.net>
Fri, 4 Sep 2020 15:29:57 +0000 (15:29 +0000)
Replace iris_has_color_unresolved with iris_has_invalid_primary.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6192>

src/gallium/drivers/iris/iris_resolve.c
src/gallium/drivers/iris/iris_resource.c
src/gallium/drivers/iris/iris_resource.h

index 37af7920ada90f3f26af2b08e2c4c68f5de8389e..023389bb5357e4e262a175ba9c91cbba8f91921a 100644 (file)
@@ -673,9 +673,9 @@ miptree_layer_range_length(const struct iris_resource *res, uint32_t level,
 }
 
 bool
-iris_has_color_unresolved(const struct iris_resource *res,
-                          unsigned start_level, unsigned num_levels,
-                          unsigned start_layer, unsigned num_layers)
+iris_has_invalid_primary(const struct iris_resource *res,
+                         unsigned start_level, unsigned num_levels,
+                         unsigned start_layer, unsigned num_layers)
 {
    if (!res->aux.bo)
       return false;
@@ -685,13 +685,15 @@ iris_has_color_unresolved(const struct iris_resource *res,
 
    for (uint32_t l = 0; l < num_levels; l++) {
       const uint32_t level = start_level + l;
+      if (!level_has_aux(res, level))
+         continue;
+
       const uint32_t level_layers =
          miptree_layer_range_length(res, level, start_layer, num_layers);
       for (unsigned a = 0; a < level_layers; a++) {
          enum isl_aux_state aux_state =
             iris_resource_get_aux_state(res, level, start_layer + a);
-         assert(aux_state != ISL_AUX_STATE_AUX_INVALID);
-         if (aux_state != ISL_AUX_STATE_PASS_THROUGH)
+         if (!isl_aux_state_has_valid_primary(aux_state))
             return true;
       }
    }
@@ -844,8 +846,8 @@ iris_resource_texture_aux_usage(struct iris_context *ice,
        * ISL_AUX_USAGE_NONE.  This way, texturing won't even look at the
        * aux surface and we can save some bandwidth.
        */
-      if (!iris_has_color_unresolved(res, 0, INTEL_REMAINING_LEVELS,
-                                     0, INTEL_REMAINING_LAYERS))
+      if (!iris_has_invalid_primary(res, 0, INTEL_REMAINING_LEVELS,
+                                    0, INTEL_REMAINING_LAYERS))
          return ISL_AUX_USAGE_NONE;
 
       /* On Gen9 color buffers may be compressed by the hardware (lossless
index 734441b8fae852b53839adce30d119310d0c3fe9..3396678154c63c44ea03e8a2050f140be266aa89 100644 (file)
@@ -1799,7 +1799,7 @@ iris_transfer_map(struct pipe_context *ctx,
          (res->aux.usage == ISL_AUX_USAGE_CCS_D ||
           res->aux.usage == ISL_AUX_USAGE_CCS_E ||
           res->aux.usage == ISL_AUX_USAGE_GEN12_CCS_E) &&
-         iris_has_color_unresolved(res, level, 1, box->z, box->depth);
+         iris_has_invalid_primary(res, level, 1, box->z, box->depth);
 
       need_resolve = need_color_resolve ||
                      need_hiz_resolve ||
index 2d062ec3af4d4c0832a90bbdeda74e1c4a7af419..e98d2ac69d1f38981f3ab08457a28ce42bb921d5 100644 (file)
@@ -477,9 +477,9 @@ iris_resource_unfinished_aux_import(struct iris_resource *res)
 void iris_resource_finish_aux_import(struct pipe_screen *pscreen,
                                      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);
+bool iris_has_invalid_primary(const struct iris_resource *res,
+                              unsigned start_level, unsigned num_levels,
+                              unsigned start_layer, unsigned num_layers);
 
 void iris_resource_check_level_layer(const struct iris_resource *res,
                                      uint32_t level, uint32_t layer);