summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_sampler_state.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_sampler_state.c b/src/mesa/drivers/dri/i965/brw_sampler_state.c
index 3bd22c7..7bd21f7 100644
--- a/src/mesa/drivers/dri/i965/brw_sampler_state.c
+++ b/src/mesa/drivers/dri/i965/brw_sampler_state.c
@@ -436,14 +436,17 @@ brw_update_sampler_state(struct brw_context *brw,
}
}
- /* Set address rounding bits if not using nearest filtering. */
+ /* Set address rounding bits. The conditions are empirically
+ * derived in order to pass test cases.
+ */
+ bool round_nearest = brw->gen >= 6 && target != GL_TEXTURE_3D;
unsigned address_rounding = 0;
- if (min_filter != BRW_MAPFILTER_NEAREST) {
+ if (min_filter != BRW_MAPFILTER_NEAREST || round_nearest) {
address_rounding |= BRW_ADDRESS_ROUNDING_ENABLE_U_MIN |
BRW_ADDRESS_ROUNDING_ENABLE_V_MIN |
BRW_ADDRESS_ROUNDING_ENABLE_R_MIN;
}
- if (mag_filter != BRW_MAPFILTER_NEAREST) {
+ if (mag_filter != BRW_MAPFILTER_NEAREST || round_nearest) {
address_rounding |= BRW_ADDRESS_ROUNDING_ENABLE_U_MAG |
BRW_ADDRESS_ROUNDING_ENABLE_V_MAG |
BRW_ADDRESS_ROUNDING_ENABLE_R_MAG;