radv: mesa-9999/src/amd/vulkan/radv_image_view.c:147: radv_set_mutable_tex_desc_fields: Assertion `(plane->surface.u.gfx9.surf_pitch * plane->surface.bpe) % 256 == 0' failed.
Description
When doing vkCmdCopyImage
from a VK_FORMAT_R8G8_UINT
image, color aspect, to plane 1 aspect of a VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
image, (plane->surface.u.gfx9.surf_pitch * plane->surface.bpe) % 256 == 0
assertion fails.
It seems that in function radv_meta_image_to_image_cs
of radv_meta_bufimage.c
, the following calls are made:
create_iview(cmd_buffer, src, &src_view, depth_format, aspect_mask);
create_iview(cmd_buffer, dst, &dst_view, depth_format, aspect_mask);
where
(gdb) bt
#0 0x00007ff328fbd44c in ?? () from /usr/lib64/libc.so.6
#1 0x00007ff328f6c436 in raise () from /usr/lib64/libc.so.6
#2 0x00007ff328f548f7 in abort () from /usr/lib64/libc.so.6
#3 0x00007ff328f5481b in ?? () from /usr/lib64/libc.so.6
#4 0x00007ff328f64a26 in __assert_fail () from /usr/lib64/libc.so.6
#5 0x00007ff325f59534 in radv_set_mutable_tex_desc_fields (device=device@entry=0x55baff07cd30, image=image@entry=0x55baff3fe010, base_level_info=base_level_info@entry=0x0, plane_id=plane_id@entry=1,
base_level=0, first_level=0, block_width=0, is_stencil=false, is_storage_image=false, disable_compression=false, enable_write_compression=true, state=0x7ff3115fd81c, nbc_view=0x7ff3115fd8e0)
at ../mesa-9999/src/amd/vulkan/radv_image_view.c:147
#6 0x00007ff325f59ab6 in radv_image_view_make_descriptor (iview=iview@entry=0x7ff3115fd760, device=device@entry=0x55baff07cd30, vk_format=vk_format@entry=VK_FORMAT_R8G8_UINT,
components=components@entry=0x7ff3115fd698, min_lod=min_lod@entry=0, is_storage_image=is_storage_image@entry=false, disable_compression=disable_compression@entry=false, enable_compression=false,
plane_id=1, descriptor_plane_id=0, img_create_flags=0, nbc_view=0x7ff3115fd8e0, sliced_3d=0x0, force_zero_base_mip=true) at ../mesa-9999/src/amd/vulkan/radv_image_view.c:695
#7 0x00007ff325f5a133 in radv_image_view_init (iview=iview@entry=0x7ff3115fd760, device=device@entry=0x55baff07cd30, pCreateInfo=pCreateInfo@entry=0x7ff3115fd670, img_create_flags=img_create_flags@entry=0,
extra_create_info=extra_create_info@entry=0x7ff3115fd66c) at ../mesa-9999/src/amd/vulkan/radv_image_view.c:893
#8 0x00007ff325ec7f8b in create_iview (cmd_buffer=cmd_buffer@entry=0x55baff5c26a0, surf=surf@entry=0x7ff3115fdb90, iview=iview@entry=0x7ff3115fd760, format=VK_FORMAT_R8G8_UINT,
format@entry=VK_FORMAT_UNDEFINED, aspects=aspects@entry=VK_IMAGE_ASPECT_PLANE_1_BIT) at ../mesa-9999/src/amd/vulkan/meta/radv_meta_bufimage.c:1075
#9 0x00007ff325ecd85e in radv_meta_image_to_image_cs (cmd_buffer=cmd_buffer@entry=0x55baff5c26a0, src=src@entry=0x7ff3115fdb90, dst=dst@entry=0x7ff3115fdbc0, num_rects=num_rects@entry=1,
rects=rects@entry=0x7ff3115fdb70) at ../mesa-9999/src/amd/vulkan/meta/radv_meta_bufimage.c:1610
#10 0x00007ff325ed60c6 in copy_image (cmd_buffer=cmd_buffer@entry=0x55baff5c26a0, src_image=src_image@entry=0x55baff3fe010, src_image_layout=<optimized out>, dst_image=dst_image@entry=0x55baff5d0b80,
dst_image_layout=VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, region=0x7ff3115fec80) at ../mesa-9999/src/amd/vulkan/meta/radv_meta_copy.c:562
#11 0x00007ff325ed6484 in radv_CmdCopyImage2 (commandBuffer=0x55baff5c26a0, pCopyImageInfo=0x7ff3115fec40) at ../mesa-9999/src/amd/vulkan/meta/radv_meta_copy.c:609
#12 0x00007ff325ff644e in vk_common_CmdCopyImage (commandBuffer=0x55baff5c26a0, srcImage=0x55baff3fe010, srcImageLayout=VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dstImage=0x55baff5d0b80,
dstImageLayout=VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, regionCount=1, pRegions=0x7ff3115ff1d0) at ../mesa-9999/src/vulkan/runtime/vk_cmd_copy.c:101
#13 0x00007ff31b0d2c60 in ?? () from /usr/lib64/libVkLayer_khronos_validation.so
#14 0x000055bafd014079 in vk::raii::CommandBuffer::copyImage (regions=..., dstImageLayout=vk::ImageLayout::eTransferDstOptimal, dstImage=..., srcImageLayout=vk::ImageLayout::eTransferSrcOptimal, srcImage=...,
this=0x55baff3e1cc8) at /usr/include/vulkan/vulkan_raii.hpp:13470
#15 video_encoder_vulkan::PresentImage (this=0x55baff4395b0, index=0, src_yuv=..., cmd_buf=...) at /home/xytovl/projects/WiVRn/server/encoder/video_encoder_vulkan.cpp:573
#16 0x000055bafcf8446e in comp_wivrn_present (ct=0x55bafef14c10, queue_=0x55bafef12f00, index=0, timeline_semaphore_value=12, desired_present_time_ns=18484967568474, present_slop_ns=0)
at /home/xytovl/projects/WiVRn/server/driver/wivrn_comp_target.cpp:524
#17 0x000055bafd05f89c in comp_target_present (ct=0x55bafef14c10, queue=0x55bafef12f00, index=0, timeline_semaphore_value=12, desired_present_time_ns=18484967568474, present_slop_ns=0)
at /home/xytovl/projects/WiVRn/build-server/_deps/monado-src/src/xrt/compositor/main/comp_target.h:402
#18 0x000055bafd061d4f in renderer_present_swapchain_image (r=0x55baff3ff950, desired_present_time_ns=18484967568474, present_slop_ns=0)
at /home/xytovl/projects/WiVRn/build-server/_deps/monado-src/src/xrt/compositor/main/comp_renderer.c:811
#19 0x000055bafd062b30 in comp_renderer_draw (r=0x55baff3ff950) at /home/xytovl/projects/WiVRn/build-server/_deps/monado-src/src/xrt/compositor/main/comp_renderer.c:1193
#20 0x000055bafd05ce4c in compositor_layer_commit (xc=0x55bafef42280, sync_handle=-1) at /home/xytovl/projects/WiVRn/build-server/_deps/monado-src/src/xrt/compositor/main/comp_compositor.c:307
#21 0x000055bafd0c8ff2 in xrt_comp_layer_commit (xc=0x55bafef42280, sync_handle=-1) at /home/xytovl/projects/WiVRn/build-server/_deps/monado-src/src/xrt/include/xrt/xrt_compositor.h:1821
#22 0x000055bafd0ca400 in multi_main_loop (msc=0x55baff538e20) at /home/xytovl/projects/WiVRn/build-server/_deps/monado-src/src/xrt/compositor/multi/comp_multi_system.c:513
#23 0x000055bafd0ca50d in thread_func (ptr=0x55baff538e20) at /home/xytovl/projects/WiVRn/build-server/_deps/monado-src/src/xrt/compositor/multi/comp_multi_system.c:540
#24 0x00007ff328fbb731 in ?? () from /usr/lib64/libc.so.6
#25 0x00007ff32903924c in ?? () from /usr/lib64/libc.so.6
(gdb) f 9
#9 0x00007ff325ecd85e in radv_meta_image_to_image_cs (cmd_buffer=cmd_buffer@entry=0x55baff5c26a0, src=src@entry=0x7ff3115fdb90, dst=dst@entry=0x7ff3115fdbc0, num_rects=num_rects@entry=1,
rects=rects@entry=0x7ff3115fdb70) at ../mesa-9999/src/amd/vulkan/meta/radv_meta_bufimage.c:1610
1610 create_iview(cmd_buffer, src, &src_view, depth_format, aspect_mask);
(gdb) p *src
$41 = {bs = 2 '\002', format = VK_FORMAT_R8G8_UINT, image = 0x55baff3fe010, level = 0, layer = 0, aspect_mask = 1, current_layout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, disable_compression = false}
(gdb) p *dst
$42 = {bs = 2 '\002', format = VK_FORMAT_R8G8_UINT, image = 0x55baff5d0b80, level = 0, layer = 0, aspect_mask = 32, current_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, disable_compression = false}
We use twice the same aspect_mask
, which leads into using plane 1 for both images, and read undefined data for the source (single plane).
Steps to reproduce
Not isolated yet: discovered while developing https://github.com/Meumeu/WiVRn/tree/vulkan-video-encode, in vulkan video backend.
System information
- OS:
Gentoo
- GPU:
2d:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] [1002:73df] (rev c1)
- Kernel version:
Linux darwin 6.8.7-gentoo #1 SMP PREEMPT_DYNAMIC Sat Apr 20 12:53:43 CEST 2024 x86_64 AMD Ryzen 5 5600X 6-Core Processor AuthenticAMD GNU/Linux
- Mesa version:
Mesa 24.1.0-devel (git-04f232ed99)
- Desktop environment:
GNOME