nvk: Plumb a physical device into descriptor_stride_align_for_type

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26617>
This commit is contained in:
Faith Ekstrand 2023-12-09 15:59:22 -06:00 committed by Marge Bot
parent c7de8afbe0
commit bc236acff5
3 changed files with 25 additions and 13 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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)