Safe Haskell | None |
---|---|
Language | Haskell2010 |
Name
VK_EXT_inline_uniform_block - device extension
VK_EXT_inline_uniform_block
- Name String
VK_EXT_inline_uniform_block
- Extension Type
- Device extension
- Registered Extension Number
- 139
- Revision
- 1
- Extension and Version Dependencies
- Requires Vulkan 1.0
- Requires
VK_KHR_get_physical_device_properties2
- Requires
VK_KHR_maintenance1
- Contact
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 draw or dispatch commands and may enable uniform data to be accessed with less indirections compared to uniforms backed by buffer memory.
New Structures
Extending
PhysicalDeviceFeatures2
,DeviceCreateInfo
:Extending
PhysicalDeviceProperties2
:Extending
WriteDescriptorSet
:
New Enum Constants
EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION
Extending
DescriptorType
:Extending
StructureType
:
Issues
1) Do we need a new storage class for inline uniform blocks vs uniform blocks?
RESOLVED: No. The 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 descriptorCount
of
DescriptorSetLayoutBinding
thus provides
the total number of bytes a particular binding with an inline uniform
block descriptor type can hold, while the srcArrayElement
,
dstArrayElement
, and descriptorCount
members of
WriteDescriptorSet
,
CopyDescriptorSet
, and
DescriptorUpdateTemplateEntry
(where applicable) specify the byte offset and number of bytes to
write/copy to the binding’s backing store. Additionally, the stride
member of
DescriptorUpdateTemplateEntry
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 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 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
See Also
DescriptorPoolInlineUniformBlockCreateInfoEXT
,
PhysicalDeviceInlineUniformBlockFeaturesEXT
,
PhysicalDeviceInlineUniformBlockPropertiesEXT
,
WriteDescriptorSetInlineUniformBlockEXT
Document Notes
For more information, see the Vulkan Specification
This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.
Synopsis
- data PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeaturesEXT {}
- data PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockPropertiesEXT {}
- data WriteDescriptorSetInlineUniformBlockEXT = WriteDescriptorSetInlineUniformBlockEXT {}
- data DescriptorPoolInlineUniformBlockCreateInfoEXT = DescriptorPoolInlineUniformBlockCreateInfoEXT {}
- type EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION = 1
- pattern EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION :: forall a. Integral a => a
- type EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME = "VK_EXT_inline_uniform_block"
- pattern EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
data PhysicalDeviceInlineUniformBlockFeaturesEXT Source #
VkPhysicalDeviceInlineUniformBlockFeaturesEXT - Structure describing inline uniform block features that can be supported by an implementation
Members
The members of the PhysicalDeviceInlineUniformBlockFeaturesEXT
structure describe the following features:
Description
If the PhysicalDeviceInlineUniformBlockFeaturesEXT
structure is
included in the pNext
chain of
PhysicalDeviceFeatures2
,
it is filled with values indicating whether each feature is supported.
PhysicalDeviceInlineUniformBlockFeaturesEXT
can also be included in
the pNext
chain of DeviceCreateInfo
to enable
features.
Valid Usage (Implicit)
See Also
PhysicalDeviceInlineUniformBlockFeaturesEXT | |
|
Instances
data PhysicalDeviceInlineUniformBlockPropertiesEXT Source #
VkPhysicalDeviceInlineUniformBlockPropertiesEXT - Structure describing inline uniform block properties that can be supported by an implementation
Members
The members of the PhysicalDeviceInlineUniformBlockPropertiesEXT
structure describe the following implementation-dependent limits:
Description
If the PhysicalDeviceInlineUniformBlockPropertiesEXT
structure is
included in the pNext
chain of
PhysicalDeviceProperties2
,
it is filled with the implementation-dependent limits.
Valid Usage (Implicit)
See Also
PhysicalDeviceInlineUniformBlockPropertiesEXT | |
|
Instances
data WriteDescriptorSetInlineUniformBlockEXT Source #
VkWriteDescriptorSetInlineUniformBlockEXT - Structure specifying inline uniform block data
Valid Usage (Implicit)
See Also
Instances
data DescriptorPoolInlineUniformBlockCreateInfoEXT Source #
VkDescriptorPoolInlineUniformBlockCreateInfoEXT - Structure specifying the maximum number of inline uniform block bindings of a newly created descriptor pool
Valid Usage (Implicit)
See Also
DescriptorPoolInlineUniformBlockCreateInfoEXT | |
|
Instances
type EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION = 1 Source #
pattern EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME = "VK_EXT_inline_uniform_block" Source #
pattern EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #