vulkan-3.26.2: Bindings to the Vulkan graphics API.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Vulkan.Extensions.VK_EXT_provoking_vertex

Description

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

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

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

VK_EXT_provoking_vertex, Bool32, StructureType

Constructors

PhysicalDeviceProvokingVertexFeaturesEXT 

Fields

Instances

Instances details
Storable PhysicalDeviceProvokingVertexFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Show PhysicalDeviceProvokingVertexFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Eq PhysicalDeviceProvokingVertexFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

FromCStruct PhysicalDeviceProvokingVertexFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

ToCStruct PhysicalDeviceProvokingVertexFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Zero PhysicalDeviceProvokingVertexFeaturesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

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

VK_EXT_provoking_vertex, Bool32, StructureType

Constructors

PhysicalDeviceProvokingVertexPropertiesEXT 

Fields

  • provokingVertexModePerPipeline :: Bool

    provokingVertexModePerPipeline indicates whether the implementation supports graphics pipelines with different provoking vertex modes within the same render pass instance.

  • transformFeedbackPreservesTriangleFanProvokingVertex :: Bool

    transformFeedbackPreservesTriangleFanProvokingVertex indicates whether the implementation can preserve the provoking vertex order when writing triangle fan vertices to transform feedback.

Instances

Instances details
Storable PhysicalDeviceProvokingVertexPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Show PhysicalDeviceProvokingVertexPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Eq PhysicalDeviceProvokingVertexPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

FromCStruct PhysicalDeviceProvokingVertexPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

ToCStruct PhysicalDeviceProvokingVertexPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Zero PhysicalDeviceProvokingVertexPropertiesEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

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

Valid Usage (Implicit)

See Also

VK_EXT_provoking_vertex, ProvokingVertexModeEXT, StructureType

Constructors

PipelineRasterizationProvokingVertexStateCreateInfoEXT 

Fields

Instances

Instances details
Storable PipelineRasterizationProvokingVertexStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Show PipelineRasterizationProvokingVertexStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Eq PipelineRasterizationProvokingVertexStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

FromCStruct PipelineRasterizationProvokingVertexStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

ToCStruct PipelineRasterizationProvokingVertexStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Zero PipelineRasterizationProvokingVertexStateCreateInfoEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

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

Bundled Patterns

pattern PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT :: ProvokingVertexModeEXT

PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT specifies that the provoking vertex is the first non-adjacency vertex in the list of vertices used by a primitive.

pattern PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT :: ProvokingVertexModeEXT

PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT specifies that the provoking vertex is the last non-adjacency vertex in the list of vertices used by a primitive.

Instances

Instances details
Storable ProvokingVertexModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Read ProvokingVertexModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Show ProvokingVertexModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Eq ProvokingVertexModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Ord ProvokingVertexModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

Zero ProvokingVertexModeEXT Source # 
Instance details

Defined in Vulkan.Extensions.VK_EXT_provoking_vertex

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 #