1include::meta/VK_EXT_descriptor_indexing.txt[] 2 3*Status*:: 4 Complete 5*Last Modified Data*:: 6 2017-10-02 7*Contributors*:: 8 - Jeff Bolz, NVIDIA 9 - Daniel Rakos, AMD 10 - Slawomir Grajewski, Intel 11 - Tobias Hector, Imagination Technologies 12 13This extension adds several small features which together enable 14applications to create large descriptor sets containing substantially all of 15their resources, and selecting amongst those resources with dynamic 16(non-uniform) indexes in the shader. 17There are feature enables and SPIR-V capabilities for non-uniform descriptor 18indexing in the shader, and non-uniform indexing in the shader requires use 19of a new code:NonUniformEXT decoration defined in the 20+SPV_EXT_descriptor_indexing+ SPIR-V extension. 21There are descriptor set layout binding creation flags enabling several 22features: 23 24 * Descriptors can be updated after they are bound to a command buffer, 25 such that the execution of the command buffer reflects the most recent 26 update to the descriptors. 27 * Descriptors that are not used by any pending command buffers can be 28 updated, which enables writing new descriptors for frame N+1 while frame 29 N is executing. 30 * Relax the requirement that all descriptors in a binding that is 31 "statically used" must be valid, such that descriptors that are not 32 accessed by a submission need not be valid and can be updated while that 33 submission is executing. 34 * The final binding in a descriptor set layout can have a variable size 35 (and unsized arrays of resources are allowed in the 36 +GL_EXT_nonuniform_qualifier+ and +SPV_EXT_descriptor_indexing+ 37 extensions). 38 39Note that it is valid for multiple descriptor arrays in a shader to use the 40same set and binding number, as long as they are all compatible with the 41descriptor type in the pipeline layout. 42This means a single array binding in the descriptor set can serve multiple 43texture dimensionalities, or an array of buffer descriptors can be used with 44multiple different block layouts. 45 46There are new descriptor set layout and descriptor pool creation flags that 47are required to opt in to the update-after-bind functionality, and there are 48separate pname:maxPerStage* and pname:maxDescriptorSet* limits that apply to 49these descriptor set layouts which may: be much higher than the pre-existing 50limits. 51The old limits only count descriptors in non-updateAfterBind descriptor set 52layouts, and the new limits count descriptors in all descriptor set layouts 53in the pipeline layout. 54 55=== New Object Types 56 57None. 58 59=== New Enum Constants 60 61 * Extending elink:VkStructureType: 62 ** ename:VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT 63 ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT 64 ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT 65 ** ename:VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT 66 ** ename:VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT 67 68 * Extending elink:VkDescriptorPoolCreateFlagBits: 69 ** ename:VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT 70 71 * Extending elink:VkDescriptorSetLayoutCreateFlagBits: 72 ** ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT 73 74 * Extending elink:VkResult: 75 ** ename:VK_ERROR_FRAGMENTATION_EXT 76 77=== New Enums 78 79 * elink:VkDescriptorBindingFlagBitsEXT 80 81=== New Structures 82 83 * slink:VkDescriptorSetLayoutBindingFlagsCreateInfoEXT 84 * slink:VkPhysicalDeviceDescriptorIndexingFeaturesEXT 85 * slink:VkPhysicalDeviceDescriptorIndexingPropertiesEXT 86 * slink:VkDescriptorSetVariableDescriptorCountAllocateInfoEXT 87 * slink:VkDescriptorSetVariableDescriptorCountLayoutSupportEXT 88 89=== New Functions 90 91None. 92 93=== Issues 94 95None. 96 97=== Version History 98 99 * Revision 1, 2017-07-26 (Jeff Bolz) 100 - Internal revisions 101