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:
committed by
Marge Bot
parent
b900bb2209
commit
1b45e79355
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user