mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-18 19:00:37 +02:00
panfrost: Fix formats converting uninit from AFBC
If no slices were valid (the resource is uninitialized), we were reading
a bogus PIPE_FORMAT_NONE format from the blit.dst.format. Fix this --
and guard against scope similar issues -- by hoisting the blit
assignments out of the loop so they're valid.
Fixes: 9d0ad7fd2e ("panfrost: Patch the gallium driver to use pan_image_layout_init()")
Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10415>
This commit is contained in:
parent
3d979c9169
commit
c220976fd0
2 changed files with 16 additions and 45 deletions
|
|
@ -41,34 +41,6 @@ dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.8,F
|
|||
dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.9,Fail
|
||||
dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_strip.instanced_attributes,Fail
|
||||
dEQP-GLES31.functional.draw_indirect.random.31,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_r32f,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_r32i,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_r32ui,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_rgba8i,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_rgba8_snorm,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_rgba8ui,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8_single_layer,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8_single_layer,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_r32f,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_r32i,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_r32ui,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_rgba8i,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_rgba8_snorm,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_rgba8ui,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d.load_store.rgba8,Fail
|
||||
dEQP-GLES31.functional.image_load_store.2d.store.rgba8,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_r32f,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_r32i,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_r32ui,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_rgba8i,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_rgba8_snorm,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_rgba8ui,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8_single_layer,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.store.rgba8,Fail
|
||||
dEQP-GLES31.functional.image_load_store.3d.store.rgba8_single_layer,Fail
|
||||
dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_array,Fail
|
||||
dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_max_array,Fail
|
||||
dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_max,Fail
|
||||
|
|
|
|||
|
|
@ -1007,8 +1007,7 @@ pan_resource_modifier_convert(struct panfrost_context *ctx,
|
|||
panfrost_resource_create_with_modifier(
|
||||
ctx->base.screen, &rsrc->base, modifier);
|
||||
struct panfrost_resource *tmp_rsrc = pan_resource(tmp_prsrc);
|
||||
|
||||
struct pipe_blit_info blit = {0};
|
||||
enum pipe_format blit_fmt = pan_blit_format(tmp_rsrc->base.format);
|
||||
|
||||
unsigned depth = rsrc->base.target == PIPE_TEXTURE_3D ?
|
||||
rsrc->base.depth0 : rsrc->base.array_size;
|
||||
|
|
@ -1016,22 +1015,22 @@ pan_resource_modifier_convert(struct panfrost_context *ctx,
|
|||
struct pipe_box box =
|
||||
{ 0, 0, 0, rsrc->base.width0, rsrc->base.height0, depth };
|
||||
|
||||
struct pipe_blit_info blit = {
|
||||
.dst.resource = &tmp_rsrc->base,
|
||||
.dst.format = blit_fmt,
|
||||
.dst.box = box,
|
||||
.src.resource = &rsrc->base,
|
||||
.src.format = pan_blit_format(rsrc->base.format),
|
||||
.src.box = box,
|
||||
.mask = util_format_get_mask(blit_fmt),
|
||||
.filter = PIPE_TEX_FILTER_NEAREST
|
||||
};
|
||||
|
||||
for (int i = 0; i <= rsrc->base.last_level; i++) {
|
||||
if (!rsrc->state.slices[i].data_valid)
|
||||
continue;
|
||||
|
||||
blit.dst.resource = &tmp_rsrc->base;
|
||||
blit.dst.format = pan_blit_format(tmp_rsrc->base.format);
|
||||
blit.dst.level = i;
|
||||
blit.dst.box = box;
|
||||
blit.src.resource = &rsrc->base;
|
||||
blit.src.format = pan_blit_format(rsrc->base.format);
|
||||
blit.src.level = i;
|
||||
blit.src.box = box;
|
||||
blit.mask = util_format_get_mask(blit.dst.format);
|
||||
blit.filter = PIPE_TEX_FILTER_NEAREST;
|
||||
|
||||
panfrost_blit(&ctx->base, &blit);
|
||||
if (rsrc->state.slices[i].data_valid) {
|
||||
blit.dst.level = blit.src.level = i;
|
||||
panfrost_blit(&ctx->base, &blit);
|
||||
}
|
||||
}
|
||||
|
||||
panfrost_bo_unreference(rsrc->image.data.bo);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue