Module: Mesa Branch: main Commit: bc236acff5ebb8a8d63294348de44f728079cd6b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bc236acff5ebb8a8d63294348de44f728079cd6b
Author: Faith Ekstrand <[email protected]> Date: Sat Dec 9 15:59:22 2023 -0600 nvk: Plumb a physical device into descriptor_stride_align_for_type Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26617> --- src/nouveau/vulkan/nvk_descriptor_set.c | 6 ++++-- src/nouveau/vulkan/nvk_descriptor_set_layout.c | 23 +++++++++++++++-------- src/nouveau/vulkan/nvk_descriptor_set_layout.h | 9 ++++++--- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/nouveau/vulkan/nvk_descriptor_set.c b/src/nouveau/vulkan/nvk_descriptor_set.c index 68e4e81e60c..59639026e32 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set.c +++ b/src/nouveau/vulkan/nvk_descriptor_set.c @@ -395,7 +395,8 @@ nvk_CreateDescriptorPool(VkDevice _device, type_list = &mutable_info->pMutableDescriptorTypeLists[i]; uint32_t stride, align; - nvk_descriptor_stride_align_for_type(pCreateInfo->pPoolSizes[i].type, + nvk_descriptor_stride_align_for_type(pdev, + pCreateInfo->pPoolSizes[i].type, type_list, &stride, &align); max_align = MAX2(max_align, align); } @@ -407,7 +408,8 @@ nvk_CreateDescriptorPool(VkDevice _device, type_list = &mutable_info->pMutableDescriptorTypeLists[i]; uint32_t stride, align; - nvk_descriptor_stride_align_for_type(pCreateInfo->pPoolSizes[i].type, + nvk_descriptor_stride_align_for_type(pdev, + pCreateInfo->pPoolSizes[i].type, type_list, &stride, &align); bo_size += MAX2(stride, max_align) * pCreateInfo->pPoolSizes[i].descriptorCount; diff --git a/src/nouveau/vulkan/nvk_descriptor_set_layout.c b/src/nouveau/vulkan/nvk_descriptor_set_layout.c index ecd80693c67..391760e1da0 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set_layout.c +++ b/src/nouveau/vulkan/nvk_descriptor_set_layout.c @@ -7,6 +7,7 @@ #include "nvk_descriptor_set.h" #include "nvk_device.h" #include "nvk_entrypoints.h" +#include "nvk_physical_device.h" #include "nvk_sampler.h" #include "vk_pipeline_layout.h" @@ -27,7 +28,8 @@ binding_has_immutable_samplers(const VkDescriptorSetLayoutBinding *binding) } void -nvk_descriptor_stride_align_for_type(VkDescriptorType type, +nvk_descriptor_stride_align_for_type(const struct nvk_physical_device *pdev, + VkDescriptorType type, const VkMutableDescriptorTypeListEXT *type_list, uint32_t *stride, uint32_t *align) { @@ -67,7 +69,8 @@ nvk_descriptor_stride_align_for_type(VkDescriptorType type, assert(type_list->pDescriptorTypes[i] != VK_DESCRIPTOR_TYPE_MUTABLE_EXT); uint32_t desc_stride, desc_align; - nvk_descriptor_stride_align_for_type(type_list->pDescriptorTypes[i], + nvk_descriptor_stride_align_for_type(pdev, + type_list->pDescriptorTypes[i], NULL, &desc_stride, &desc_align); *stride = MAX2(*stride, desc_stride); *align = MAX2(*align, desc_align); @@ -103,6 +106,7 @@ nvk_CreateDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout *pSetLayout) { VK_FROM_HANDLE(nvk_device, dev, device); + struct nvk_physical_device *pdev = nvk_device_physical(dev); uint32_t num_bindings = 0; uint32_t immutable_sampler_count = 0; @@ -197,8 +201,8 @@ nvk_CreateDescriptorSetLayout(VkDevice device, mutable_info, info_idx); uint32_t stride, align; - nvk_descriptor_stride_align_for_type(binding->descriptorType, type_list, - &stride, &align); + nvk_descriptor_stride_align_for_type(pdev, binding->descriptorType, + type_list, &stride, &align); uint8_t max_plane_count = 1; @@ -284,6 +288,9 @@ nvk_GetDescriptorSetLayoutSupport(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo, VkDescriptorSetLayoutSupport *pSupport) { + VK_FROM_HANDLE(nvk_device, dev, device); + struct nvk_physical_device *pdev = nvk_device_physical(dev); + const VkMutableDescriptorTypeCreateInfoEXT *mutable_info = vk_find_struct_const(pCreateInfo->pNext, MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT); @@ -303,8 +310,8 @@ nvk_GetDescriptorSetLayoutSupport(VkDevice device, mutable_info, i); uint32_t stride, align; - nvk_descriptor_stride_align_for_type(binding->descriptorType, type_list, - &stride, &align); + nvk_descriptor_stride_align_for_type(pdev, binding->descriptorType, + type_list, &stride, &align); max_align = MAX2(max_align, align); } @@ -334,8 +341,8 @@ nvk_GetDescriptorSetLayoutSupport(VkDevice device, mutable_info, i); uint32_t stride, align; - nvk_descriptor_stride_align_for_type(binding->descriptorType, type_list, - &stride, &align); + nvk_descriptor_stride_align_for_type(pdev, binding->descriptorType, + type_list, &stride, &align); if (stride > 0) { assert(stride <= UINT8_MAX); diff --git a/src/nouveau/vulkan/nvk_descriptor_set_layout.h b/src/nouveau/vulkan/nvk_descriptor_set_layout.h index 815649db895..9e7c4039478 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set_layout.h +++ b/src/nouveau/vulkan/nvk_descriptor_set_layout.h @@ -11,6 +11,7 @@ #include "vk_object.h" struct nvk_device; +struct nvk_physical_device; struct nvk_sampler; struct vk_pipeline_layout; @@ -62,9 +63,11 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_set_layout, vk.base, VkDescriptorSetLayout, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT) -void nvk_descriptor_stride_align_for_type(VkDescriptorType type, - const VkMutableDescriptorTypeListEXT *type_list, - uint32_t *stride, uint32_t *align); +void +nvk_descriptor_stride_align_for_type(const struct nvk_physical_device *pdev, + VkDescriptorType type, + const VkMutableDescriptorTypeListEXT *type_list, + uint32_t *stride, uint32_t *align); static inline struct nvk_descriptor_set_layout * vk_to_nvk_descriptor_set_layout(struct vk_descriptor_set_layout *layout)
