From 2afef24d3f25af363dbcc4bf621fa05d63daee29 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 28 Jul 2025 22:35:36 -0400 Subject: [PATCH] panvk: Base memoryTypeBits on phys_dev->type_count Stop hard-coding 1 and just advertise everything on the physical device. Reviewed-by: Boris Brezillon Reviewed-by: Christoph Pillmayer Part-of: --- src/panfrost/vulkan/panvk_buffer.c | 5 ++++- src/panfrost/vulkan/panvk_device_memory.c | 7 ++++++- src/panfrost/vulkan/panvk_image.c | 5 ++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/panfrost/vulkan/panvk_buffer.c b/src/panfrost/vulkan/panvk_buffer.c index 109a7c5b726..9319c366b1d 100644 --- a/src/panfrost/vulkan/panvk_buffer.c +++ b/src/panfrost/vulkan/panvk_buffer.c @@ -37,6 +37,8 @@ panvk_GetDeviceBufferMemoryRequirements(VkDevice _device, VkMemoryRequirements2 *pMemoryRequirements) { VK_FROM_HANDLE(panvk_device, device, _device); + struct panvk_physical_device *phys_dev = + to_panvk_physical_device(device->vk.physical); /* For sparse resources alignment specifies binding granularity, rather than * the alignment requirement. It's up to us to satisfy the alignment @@ -48,7 +50,8 @@ panvk_GetDeviceBufferMemoryRequirements(VkDevice _device, : 64; const uint64_t size = align64(pInfo->pCreateInfo->size, align); - pMemoryRequirements->memoryRequirements.memoryTypeBits = 1; + pMemoryRequirements->memoryRequirements.memoryTypeBits = + BITFIELD_MASK(phys_dev->memory.type_count); pMemoryRequirements->memoryRequirements.alignment = align; pMemoryRequirements->memoryRequirements.size = size; diff --git a/src/panfrost/vulkan/panvk_device_memory.c b/src/panfrost/vulkan/panvk_device_memory.c index 32d621f2fcd..85f1369a1ff 100644 --- a/src/panfrost/vulkan/panvk_device_memory.c +++ b/src/panfrost/vulkan/panvk_device_memory.c @@ -396,8 +396,13 @@ panvk_GetMemoryFdPropertiesKHR(VkDevice _device, int fd, VkMemoryFdPropertiesKHR *pMemoryFdProperties) { + VK_FROM_HANDLE(panvk_device, device, _device); + const struct panvk_physical_device *phys_dev = + to_panvk_physical_device(device->vk.physical); + assert(handleType == VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT); - pMemoryFdProperties->memoryTypeBits = 1; + pMemoryFdProperties->memoryTypeBits = + BITFIELD_MASK(phys_dev->memory.type_count); return VK_SUCCESS; } diff --git a/src/panfrost/vulkan/panvk_image.c b/src/panfrost/vulkan/panvk_image.c index 583c1bfcbfc..3e863fd6b65 100644 --- a/src/panfrost/vulkan/panvk_image.c +++ b/src/panfrost/vulkan/panvk_image.c @@ -817,6 +817,8 @@ panvk_GetImageMemoryRequirements2(VkDevice device, VkMemoryRequirements2 *pMemoryRequirements) { VK_FROM_HANDLE(panvk_image, image, pInfo->image); + struct panvk_physical_device *phys_dev = + to_panvk_physical_device(image->vk.base.device->physical); /* For sparse resources alignment specifies binding granularity, rather than * the alignment requirement. It's up to us to satisfy the alignment @@ -840,7 +842,8 @@ panvk_GetImageMemoryRequirements2(VkDevice device, ? align64(size_non_sparse, alignment) : size_non_sparse; - pMemoryRequirements->memoryRequirements.memoryTypeBits = 1; + pMemoryRequirements->memoryRequirements.memoryTypeBits = + BITFIELD_MASK(phys_dev->memory.type_count); pMemoryRequirements->memoryRequirements.alignment = alignment; pMemoryRequirements->memoryRequirements.size = size;