mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
freedreno/a6xx: 3d and cube image fixes
Fixes dEQP-GLES31.functional.image_load_store.{3d,cube}.store.*
and a bunch more
Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
97479df8aa
commit
8c486083d0
1 changed files with 31 additions and 4 deletions
|
|
@ -85,14 +85,39 @@ static void translate_image(struct fd6_image *img, const struct pipe_image_view
|
|||
img->depth = 0;
|
||||
} else {
|
||||
img->buffer = false;
|
||||
|
||||
unsigned lvl = pimg->u.tex.level;
|
||||
img->offset = rsc->slices[lvl].offset;
|
||||
unsigned layers = pimg->u.tex.last_layer - pimg->u.tex.first_layer + 1;
|
||||
|
||||
img->offset = fd_resource_offset(rsc, lvl, pimg->u.tex.first_layer);
|
||||
img->pitch = rsc->slices[lvl].pitch * rsc->cpp;
|
||||
img->array_pitch = rsc->layer_size;
|
||||
|
||||
switch (prsc->target) {
|
||||
case PIPE_TEXTURE_RECT:
|
||||
case PIPE_TEXTURE_1D:
|
||||
case PIPE_TEXTURE_2D:
|
||||
img->array_pitch = rsc->layer_size;
|
||||
img->depth = 1;
|
||||
break;
|
||||
case PIPE_TEXTURE_1D_ARRAY:
|
||||
case PIPE_TEXTURE_2D_ARRAY:
|
||||
case PIPE_TEXTURE_CUBE:
|
||||
case PIPE_TEXTURE_CUBE_ARRAY:
|
||||
img->array_pitch = rsc->layer_size;
|
||||
// TODO the CUBE/CUBE_ARRAY might need to be layers/6 for tex state,
|
||||
// but empirically for ibo state it shouldn't be divided.
|
||||
img->depth = layers;
|
||||
break;
|
||||
case PIPE_TEXTURE_3D:
|
||||
img->array_pitch = rsc->slices[lvl].size0;
|
||||
img->depth = u_minify(prsc->depth0, lvl);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
img->width = u_minify(prsc->width0, lvl);
|
||||
img->height = u_minify(prsc->height0, lvl);
|
||||
img->depth = u_minify(prsc->depth0, lvl);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -132,9 +157,11 @@ static void translate_buf(struct fd6_image *img, const struct pipe_shader_buffer
|
|||
|
||||
static void emit_image_tex(struct fd_ringbuffer *ring, struct fd6_image *img)
|
||||
{
|
||||
debug_assert(fd_resource(img->prsc)->tile_mode == 0);
|
||||
|
||||
OUT_RING(ring, A6XX_TEX_CONST_0_FMT(img->fmt) |
|
||||
A6XX_TEX_CONST_0_TILE_MODE(fd_resource(img->prsc)->tile_mode) |
|
||||
fd6_tex_swiz(img->prsc, img->fmt, PIPE_SWIZZLE_X, PIPE_SWIZZLE_Y,
|
||||
fd6_tex_swiz(img->prsc, img->pfmt, PIPE_SWIZZLE_X, PIPE_SWIZZLE_Y,
|
||||
PIPE_SWIZZLE_Z, PIPE_SWIZZLE_W) |
|
||||
COND(img->srgb, A6XX_TEX_CONST_0_SRGB));
|
||||
OUT_RING(ring, A6XX_TEX_CONST_1_WIDTH(img->width) |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue