anv: Add a descriptor_index to anv_descriptor_set_binding_layout
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 6 Nov 2015 20:07:36 +0000 (12:07 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 6 Nov 2015 20:16:54 +0000 (12:16 -0800)
src/vulkan/anv_device.c
src/vulkan/anv_pipeline.c
src/vulkan/anv_private.h

index 156a9d2b1b6949b40832d3973c90e3b1a3797ebb..e3c3bdeaa7cec9a6e22e8700360b2ceac7ee0255 100644 (file)
@@ -1529,6 +1529,7 @@ VkResult anv_CreateDescriptorSetLayout(
    for (uint32_t b = 0; b < pCreateInfo->count; b++) {
       uint32_t array_size = MAX2(1, pCreateInfo->pBinding[b].arraySize);
       set_layout->binding[b].array_size = array_size;
+      set_layout->binding[b].descriptor_index = set_layout->size;
       set_layout->size += array_size;
 
       switch (pCreateInfo->pBinding[b].descriptorType) {
index 9fb5ddba20ba7d3dd3fde04d4ece23b279b676a0..1555b23fc692ca6b451763e2622344b9436f07ef 100644 (file)
@@ -1230,9 +1230,9 @@ VkResult anv_CreatePipelineLayout(
       for (uint32_t set = 0; set < pCreateInfo->descriptorSetCount; set++) {
          struct anv_descriptor_set_layout *set_layout = l.set[set].layout;
 
-         unsigned set_offset = 0;
          for (uint32_t b = 0; b < set_layout->binding_count; b++) {
             unsigned array_size = set_layout->binding[b].array_size;
+            unsigned set_offset = set_layout->binding[b].descriptor_index;
 
             if (set_layout->binding[b].stage[s].surface_index >= 0) {
                assert(surface == l.set[set].stage[s].surface_start +
@@ -1253,8 +1253,6 @@ VkResult anv_CreatePipelineLayout(
                }
                sampler += array_size;
             }
-
-            set_offset += array_size;
          }
       }
    }
index a208162bbb67b54da30aedc5d2591d4de411db32..8000e9f53969e6ab1cb69452c753a45758742f6e 100644 (file)
@@ -689,6 +689,9 @@ struct anv_descriptor_set_binding_layout {
    /* Number of array elements in this binding */
    uint16_t array_size;
 
+   /* Index into the flattend descriptor set */
+   uint16_t descriptor_index;
+
    /* Index into the dynamic state array for a dynamic buffer */
    int16_t dynamic_offset_index;