From a0d39a29da33bdc188b929d737b87fda497d607d Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 10 Apr 2026 18:25:40 +0200 Subject: [PATCH] radv: set RADEON_FLAG_EMULATE_SPARSE_RESIDENCY for sparse SSBO/UBO buffers Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_buffer.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/amd/vulkan/radv_buffer.c b/src/amd/vulkan/radv_buffer.c index 5f1cc22d82a..acdb7c0dbcb 100644 --- a/src/amd/vulkan/radv_buffer.c +++ b/src/amd/vulkan/radv_buffer.c @@ -43,6 +43,7 @@ VkResult radv_create_buffer(struct radv_device *device, const VkBufferCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer, bool is_internal) { + const struct radv_physical_device *pdev = radv_device_physical(device); struct radv_buffer *buffer; assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO); @@ -67,6 +68,14 @@ radv_create_buffer(struct radv_device *device, const VkBufferCreateInfo *pCreate enum radeon_bo_flag flags = RADEON_FLAG_VIRTUAL; uint64_t replay_address = 0; + if (pdev->info.compiler_info.has_smem_with_null_prt_bug && + (buffer->vk.create_flags & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT) && + (buffer->vk.usage & (VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT | + VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT))) { + /* Emulate sparse residency for sparse buffers that might use SMEM reads. */ + flags |= RADEON_FLAG_EMULATE_SPARSE_RESIDENCY; + } + if (pCreateInfo->flags & VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT) { flags |= RADEON_FLAG_REPLAYABLE;