// Copyright 2019-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_EXT_provoking_vertex.txt[]

=== 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
  - Jason 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.

include::{generated}/interfaces/VK_EXT_provoking_vertex.txt[]

=== 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
