Safe Haskell | None |
---|---|
Language | Haskell2010 |
Name
VK_EXT_vertex_attribute_divisor - device extension
VK_EXT_vertex_attribute_divisor
- Name String
VK_EXT_vertex_attribute_divisor
- Extension Type
- Device extension
- Registered Extension Number
- 191
- Revision
- 3
- Extension and Version Dependencies
- Requires Vulkan 1.0
- Requires
VK_KHR_get_physical_device_properties2
- Contact
Other Extension Metadata
- Last Modified Date
- 2018-08-03
- IP Status
- No known IP claims.
- Contributors
- Vikram Kushwaha, NVIDIA
- Jason Ekstrand, Intel
Description
This extension allows instance-rate vertex attributes to be repeated for certain number of instances instead of advancing for every instance when instanced rendering is enabled.
New Structures
Extending
PhysicalDeviceFeatures2
,DeviceCreateInfo
:Extending
PhysicalDeviceProperties2
:Extending
PipelineVertexInputStateCreateInfo
:
New Enum Constants
Issues
1) What is the effect of a non-zero value for firstInstance
?
RESOLVED: The Vulkan API should follow the OpenGL convention and
offset attribute fetching by firstInstance
while computing vertex
attribute offsets.
2) Should zero be an allowed divisor?
RESOLVED: Yes. A zero divisor means the vertex attribute is repeated for all instances.
Examples
To create a vertex binding such that the first binding uses instanced rendering and the same attribute is used for every 4 draw instances, an application could use the following set of structures:
const VkVertexInputBindingDivisorDescriptionEXT divisorDesc = { 0, 4 }; const VkPipelineVertexInputDivisorStateCreateInfoEXT divisorInfo = { VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT, // sType NULL, // pNext 1, // vertexBindingDivisorCount &divisorDesc // pVertexBindingDivisors } const VkVertexInputBindingDescription binding = { 0, // binding sizeof(Vertex), // stride VK_VERTEX_INPUT_RATE_INSTANCE // inputRate }; const VkPipelineVertexInputStateCreateInfo viInfo = { VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO, // sType &divisorInfo, // pNext ... }; //...
Version History
Revision 1, 2017-12-04 (Vikram Kushwaha)
- First Version
Revision 2, 2018-07-16 (Jason Ekstrand)
- Adjust the interaction between
divisor
andfirstInstance
to match the OpenGL convention. - Disallow divisors of zero.
- Adjust the interaction between
Revision 3, 2018-08-03 (Vikram Kushwaha)
- Allow a zero divisor.
- Add a physical device features structure to query/enable this feature.
See Also
PhysicalDeviceVertexAttributeDivisorFeaturesEXT
,
PhysicalDeviceVertexAttributeDivisorPropertiesEXT
,
PipelineVertexInputDivisorStateCreateInfoEXT
,
VertexInputBindingDivisorDescriptionEXT
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 VertexInputBindingDivisorDescriptionEXT = VertexInputBindingDivisorDescriptionEXT {}
- data PipelineVertexInputDivisorStateCreateInfoEXT = PipelineVertexInputDivisorStateCreateInfoEXT {}
- data PhysicalDeviceVertexAttributeDivisorPropertiesEXT = PhysicalDeviceVertexAttributeDivisorPropertiesEXT {}
- data PhysicalDeviceVertexAttributeDivisorFeaturesEXT = PhysicalDeviceVertexAttributeDivisorFeaturesEXT {}
- type EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION = 3
- pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION :: forall a. Integral a => a
- type EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME = "VK_EXT_vertex_attribute_divisor"
- pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
data VertexInputBindingDivisorDescriptionEXT Source #
VkVertexInputBindingDivisorDescriptionEXT - Structure specifying a divisor used in instanced rendering
Description
If this structure is not used to define a divisor value for an attribute then the divisor has a logical default value of 1.
Valid Usage
-
binding
must be less thanPhysicalDeviceLimits
::maxVertexInputBindings
-
If the
vertexAttributeInstanceRateZeroDivisor
feature is not enabled,divisor
must not be0
-
If the
vertexAttributeInstanceRateDivisor
feature is not enabled,divisor
must be1
-
divisor
must be a value between0
andPhysicalDeviceVertexAttributeDivisorPropertiesEXT
::maxVertexAttribDivisor
, inclusive -
VertexInputBindingDescription
::inputRate
must be of typeVERTEX_INPUT_RATE_INSTANCE
for thisbinding
See Also
VertexInputBindingDivisorDescriptionEXT | |
|
Instances
data PipelineVertexInputDivisorStateCreateInfoEXT Source #
VkPipelineVertexInputDivisorStateCreateInfoEXT - Structure specifying vertex attributes assignment during instanced rendering
Valid Usage (Implicit)
See Also
PipelineVertexInputDivisorStateCreateInfoEXT | |
|
Instances
data PhysicalDeviceVertexAttributeDivisorPropertiesEXT Source #
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT - Structure describing max value of vertex attribute divisor that can be supported by an implementation
Members
The members of the PhysicalDeviceVertexAttributeDivisorPropertiesEXT
structure describe the following implementation-dependent limits:
Description
If the PhysicalDeviceVertexAttributeDivisorPropertiesEXT
structure is
included in the pNext
chain of
PhysicalDeviceProperties2
,
it is filled with the implementation-dependent limits.
Valid Usage (Implicit)
See Also
Instances
data PhysicalDeviceVertexAttributeDivisorFeaturesEXT Source #
VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT - Structure describing if fetching of vertex attribute may be repeated for instanced rendering
Description
If the PhysicalDeviceVertexAttributeDivisorFeaturesEXT
structure is
included in the pNext
chain of
PhysicalDeviceFeatures2
,
it is filled with values indicating the implementation-dependent
behavior. PhysicalDeviceVertexAttributeDivisorFeaturesEXT
can also
be included in pNext
chain of DeviceCreateInfo
to enable the feature.
Valid Usage (Implicit)
See Also
PhysicalDeviceVertexAttributeDivisorFeaturesEXT | |
|
Instances
pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME = "VK_EXT_vertex_attribute_divisor" Source #
pattern EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #