diff options
author | Yuanhan Liu <[email protected]> | 2011-10-14 13:47:10 +0800 |
---|---|---|
committer | Yuanhan Liu <[email protected]> | 2011-10-19 09:24:54 +0800 |
commit | 76669381c0de6a49a1edd0b88fa1ae6b86f10b30 (patch) | |
tree | a4bdf85ccafd31f393c5d8149247ed43a59fb269 /src/mesa/drivers/dri/i965/brw_wm_sampler_state.c | |
parent | 483ea0a76fd2cde8fd5d4c303f1576ae15c21de5 (diff) |
i965: setup address rounding enable bits
The patch(based on the reading of the emulator) came from while I was
trying to fix the oglc pbo texImage.1PBODefaults fail. This case
generates a texture with the width and height equal to window's width
and height respectively, then try to texture it on the whole window.
So, it's exactly one texel for one pixel. And, the min filter and mag
filter are GL_LINEAR. It runs with swrast OK, as expected. But it failed
with i965 driver.
Well, you can't tell the difference from the screen, as the error is
quite tiny. From my digging, it seems that there are some tiny error
happened while getting tex address. This will break the one texel for
one pixel rule in this case. Thus the linear result is taken, with tiny
error.
This patch would fix all oglc pbo subcase fail with the same issue on
both ILK, SNB and IVB.
v2: comments from Ian, make the address_round filed assignment consistent.
(the sampler is alread memset to 0 by the xxx_update_samper_state
caller, so need to assign 0 first)
Signed-off-by: Yuanhan Liu <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_wm_sampler_state.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_wm_sampler_state.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c index 6834ebad780..8938561bf8f 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c @@ -312,6 +312,15 @@ static void brw_update_sampler_state(struct brw_context *brw, intel->batch.bo, brw->wm.sdc_offset[unit], I915_GEM_DOMAIN_SAMPLER, 0); } + + if (sampler->ss0.min_filter != BRW_MAPFILTER_NEAREST) + sampler->ss3.address_round |= BRW_ADDRESS_ROUNDING_ENABLE_U_MIN | + BRW_ADDRESS_ROUNDING_ENABLE_V_MIN | + BRW_ADDRESS_ROUNDING_ENABLE_R_MIN; + if (sampler->ss0.mag_filter != BRW_MAPFILTER_NEAREST) + sampler->ss3.address_round |= BRW_ADDRESS_ROUNDING_ENABLE_U_MAG | + BRW_ADDRESS_ROUNDING_ENABLE_V_MAG | + BRW_ADDRESS_ROUNDING_ENABLE_R_MAG; } |