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,
 };

Reply via email to