i965/blorp: Add genxml-based sampler state emit function
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 10 Aug 2016 23:41:34 +0000 (16:41 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 19 Aug 2016 10:11:29 +0000 (03:11 -0700)
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/genX_blorp_exec.c

index 6f1cde5e808a0f090b2d7afb22ef0bebb16bce2d..faa0bfc83d47580a2b4e9f96b636d0e3077091d3 100644 (file)
@@ -331,6 +331,42 @@ blorp_emit_depth_stencil_state(struct brw_context *brw,
    return offset;
 }
 
+static void
+blorp_emit_sampler_state(struct brw_context *brw,
+                         const struct brw_blorp_params *params)
+{
+   struct GENX(SAMPLER_STATE) sampler = {
+      .MipModeFilter = MIPFILTER_NONE,
+      .MagModeFilter = MAPFILTER_LINEAR,
+      .MinModeFilter = MAPFILTER_LINEAR,
+      .MinLOD = 0,
+      .MaxLOD = 0,
+      .TCXAddressControlMode = TCM_CLAMP,
+      .TCYAddressControlMode = TCM_CLAMP,
+      .TCZAddressControlMode = TCM_CLAMP,
+      .MaximumAnisotropy = RATIO21,
+      .RAddressMinFilterRoundingEnable = true,
+      .RAddressMagFilterRoundingEnable = true,
+      .VAddressMinFilterRoundingEnable = true,
+      .VAddressMagFilterRoundingEnable = true,
+      .UAddressMinFilterRoundingEnable = true,
+      .UAddressMagFilterRoundingEnable = true,
+      .NonnormalizedCoordinateEnable = true,
+   };
+
+   uint32_t offset;
+   void *state = brw_state_batch(brw, AUB_TRACE_SAMPLER_STATE,
+                                 GENX(SAMPLER_STATE_length) * 4, 32, &offset);
+   GENX(SAMPLER_STATE_pack)(NULL, state, &sampler);
+
+   blorp_emit(brw, GENX(3DSTATE_SAMPLER_STATE_POINTERS), ssp) {
+      ssp.VSSamplerStateChange = true;
+      ssp.GSSamplerStateChange = true;
+      ssp.PSSamplerStateChange = true;
+      ssp.PointertoPSSamplerState = offset;
+   }
+}
+
 /* 3DSTATE_VIEWPORT_STATE_POINTERS */
 static void
 blorp_emit_viewport_state(struct brw_context *brw,
@@ -450,17 +486,8 @@ genX(blorp_exec)(struct brw_context *brw,
       }
    }
 
-   if (params->src.bo) {
-      const uint32_t sampler_offset =
-         gen6_blorp_emit_sampler_state(brw, MAPFILTER_LINEAR, 0, true);
-
-      blorp_emit(brw, GENX(3DSTATE_SAMPLER_STATE_POINTERS), ssp) {
-         ssp.VSSamplerStateChange = true;
-         ssp.GSSamplerStateChange = true;
-         ssp.PSSamplerStateChange = true;
-         ssp.PointertoPSSamplerState = sampler_offset;
-      }
-   }
+   if (params->src.bo)
+      blorp_emit_sampler_state(brw, params);
 
    gen6_emit_3dstate_multisample(brw, params->dst.surf.samples);