Module: Mesa Branch: main Commit: 1b45e79355f3124947c274b20581909bc1f6565a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b45e79355f3124947c274b20581909bc1f6565a
Author: Mike Blumenkrantz <[email protected]> Date: Tue Oct 18 11:42:45 2022 -0400 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> --- src/gallium/drivers/zink/zink_descriptors.c | 10 +++++++--- src/gallium/drivers/zink/zink_descriptors.h | 6 ++++++ src/gallium/drivers/zink/zink_program.h | 2 ++ src/gallium/drivers/zink/zink_types.h | 3 +++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c index 1d0965224e5..6f5762b622a 100644 --- a/src/gallium/drivers/zink/zink_descriptors.c +++ b/src/gallium/drivers/zink/zink_descriptors.c @@ -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]) { diff --git a/src/gallium/drivers/zink/zink_descriptors.h b/src/gallium/drivers/zink/zink_descriptors.h index ba2df7aa9fd..510749e02b9 100644 --- a/src/gallium/drivers/zink/zink_descriptors.h +++ b/src/gallium/drivers/zink/zink_descriptors.h @@ -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: diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h index 1cd9df1cdbf..caa9c573d29 100644 --- a/src/gallium/drivers/zink/zink_program.h +++ b/src/gallium/drivers/zink/zink_program.h @@ -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; diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index a9b5d1e46d1..2dc38958f4b 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -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, };
