[Mesa-dev] [PATCH 18/22] isl/surface_state: Handle ISL_AUX_USAGE_HIZ

Nanley Chery nanleychery at gmail.com
Thu Jan 12 01:55:04 UTC 2017


Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
---
 src/intel/isl/isl_surface_state.c | 38 +++++++++++++++++++++++++++++++++++---
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/src/intel/isl/isl_surface_state.c b/src/intel/isl/isl_surface_state.c
index b9093cc951..54e48eb5da 100644
--- a/src/intel/isl/isl_surface_state.c
+++ b/src/intel/isl/isl_surface_state.c
@@ -498,11 +498,14 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
    assert(info->y_offset_sa % y_div == 0);
    s.XOffset = info->x_offset_sa / x_div;
    s.YOffset = info->y_offset_sa / y_div;
-#else
-   assert(info->x_offset_sa == 0);
-   assert(info->y_offset_sa == 0);
 #endif
 
+   /* If Auxiliary Surface Mode is not AUX_NONE, this field must be zero. */
+   if ((GEN_GEN == 4 && !GEN_IS_G4X) || info->aux_usage != ISL_AUX_USAGE_NONE) {
+      assert(info->x_offset_sa == 0);
+      assert(info->y_offset_sa == 0);
+   }
+
 #if GEN_GEN >= 7
    if (info->aux_surf && info->aux_usage != ISL_AUX_USAGE_NONE) {
       struct isl_tile_info tile_info;
@@ -520,6 +523,26 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
       s.AuxiliarySurfaceQPitch =
          isl_surf_get_array_pitch_sa_rows(info->aux_surf) >> 2;
       s.AuxiliarySurfaceBaseAddress = info->aux_address;
+
+      if (info->aux_usage == ISL_AUX_USAGE_HIZ) {
+         /* The number of samples must be 1 */
+         assert(info->surf->samples == 1);
+
+         /* The dimension must not be 3D */
+         assert(info->surf->dim != ISL_SURF_DIM_3D);
+
+         /* The format must be one of the following: */
+         switch (info->view->format) {
+         case ISL_FORMAT_R32_FLOAT:
+         case ISL_FORMAT_R24_UNORM_X8_TYPELESS:
+         case ISL_FORMAT_R16_UNORM:
+            break;
+         default:
+            assert(!"Incompatible HiZ Sampling format");
+            break;
+         }
+      }
+
       s.AuxiliarySurfaceMode = isl_to_gen_aux_mode[info->aux_usage];
 #else
       assert(info->aux_usage == ISL_AUX_USAGE_MCS ||
@@ -548,6 +571,15 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
          s.SamplerL2BypassModeDisable = true;
          break;
       default:
+         /* From the SKL PRM, Programming Note under Sampler Output Channel
+          * Mapping:
+          *
+          *    If a surface has an associated HiZ Auxilliary surface, the
+          *    Sampler L2 Bypass Mode Disable field in the RENDER_SURFACE_STATE
+          *    must be set.
+          */
+         if (GEN_GEN >= 9 && info->aux_usage == ISL_AUX_USAGE_HIZ)
+            s.SamplerL2BypassModeDisable = true;
          break;
       }
    }
-- 
2.11.0



More information about the mesa-dev mailing list