summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2016-08-10 16:41:34 -0700
committerJason Ekstrand <jason.ekstrand@intel.com>2016-08-19 03:11:29 -0700
commit48f13545dd14ea639e51cdcb0482c76e9b2a117c (patch)
treeaed8766663189a889880cadb2579062a089d098d
parenteb655c4fc26cb29c6e6d8dc13315f166fb627dc8 (diff)
i965/blorp: Add genxml-based sampler state emit function
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
-rw-r--r--src/mesa/drivers/dri/i965/genX_blorp_exec.c49
1 files changed, 38 insertions, 11 deletions
diff --git a/src/mesa/drivers/dri/i965/genX_blorp_exec.c b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
index 6f1cde5e808..faa0bfc83d4 100644
--- a/src/mesa/drivers/dri/i965/genX_blorp_exec.c
+++ b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
@@ -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);