| // Copyright 2018-2021 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_EXT_inline_uniform_block.txt[] |
| |
| === Other Extension Metadata |
| |
| *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 |
| |
| === Description |
| |
| 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 drawing or dispatching commands and |
| may: enable uniform data to be accessed with fewer indirections compared to |
| uniforms backed by buffer memory. |
| |
| include::{generated}/interfaces/VK_EXT_inline_uniform_block.txt[] |
| |
| === 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 |
| "`arrayed`". |
| 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 |