From 036d9992659bdd03c44800835f48b99f26ca24d7 Mon Sep 17 00:00:00 2001 From: Alex Deucher Date: Fri, 10 Feb 2012 10:49:13 -0500 Subject: [PATCH] r600g: fix tex tile_type offset for cayman Noticed by taiu on IRC. Signed-off-by: Alex Deucher (cherry picked from commit acca690c259824636ef1ff684a10bd1caca4751f) Conflicts: src/gallium/drivers/r600/evergreen_state.c --- src/gallium/drivers/r600/evergreen_state.c | 6 +++++- src/gallium/drivers/r600/evergreend.h | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index 60b19098287..9fd5855fc36 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -1046,6 +1046,7 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte struct pipe_resource *texture, const struct pipe_sampler_view *state) { + struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx; struct r600_pipe_sampler_view *view = CALLOC_STRUCT(r600_pipe_sampler_view); struct r600_pipe_resource_state *rstate; struct r600_resource_texture *tmp = (struct r600_resource_texture*)texture; @@ -1107,8 +1108,11 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte rstate->val[0] = (S_030000_DIM(r600_tex_dim(texture->target)) | S_030000_PITCH((pitch / 8) - 1) | - S_030000_NON_DISP_TILING_ORDER(tile_type) | S_030000_TEX_WIDTH(texture->width0 - 1)); + if (rctx->chip_class == CAYMAN) + rstate->val[0] |= CM_S_030000_NON_DISP_TILING_ORDER(tile_type); + else + rstate->val[0] |= S_030000_NON_DISP_TILING_ORDER(tile_type); rstate->val[1] = (S_030004_TEX_HEIGHT(height - 1) | S_030004_TEX_DEPTH(depth - 1) | S_030004_ARRAY_MODE(array_mode)); diff --git a/src/gallium/drivers/r600/evergreend.h b/src/gallium/drivers/r600/evergreend.h index fa3feceb3cc..310eb103ee6 100644 --- a/src/gallium/drivers/r600/evergreend.h +++ b/src/gallium/drivers/r600/evergreend.h @@ -970,6 +970,9 @@ #define S_030000_NON_DISP_TILING_ORDER(x) (((x) & 0x1) << 5) #define G_030000_NON_DISP_TILING_ORDER(x) (((x) >> 5) & 0x1) #define C_030000_NON_DISP_TILING_ORDER 0xFFFFFFDF +#define CM_S_030000_NON_DISP_TILING_ORDER(x) (((x) & 0x3) << 4) +#define CM_G_030000_NON_DISP_TILING_ORDER(x) (((x) >> 4) & 0x3) +#define CM_C_030000_NON_DISP_TILING_ORDER 0xFFFFFFCF #define S_030000_PITCH(x) (((x) & 0xFFF) << 6) #define G_030000_PITCH(x) (((x) >> 6) & 0xFFF) #define C_030000_PITCH 0xFFFC003F