isl/surface_state: Handle ISL_AUX_USAGE_HIZ
authorNanley Chery <nanley.g.chery@intel.com>
Mon, 5 Dec 2016 23:24:28 +0000 (15:24 -0800)
committerNanley Chery <nanley.g.chery@intel.com>
Fri, 13 Jan 2017 04:52:20 +0000 (20:52 -0800)
v2: Remove redundant x/y offset asserts (Jason Ekstrand)

Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/isl/isl_surface_state.c

index b9093cc95131fe2f62cd635cd85b31796e0ecf24..b7354781cf0f79ec539e15f13e83fd314291c7a6 100644 (file)
@@ -520,6 +520,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 +568,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;
       }
    }