Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Name
VK_EXT_provoking_vertex - device extension
VK_EXT_provoking_vertex
- Name String
VK_EXT_provoking_vertex
- Extension Type
- Device extension
- Registered Extension Number
- 255
- Revision
- 1
- Ratification Status
- Not ratified
- Extension and Version Dependencies
- VK_KHR_get_physical_device_properties2
- Special Use
- Contact
Other Extension Metadata
- Last Modified Date
- 2021-02-22
- IP Status
- No known IP claims.
- Contributors
- Alexis Hétu, Google
- Bill Licea-Kane, Qualcomm
- Daniel Koch, Nvidia
- Jamie Madill, Google
- Jan-Harald Fredriksen, Arm
- Faith Ekstrand, Intel
- Jeff Bolz, Nvidia
- Jeff Leger, Qualcomm
- Jesse Hall, Google
- Jörg Wagner, Arm
- Matthew Netsch, Qualcomm
- Mike Blumenkrantz, Valve
- Piers Daniell, Nvidia
- Tobias Hector, AMD
Description
This extension allows changing the provoking vertex convention between Vulkan’s default convention (first vertex) and OpenGL’s convention (last vertex).
This extension is intended for use by API-translation layers that implement APIs like OpenGL on top of Vulkan, and need to match the source API’s provoking vertex convention. Applications using Vulkan directly should use Vulkan’s default convention.
New Structures
Extending
PhysicalDeviceProperties2
:Extending
PipelineRasterizationStateCreateInfo
:
New Enums
New Enum Constants
Issues
1) At what granularity should this state be set?
RESOLVED: At pipeline bind, with an optional per-render pass restriction.
The most natural place to put this state is in the graphics pipeline object. Some implementations require it to be known when creating the pipeline, and pipeline state is convenient for implementing OpenGL 3.2’s glProvokingVertex, which can change the state between draw calls. However, some implementations can only change it approximately render pass granularity. To accommodate both, provoking vertex will be pipeline state, but implementations can require that only one mode is used within a render pass instance; the render pass’s mode is chosen implicitly when the first pipeline is bound.
2) Does the provoking vertex mode affect the order that vertices are written to transform feedback buffers?
RESOLVED: Yes, to enable layered implementations of OpenGL and D3D.
All of OpenGL, OpenGL ES, and Direct3D 11 require that vertices are written to transform feedback buffers such that flat-shaded attributes have the same value when drawing the contents of the transform feedback buffer as they did in the original drawing when the transform feedback buffer was written (assuming the provoking vertex mode has not changed, in APIs that support more than one mode).
Version History
Revision 1, (1c) 2021-02-22 (Jesse Hall)
- Added VkPhysicalDeviceProvokingVertexPropertiesEXT::transformFeedbackPreservesTriangleFanProvokingVertex to accommodate implementations that cannot change the transform feedback vertex order for triangle fans.
Revision 1, (1b) 2020-06-14 (Jesse Hall)
- Added VkPhysicalDeviceProvokingVertexFeaturesEXT::transformFeedbackPreservesProvokingVertex and required that transform feedback write vertices so as to preserve the provoking vertex of each primitive.
Revision 1, (1a) 2019-10-23 (Jesse Hall)
- Initial draft, based on a proposal by Alexis Hétu
See Also
PhysicalDeviceProvokingVertexFeaturesEXT
,
PhysicalDeviceProvokingVertexPropertiesEXT
,
PipelineRasterizationProvokingVertexStateCreateInfoEXT
,
ProvokingVertexModeEXT
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 PhysicalDeviceProvokingVertexFeaturesEXT = PhysicalDeviceProvokingVertexFeaturesEXT {}
- data PhysicalDeviceProvokingVertexPropertiesEXT = PhysicalDeviceProvokingVertexPropertiesEXT {}
- data PipelineRasterizationProvokingVertexStateCreateInfoEXT = PipelineRasterizationProvokingVertexStateCreateInfoEXT {}
- newtype ProvokingVertexModeEXT where
- type EXT_PROVOKING_VERTEX_SPEC_VERSION = 1
- pattern EXT_PROVOKING_VERTEX_SPEC_VERSION :: forall a. Integral a => a
- type EXT_PROVOKING_VERTEX_EXTENSION_NAME = "VK_EXT_provoking_vertex"
- pattern EXT_PROVOKING_VERTEX_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
data PhysicalDeviceProvokingVertexFeaturesEXT Source #
VkPhysicalDeviceProvokingVertexFeaturesEXT - Structure describing the provoking vertex features that can be supported by an implementation
Members
This structure describes the following features:
Description
If the PhysicalDeviceProvokingVertexFeaturesEXT
structure is included
in the pNext
chain of the
PhysicalDeviceFeatures2
structure passed to
getPhysicalDeviceFeatures2
,
it is filled in to indicate whether each corresponding feature is
supported. PhysicalDeviceProvokingVertexFeaturesEXT
can also be used
in the pNext
chain of DeviceCreateInfo
to
selectively enable these features.
When PhysicalDeviceProvokingVertexFeaturesEXT
is in the pNext
chain
of DeviceCreateInfo
but the
transformFeedback
feature is not enabled, the value of
transformFeedbackPreservesProvokingVertex
is ignored.
Valid Usage (Implicit)
See Also
PhysicalDeviceProvokingVertexFeaturesEXT | |
|
Instances
data PhysicalDeviceProvokingVertexPropertiesEXT Source #
VkPhysicalDeviceProvokingVertexPropertiesEXT - Structure describing provoking vertex properties supported by an implementation
Description
If the PhysicalDeviceProvokingVertexPropertiesEXT
structure is
included in the pNext
chain of the
PhysicalDeviceProperties2
structure passed to
getPhysicalDeviceProperties2
,
it is filled in with each corresponding implementation-dependent
property.
Valid Usage (Implicit)
See Also
Instances
data PipelineRasterizationProvokingVertexStateCreateInfoEXT Source #
VkPipelineRasterizationProvokingVertexStateCreateInfoEXT - Structure specifying provoking vertex mode used by a graphics pipeline
Description
If this struct is not provided when creating the pipeline, the pipeline
will use the PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT
mode.
If the
provokingVertexModePerPipeline
limit is FALSE
, then all pipelines
bound within a render pass instance must have the same
provokingVertexMode
.
Valid Usage
-
If
provokingVertexMode
isPROVOKING_VERTEX_MODE_LAST_VERTEX_EXT
, then the provokingVertexLast feature must be enabled
Valid Usage (Implicit)
-
provokingVertexMode
must be a validProvokingVertexModeEXT
value
See Also
VK_EXT_provoking_vertex,
ProvokingVertexModeEXT
,
StructureType
PipelineRasterizationProvokingVertexStateCreateInfoEXT | |
|
Instances
newtype ProvokingVertexModeEXT Source #
VkProvokingVertexModeEXT - Specify which vertex in a primitive is the provoking vertex
Description
These modes are described more precisely in Primitive Topologies.
See Also
VK_EXT_provoking_vertex,
PipelineRasterizationProvokingVertexStateCreateInfoEXT
,
cmdSetProvokingVertexModeEXT
pattern PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT :: ProvokingVertexModeEXT |
|
pattern PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT :: ProvokingVertexModeEXT |
|
Instances
type EXT_PROVOKING_VERTEX_SPEC_VERSION = 1 Source #
pattern EXT_PROVOKING_VERTEX_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_PROVOKING_VERTEX_EXTENSION_NAME = "VK_EXT_provoking_vertex" Source #
pattern EXT_PROVOKING_VERTEX_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #