mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 15:48:36 +02:00
r600: fix cubemap arrays
A lot of cubemap array piglits fail, port the texture type picking code from radeonsi which seems to fix most of them. For images I will port the rest of the code. Fixes: getteximage-depth gl_texture_cube_map_array-* fbo-generatemipmap-cubemap array getteximage-targets cube_array amongst others. Reviewed-by: Roland Scheidegger <sroland@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com> (cherry picked from commit3ceee04a4f) Squashed with: r600/eg: use texture target to pick array size not view target (v2) This fixes a few CTS cases in : KHR-GL45.texture_view.view_sampling some multisample cases are still broken, but not sure this is the same problem. v2: fix more cases Cc: <mesa-stable@lists.freedesktop.org> Reviewed-by: Roland Scheidegger <sroland@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com> (cherry picked from commit012100b809)
This commit is contained in:
parent
9080ddc699
commit
fb4e0b77d5
1 changed files with 26 additions and 15 deletions
|
|
@ -169,9 +169,20 @@ static uint32_t r600_translate_blend_factor(int blend_fact)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static unsigned r600_tex_dim(unsigned dim, unsigned nr_samples)
|
||||
static unsigned r600_tex_dim(struct r600_texture *rtex,
|
||||
unsigned view_target, unsigned nr_samples)
|
||||
{
|
||||
switch (dim) {
|
||||
unsigned res_target = rtex->resource.b.b.target;
|
||||
|
||||
if (view_target == PIPE_TEXTURE_CUBE ||
|
||||
view_target == PIPE_TEXTURE_CUBE_ARRAY)
|
||||
res_target = view_target;
|
||||
/* If interpreting cubemaps as something else, set 2D_ARRAY. */
|
||||
else if (res_target == PIPE_TEXTURE_CUBE ||
|
||||
res_target == PIPE_TEXTURE_CUBE_ARRAY)
|
||||
res_target = PIPE_TEXTURE_2D_ARRAY;
|
||||
|
||||
switch (res_target) {
|
||||
default:
|
||||
case PIPE_TEXTURE_1D:
|
||||
return V_030000_SQ_TEX_DIM_1D;
|
||||
|
|
@ -794,24 +805,24 @@ static int evergreen_fill_tex_resource_words(struct r600_context *rctx,
|
|||
}
|
||||
nbanks = eg_num_banks(rscreen->b.info.r600_num_banks);
|
||||
|
||||
if (params->target == PIPE_TEXTURE_1D_ARRAY) {
|
||||
height = 1;
|
||||
depth = texture->array_size;
|
||||
} else if (params->target == PIPE_TEXTURE_2D_ARRAY) {
|
||||
depth = texture->array_size;
|
||||
} else if (params->target == PIPE_TEXTURE_CUBE_ARRAY)
|
||||
depth = texture->array_size / 6;
|
||||
|
||||
va = tmp->resource.gpu_address;
|
||||
|
||||
/* array type views and views into array types need to use layer offset */
|
||||
dim = params->target;
|
||||
if (params->target != PIPE_TEXTURE_CUBE)
|
||||
dim = MAX2(params->target, texture->target);
|
||||
dim = r600_tex_dim(tmp, params->target, texture->nr_samples);
|
||||
|
||||
tex_resource_words[0] = (S_030000_DIM(r600_tex_dim(dim, texture->nr_samples)) |
|
||||
S_030000_PITCH((pitch / 8) - 1) |
|
||||
S_030000_TEX_WIDTH(width - 1));
|
||||
if (dim == V_030000_SQ_TEX_DIM_1D_ARRAY) {
|
||||
height = 1;
|
||||
depth = texture->array_size;
|
||||
} else if (dim == V_030000_SQ_TEX_DIM_2D_ARRAY ||
|
||||
dim == V_030000_SQ_TEX_DIM_2D_ARRAY_MSAA) {
|
||||
depth = texture->array_size;
|
||||
} else if (dim == V_030000_SQ_TEX_DIM_CUBEMAP)
|
||||
depth = texture->array_size / 6;
|
||||
|
||||
tex_resource_words[0] = (S_030000_DIM(dim) |
|
||||
S_030000_PITCH((pitch / 8) - 1) |
|
||||
S_030000_TEX_WIDTH(width - 1));
|
||||
if (rscreen->b.chip_class == CAYMAN)
|
||||
tex_resource_words[0] |= CM_S_030000_NON_DISP_TILING_ORDER(non_disp_tiling);
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue