zink: add handling on the vk side for discrete sampler descriptors

just the descriptor layout/set management

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19327>
This commit is contained in:
Mike Blumenkrantz
2022-10-18 11:42:45 -04:00
committed by Marge Bot
parent b900bb2209
commit 1b45e79355
4 changed files with 18 additions and 3 deletions
+7 -3
View File
@@ -324,6 +324,8 @@ init_template_entry(struct zink_shader *shader, enum zink_descriptor_type type,
entry->offset = offsetof(struct zink_context, di.ubos[stage][index]);
entry->stride = sizeof(VkDescriptorBufferInfo);
break;
case VK_DESCRIPTOR_TYPE_SAMPLER:
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
entry->offset = offsetof(struct zink_context, di.textures[stage][index]);
entry->stride = sizeof(VkDescriptorImageInfo);
@@ -358,7 +360,8 @@ descriptor_program_num_sizes(VkDescriptorPoolSize *sizes, enum zink_descriptor_t
return !!sizes[ZDS_INDEX_UBO].descriptorCount;
case ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW:
return !!sizes[ZDS_INDEX_COMBINED_SAMPLER].descriptorCount +
!!sizes[ZDS_INDEX_UNIFORM_TEXELS].descriptorCount;
!!sizes[ZDS_INDEX_UNIFORM_TEXELS].descriptorCount +
!!sizes[ZDS_INDEX_SAMPLER].descriptorCount;
case ZINK_DESCRIPTOR_TYPE_SSBO:
return !!sizes[ZDS_INDEX_STORAGE_BUFFER].descriptorCount;
case ZINK_DESCRIPTOR_TYPE_IMAGE:
@@ -378,6 +381,7 @@ descriptor_program_num_sizes_compact(VkDescriptorPoolSize *sizes, unsigned desc_
case ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW:
return !!sizes[ZDS_INDEX_COMP_COMBINED_SAMPLER].descriptorCount +
!!sizes[ZDS_INDEX_COMP_UNIFORM_TEXELS].descriptorCount +
!!sizes[ZDS_INDEX_COMP_SAMPLER].descriptorCount +
!!sizes[ZDS_INDEX_COMP_STORAGE_IMAGE].descriptorCount +
!!sizes[ZDS_INDEX_COMP_STORAGE_TEXELS].descriptorCount;
case ZINK_DESCRIPTOR_TYPE_SSBO:
@@ -401,7 +405,7 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg)
uint8_t has_bindings = 0;
unsigned push_count = 0;
uint16_t num_type_sizes[ZINK_DESCRIPTOR_BASE_TYPES];
VkDescriptorPoolSize sizes[6] = {0}; //zink_descriptor_size_index
VkDescriptorPoolSize sizes[ZDS_INDEX_MAX] = {0}; //zink_descriptor_size_index
struct zink_shader **stages;
if (pg->is_compute)
@@ -485,7 +489,7 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg)
zink_descriptor_type_to_size_idx(desc_type);
/* some sets can have multiple descriptor types: ensure the size arrays for these types are contiguous for creating the pool key */
VkDescriptorPoolSize *sz = &sizes[idx];
VkDescriptorPoolSize sz2[4];
VkDescriptorPoolSize sz2[5];
if (screen->compact_descriptors || (pg->is_compute && stages[0]->nir->info.stage == MESA_SHADER_KERNEL)) {
unsigned found = 0;
while (found < num_type_sizes[desc_type]) {
@@ -44,10 +44,13 @@ zink_vktype_to_size_idx(VkDescriptorType type)
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
return ZDS_INDEX_UBO;
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
return ZDS_INDEX_COMBINED_SAMPLER;
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
return ZDS_INDEX_UNIFORM_TEXELS;
case VK_DESCRIPTOR_TYPE_SAMPLER:
return ZDS_INDEX_SAMPLER;
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
return ZDS_INDEX_STORAGE_BUFFER;
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
@@ -66,10 +69,13 @@ zink_vktype_to_size_idx_comp(VkDescriptorType type)
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
return ZDS_INDEX_COMP_UBO;
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
return ZDS_INDEX_COMP_COMBINED_SAMPLER;
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
return ZDS_INDEX_COMP_UNIFORM_TEXELS;
case VK_DESCRIPTOR_TYPE_SAMPLER:
return ZDS_INDEX_COMP_SAMPLER;
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
return ZDS_INDEX_COMP_STORAGE_BUFFER;
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
+2
View File
@@ -44,6 +44,8 @@ zink_desc_type_from_vktype(VkDescriptorType type)
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
return ZINK_DESCRIPTOR_TYPE_UBO;
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_SAMPLER:
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
return ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW;
+3
View File
@@ -156,9 +156,11 @@ enum zink_descriptor_size_index {
ZDS_INDEX_UBO,
ZDS_INDEX_COMBINED_SAMPLER,
ZDS_INDEX_UNIFORM_TEXELS,
ZDS_INDEX_SAMPLER,
ZDS_INDEX_STORAGE_BUFFER,
ZDS_INDEX_STORAGE_IMAGE,
ZDS_INDEX_STORAGE_TEXELS,
ZDS_INDEX_MAX,
};
/* indexing for descriptor template management in COMPACT mode */
@@ -167,6 +169,7 @@ enum zink_descriptor_size_index_compact {
ZDS_INDEX_COMP_STORAGE_BUFFER,
ZDS_INDEX_COMP_COMBINED_SAMPLER,
ZDS_INDEX_COMP_UNIFORM_TEXELS,
ZDS_INDEX_COMP_SAMPLER,
ZDS_INDEX_COMP_STORAGE_IMAGE,
ZDS_INDEX_COMP_STORAGE_TEXELS,
};