diff options
author | Jason Ekstrand <[email protected]> | 2016-08-10 16:41:34 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-08-19 03:11:29 -0700 |
commit | 48f13545dd14ea639e51cdcb0482c76e9b2a117c (patch) | |
tree | aed8766663189a889880cadb2579062a089d098d | |
parent | eb655c4fc26cb29c6e6d8dc13315f166fb627dc8 (diff) |
i965/blorp: Add genxml-based sampler state emit function
Signed-off-by: Jason Ekstrand <[email protected]>
Reviewed-by: Topi Pohjolainen <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/genX_blorp_exec.c | 49 |
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); |