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;