2018-09-08 22:52:13 +00:00
|
|
|
include::meta/VK_EXT_inline_uniform_block.txt[]
|
|
|
|
|
|
|
|
*Last Modified Date*::
|
|
|
|
2018-08-01
|
|
|
|
*IP Status*::
|
|
|
|
No known IP claims.
|
|
|
|
*Contributors*::
|
|
|
|
- Daniel Rakos, AMD
|
|
|
|
- Jeff Bolz, NVIDIA
|
|
|
|
- Slawomir Grajewski, Intel
|
|
|
|
- Neil Henning, Codeplay
|
|
|
|
|
|
|
|
This extension introduces the ability to back uniform blocks directly with
|
|
|
|
descriptor sets by storing inline uniform data within descriptor pool
|
|
|
|
storage.
|
|
|
|
Compared to push constants this new construct allows uniform data to be
|
|
|
|
reused across multiple disjoint sets of draw or dispatch commands and may:
|
|
|
|
enable uniform data to be accessed with less indirections compared to
|
|
|
|
uniforms backed by buffer memory.
|
|
|
|
|
|
|
|
=== New Object Types
|
|
|
|
|
|
|
|
None
|
|
|
|
|
|
|
|
=== New Enum Constants
|
|
|
|
|
|
|
|
* Extending elink:VkStructureType:
|
|
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT
|
|
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT
|
|
|
|
** ename:VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT
|
|
|
|
** ename:VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT
|
|
|
|
|
|
|
|
* Extending elink:VkDescriptorType:
|
|
|
|
** ename:VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
|
|
|
|
|
|
|
|
=== New Enums
|
|
|
|
|
|
|
|
None
|
|
|
|
|
|
|
|
=== New Structures
|
|
|
|
|
|
|
|
* slink:VkPhysicalDeviceInlineUniformBlockFeaturesEXT
|
|
|
|
* slink:VkPhysicalDeviceInlineUniformBlockPropertiesEXT
|
|
|
|
* slink:VkWriteDescriptorSetInlineUniformBlockEXT
|
|
|
|
* slink:VkDescriptorPoolInlineUniformBlockCreateInfoEXT
|
|
|
|
|
|
|
|
=== New Functions
|
|
|
|
|
|
|
|
None
|
|
|
|
|
|
|
|
=== New Built-In Variables
|
|
|
|
|
|
|
|
None
|
|
|
|
|
|
|
|
=== Issues
|
|
|
|
|
|
|
|
1) Do we need a new storage class for inline uniform blocks vs uniform
|
|
|
|
blocks?
|
|
|
|
|
|
|
|
*RESOLVED*: No.
|
|
|
|
The code:Uniform storage class is used to allow the same syntax used for
|
|
|
|
both uniform buffers and inline uniform blocks.
|
|
|
|
|
|
|
|
2) Is the descriptor array index and array size expressed in terms of bytes
|
|
|
|
or dwords for inline uniform block descriptors?
|
|
|
|
|
|
|
|
*RESOLVED*: In bytes, but both must: be a multiple of 4, similar to how push
|
|
|
|
constant ranges are specified.
|
|
|
|
The pname:descriptorCount of sname:VkDescriptorSetLayoutBinding thus
|
|
|
|
provides the total number of bytes a particular binding with an inline
|
|
|
|
uniform block descriptor type can hold, while the pname:srcArrayElement,
|
|
|
|
pname:dstArrayElement, and pname:descriptorCount members of
|
|
|
|
sname:VkWriteDescriptorSet, sname:VkCopyDescriptorSet, and
|
|
|
|
sname:VkDescriptorUpdateTemplateEntry (where applicable) specify the byte
|
|
|
|
offset and number of bytes to write/copy to the binding's backing store.
|
|
|
|
Additionally, the pname:stride member of
|
|
|
|
sname:VkDescriptorUpdateTemplateEntry is ignored for inline uniform blocks
|
|
|
|
and a default value of one is used, meaning that the data to update inline
|
|
|
|
uniform block bindings with must be contiguous in memory.
|
|
|
|
|
|
|
|
3) What layout rules apply for uniform blocks corresponding to inline
|
|
|
|
constants?
|
|
|
|
|
|
|
|
*RESOLVED*: They use the same layout rules as uniform buffers.
|
|
|
|
|
|
|
|
4) Do we need to add non-uniform indexing features/properties as introduced
|
|
|
|
by `VK_EXT_descriptor_indexing` for inline uniform blocks?
|
|
|
|
|
|
|
|
*RESOLVED*: No, because inline uniform blocks are not allowed to be
|
2018-10-08 23:12:09 +00:00
|
|
|
"`arrayed`".
|
2018-09-08 22:52:13 +00:00
|
|
|
A single binding with an inline uniform block descriptor type corresponds to
|
|
|
|
a single uniform block instance and the array indices inside that binding
|
|
|
|
refer to individual offsets within the uniform block (see issue #2).
|
|
|
|
However, this extension does introduce new features/properties about the
|
|
|
|
level of support for update-after-bind inline uniform blocks.
|
|
|
|
|
|
|
|
5) Is the pname:descriptorBindingVariableDescriptorCount feature introduced
|
|
|
|
by `VK_EXT_descriptor_indexing` supported for inline uniform blocks?
|
|
|
|
|
|
|
|
*RESOLVED*: Yes, as long as other inline uniform block specific limits are
|
|
|
|
respected.
|
|
|
|
|
|
|
|
6) Do the robustness guarantees of pname:robustBufferAccess apply to inline
|
|
|
|
uniform block accesses?
|
|
|
|
|
|
|
|
*RESOLVED*: No, similarly to push constants, as they are not backed by
|
|
|
|
buffer memory like uniform buffers.
|
|
|
|
|
|
|
|
=== Version History
|
|
|
|
|
|
|
|
* Revision 1, 2018-08-01 (Daniel Rakos)
|
|
|
|
- Internal revisions
|