From 91fa1970c9978edb6de4da1066f1b213e9bd2868 Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Sun, 25 Jun 2023 12:13:23 +0200 Subject: [PATCH] r600: Pre-EG - Set wrap texture modes to repeat when seemless cube is used On Pre-Evergreen hardware we have a flag "Force Clamp X,Y policy to wrap for CubeMaps" but it doesn't seem to affect how border clamping is done. With bf3027 this is set to PIPE_TEX_WRAP_CLAMP_TO_EDGE for cube maps, and results in the regression reported in #9028. Forcing repeat mode fixes the issue. Fixes: bf3027c3916ad5be172c22851e7172671709a9bc mesa/st: Normalize wrap modes for seamless cubes Related: https://gitlab.freedesktop.org/mesa/mesa/-/issues/9028 Signed-off-by: Gert Wollny Part-of: --- src/gallium/drivers/r600/r600_state.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index a806f4de4eb..7d7382b94e1 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -1841,6 +1841,20 @@ static void r600_emit_sampler_states(struct r600_context *rctx, enum pipe_texture_target target = PIPE_BUFFER; if (rview) target = rview->base.texture->target; + + /* If seamless cube map is set, set the CAMP_(X|Y|Z) to + * SQ_TEX_WRAP which seems to trigger properly ignoring the + * texture wrap mode */ + if (target == PIPE_TEXTURE_CUBE || + target == PIPE_TEXTURE_CUBE_ARRAY) { + if (rstate->seamless_cube_map){ + uint32_t mask = ~(S_03C000_CLAMP_X(7) | + S_03C000_CLAMP_Y(7) | + S_03C000_CLAMP_Z(7)); + rstate->tex_sampler_words[0] &= mask; + } + } + if (target == PIPE_TEXTURE_1D_ARRAY || target == PIPE_TEXTURE_2D_ARRAY) { rstate->tex_sampler_words[0] |= S_03C000_TEX_ARRAY_OVERRIDE(1);