mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-14 17:20:42 +01:00
v3d: reject fast TLB blit when RT formats don't match
v3d_tlb_blit_fast includes the blit onto a pending job that writes
to the source resource. The TLB data is already unpacked according to
the job's RT format, so storing it with a different RT format performs
a channel reinterpretation rather than a raw byte copy, corrupting the
data.
So when copying from RGB10_A2UI to RG16UI with glCopyImageSubData,
the copy_image path remaps both formats to R16G16_UNORM for a raw
32-bit copy. The fast TLB blit found the pending clear job
(RGB10_A2UI, 4 channels: 10-10-10-2) and stored its TLB data as RG16UI
(2 channels: 16-16), writing the unpacked 10-bit R and G channel values
into 16-bit fields instead of preserving the raw packed bits.
Previous internal_type/bpp check was insufficient: both RGB10_A2UI
and RG16UI share internal_type=16UI and the source bpp (64) exceeds
the destination bpp (32), but their channel layouts are different.
Add a check that the job's source surface RT format matches the blit
destination RT format before allowing the fast path.
Fixes: 66de8b4b5c ("v3d: add a faster TLB blit path")
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40200>
This commit is contained in:
parent
b8024d7723
commit
5454221cfb
3 changed files with 10 additions and 19 deletions
|
|
@ -756,16 +756,6 @@ ubsan-dEQP-VK.image.mutable.2d_array.r16g16_sfloat_r32_uint_draw_copy_resolve_mu
|
|||
ubsan-dEQP-VK.image.mutable.2d_array.r16g16b16a16_sfloat_r16g16b16a16_uint_draw_copy_resolve_mutable_resolve_att,Fail
|
||||
ubsan-dEQP-VK.image.mutable.2d_array.r32_uint_r8g8b8a8_sint_draw_copy_resolve_mutable_color_att,Fail
|
||||
|
||||
# New failures with ES CTS 3.2.13.0
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16f.renderbuffer_to_texture2d,Fail
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16i.renderbuffer_to_renderbuffer,Fail
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16i.renderbuffer_to_texture2d,Fail
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16ui.renderbuffer_to_renderbuffer,Fail
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16ui.renderbuffer_to_texture2d,Fail
|
||||
arm32-dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16f.renderbuffer_to_texture2d,Fail
|
||||
arm32-dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16i.renderbuffer_to_texture2d,Fail
|
||||
arm32-dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16ui.renderbuffer_to_texture2d,Fail
|
||||
|
||||
# SKQP failing tests
|
||||
ES2BlendWithNoTexture,Fail
|
||||
SRGBReadWritePixels,Fail
|
||||
|
|
|
|||
|
|
@ -607,15 +607,6 @@ dEQP-VK.binding_model.unused_invalid_descriptor.write.unused.storage_buffer,Cras
|
|||
dEQP-VK.binding_model.unused_invalid_descriptor.write.unused.uniform_buffer,Crash
|
||||
asan-dEQP-VK.binding_model.unused_invalid_descriptor.write.invalid.combined_image_sampler,Crash
|
||||
|
||||
# New failures with ES CTS 3.2.13.0
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16f.renderbuffer_to_texture2d,Fail
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16i.renderbuffer_to_renderbuffer,Fail
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16i.renderbuffer_to_texture2d,Fail
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16ui.renderbuffer_to_renderbuffer,Fail
|
||||
dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16ui.renderbuffer_to_texture2d,Fail
|
||||
asan-dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16f.renderbuffer_to_texture2d,Fail
|
||||
asan-dEQP-GLES31.functional.copy_image.non_compressed.viewclass_32_bits.rgb10_a2ui_rg16i.renderbuffer_to_texture2d,Fail
|
||||
|
||||
# SKQP failing tests
|
||||
ES2BlendWithNoTexture,Fail
|
||||
SRGBReadWritePixels,Fail
|
||||
|
|
|
|||
|
|
@ -471,6 +471,16 @@ v3d_tlb_blit_fast(struct pipe_context *pctx, struct pipe_blit_info *info)
|
|||
return;
|
||||
}
|
||||
|
||||
/* If the blit destination uses a different RT format the channel
|
||||
* layout won't match and we would corrupt the data (e.g. storing
|
||||
* 10-10-10-2 channels as 16-16).
|
||||
*/
|
||||
if (v3d_get_rt_format(devinfo, spsurf->format) !=
|
||||
v3d_get_rt_format(devinfo, dbuf.format)) {
|
||||
pipe_resource_reference(&dbuf.texture, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
MESA_TRACE_FUNC();
|
||||
|
||||
/* If we had any other jobs writing to the blit dst we should submit
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue