From 68db27f0b432f6d493543a87b4fb4edc518be01a Mon Sep 17 00:00:00 2001 From: Trigger Huang Date: Fri, 6 Feb 2026 12:38:00 +0800 Subject: [PATCH] radv: add protected type bits for memory requirements Add protected type bits for memory requirements of protected resources Signed-off-by: Trigger Huang Part-of: --- src/amd/vulkan/radv_buffer.c | 3 +++ src/amd/vulkan/radv_device.c | 3 +++ src/amd/vulkan/radv_physical_device.c | 2 ++ src/amd/vulkan/radv_physical_device.h | 3 +++ 4 files changed, 11 insertions(+) diff --git a/src/amd/vulkan/radv_buffer.c b/src/amd/vulkan/radv_buffer.c index 2cbb732db39..1a5371e4a8d 100644 --- a/src/amd/vulkan/radv_buffer.c +++ b/src/amd/vulkan/radv_buffer.c @@ -188,6 +188,9 @@ radv_get_buffer_memory_requirements(struct radv_device *device, VkDeviceSize siz VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT | VK_BUFFER_USAGE_2_DESCRIPTOR_HEAP_BIT_EXT)) pMemoryRequirements->memoryRequirements.memoryTypeBits = pdev->memory_types_32bit; + if (flags & VK_BUFFER_CREATE_PROTECTED_BIT) + pMemoryRequirements->memoryRequirements.memoryTypeBits &= pdev->memory_types_protected; + if (flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) { pMemoryRequirements->memoryRequirements.alignment = 4096; } else { diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index e4a553a8b4c..0e78ca17b27 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -1607,6 +1607,9 @@ radv_GetImageMemoryRequirements2(VkDevice _device, const VkImageMemoryRequiremen pMemoryRequirements->memoryRequirements.memoryTypeBits = ((1u << pdev->memory_properties.memoryTypeCount) - 1u) & ~pdev->memory_types_32bit; + if (image->vk.create_flags & VK_IMAGE_CREATE_PROTECTED_BIT) + pMemoryRequirements->memoryRequirements.memoryTypeBits &= pdev->memory_types_protected; + if (image->vk.usage & VK_IMAGE_USAGE_HOST_TRANSFER_BIT) { /* Only expose host visible memory types for images that need to be mapped on the CPU. */ pMemoryRequirements->memoryRequirements.memoryTypeBits &= pdev->memory_types_host_visible; diff --git a/src/amd/vulkan/radv_physical_device.c b/src/amd/vulkan/radv_physical_device.c index d762cc452f6..9638fdae0a6 100644 --- a/src/amd/vulkan/radv_physical_device.c +++ b/src/amd/vulkan/radv_physical_device.c @@ -650,6 +650,8 @@ radv_physical_device_init_mem_types(struct radv_physical_device *pdev) pdev->memory_types_32bit |= BITFIELD_BIT(i); if (pdev->memory_flags[i] & RADEON_FLAG_CPU_ACCESS) pdev->memory_types_host_visible |= BITFIELD_BIT(i); + if (pdev->memory_flags[i] & RADEON_FLAG_ENCRYPTED) + pdev->memory_types_protected |= BITFIELD_BIT(i); } } diff --git a/src/amd/vulkan/radv_physical_device.h b/src/amd/vulkan/radv_physical_device.h index bc7ad51309a..4d6a6fe6551 100644 --- a/src/amd/vulkan/radv_physical_device.h +++ b/src/amd/vulkan/radv_physical_device.h @@ -170,6 +170,9 @@ struct radv_physical_device { /* Bitmask of memory types that are host-visible. */ uint32_t memory_types_host_visible; + /* Bitmask of memory types that are protected. */ + uint32_t memory_types_protected; + #ifndef _WIN32 int available_nodes; drmPciBusInfo bus_info;