From 8dc2746a848e3a0dd5124750d829f4b9000cde2c Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Tue, 2 Sep 2025 22:35:37 +0000 Subject: [PATCH] radv: bind aliased wsi image at memory offset zero This aligns with common wsi, and also obeys dedicated alloc requirement. Fixes: 825c05a7e8f ("radv: adopt wsi_common_get_memory") Reviewed-by: Samuel Pitoiset Part-of: (cherry picked from commit 94d8a4a4656738c32457d19e0562c3cb54811fd6) --- .pick_status.json | 2 +- src/amd/vulkan/radv_image.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index bf401562f0f..a9343ee48c3 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -9934,7 +9934,7 @@ "description": "radv: bind aliased wsi image at memory offset zero", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "825c05a7e8f89548c0400cf920f3f70fcfa64060", "notes": null diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 19238ffaac3..e468f8b60e7 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -1806,6 +1806,7 @@ radv_BindImageMemory2(VkDevice _device, uint32_t bindInfoCount, const VkBindImag for (uint32_t i = 0; i < bindInfoCount; ++i) { VK_FROM_HANDLE(radv_device_memory, mem, pBindInfos[i].memory); VK_FROM_HANDLE(radv_image, image, pBindInfos[i].image); + uint64_t offset = pBindInfos[i].memoryOffset; VkBindMemoryStatus *status = (void *)vk_find_struct_const(&pBindInfos[i], BIND_MEMORY_STATUS); if (status) @@ -1819,6 +1820,7 @@ radv_BindImageMemory2(VkDevice _device, uint32_t bindInfoCount, const VkBindImag assert(swapchain_info && swapchain_info->swapchain != VK_NULL_HANDLE); mem = radv_device_memory_from_handle( wsi_common_get_memory(swapchain_info->swapchain, swapchain_info->imageIndex)); + offset = 0; } #endif @@ -1846,7 +1848,7 @@ radv_BindImageMemory2(VkDevice _device, uint32_t bindInfoCount, const VkBindImag radv_GetImageMemoryRequirements2(_device, &info, &reqs); if (mem->alloc_size) { - if (pBindInfos[i].memoryOffset + reqs.memoryRequirements.size > mem->alloc_size) { + if (offset + reqs.memoryRequirements.size > mem->alloc_size) { if (status) *status->pResult = VK_ERROR_UNKNOWN; return vk_errorf(device, VK_ERROR_UNKNOWN, "Device memory object too small for the image.\n"); @@ -1855,8 +1857,7 @@ radv_BindImageMemory2(VkDevice _device, uint32_t bindInfoCount, const VkBindImag const uint64_t addr = radv_buffer_get_va(mem->bo); - radv_bind_image_memory(device, image, bind_idx, mem->bo, addr, pBindInfos[i].memoryOffset, - reqs.memoryRequirements.size); + radv_bind_image_memory(device, image, bind_idx, mem->bo, addr, offset, reqs.memoryRequirements.size); } return VK_SUCCESS; }