## C Specification

The primitive topologies defined by VkPrimitiveTopology are:

typedef enum VkPrimitiveTopology {
VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
} VkPrimitiveTopology;

## Description

Each primitive topology, and its construction from a list of vertices, is described in detail below with a supporting diagram, according to the following key:

 primitive topology key vertex Vertex A point in 3-dimensional space. Positions chosen within the diagrams are arbitrary and for illustration only. primitive topology key vertex number Vertex Number Sequence position of a vertex within the provided vertex data. primitive topology key provoking vertex Provoking Vertex Provoking vertex within the main primitive. The arrow points along an edge of the relevant primitive, following winding order. Used in flat shading. primitive topology key edge Primitive Edge An edge connecting the points of a main primitive. primitive topology key adjacency edge Adjacency Edge Points connected by these lines do not contribute to a main primitive, and are only accessible in a geometry shader. primitive topology key winding order Winding Order The relative order in which vertices are defined within a primitive, used in the facing determination. This ordering has no specific start or end point.

The diagrams are supported with mathematical definitions where the vertices and primitives are numbered starting from 0; vertex0 is the first vertex in the provided data and primitive0 is the first primitive in the set of primitives defined by the vertices and topology.