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)

Reply via email to