summaryrefslogtreecommitdiff
path: root/chapters/commonvalidity/draw_vertex_binding.adoc
blob: 2305a918b9558c79b6452db9702eb036a4ac9264 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
// Copyright 2019-2023 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

// Common Valid Usage
// Common to drawing commands that consume vertex binding state
  * [[VUID-{refpage}-None-04007]]
    All vertex input bindings accessed via vertex input variables declared
    in the vertex shader entry point's interface must: have either valid or
    dlink:VK_NULL_HANDLE buffers bound
  * [[VUID-{refpage}-None-04008]]
    If the <<features-nullDescriptor, pname:nullDescriptor>> feature is not
    enabled, all vertex input bindings accessed via vertex input variables
    declared in the vertex shader entry point's interface must: not be
    dlink:VK_NULL_HANDLE
  * [[VUID-{refpage}-None-02721]]
    For a given vertex buffer binding, any attribute data fetched must: be
    entirely contained within the corresponding vertex buffer binding, as
    described in <<fxvertex-input>>
ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
  * [[VUID-{refpage}-None-07842]]
    If
ifdef::VK_EXT_shader_object[]
    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
    stage
ifdef::VK_EXT_vertex_input_dynamic_state[or]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_vertex_input_dynamic_state[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled
endif::VK_EXT_vertex_input_dynamic_state[]
    then flink:vkCmdSetPrimitiveTopology must: have been called in the
    current command buffer prior to this drawing command
ifndef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-primitiveTopology-03420]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled then the
    pname:primitiveTopology parameter of fname:vkCmdSetPrimitiveTopology
    must: be of the same <<drawing-primitive-topology-class, topology
    class>> as the pipeline
    slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology state
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_extended_dynamic_state3[]
  * [[VUID-{refpage}-dynamicPrimitiveTopologyUnrestricted-07500]]
    If the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic state enabled and the
    <<limits-dynamicPrimitiveTopologyUnrestricted,
    pname:dynamicPrimitiveTopologyUnrestricted>> is ename:VK_FALSE, then the
    pname:primitiveTopology parameter of fname:vkCmdSetPrimitiveTopology
    must: be of the same <<drawing-primitive-topology-class, topology
    class>> as the pipeline
    slink:VkPipelineInputAssemblyStateCreateInfo::pname:topology state
endif::VK_EXT_extended_dynamic_state3[]
ifdef::VK_EXT_vertex_input_dynamic_state[]
  * [[VUID-{refpage}-None-04912]]
    If the bound graphics pipeline was created with both the
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT and
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic states
    enabled, then flink:vkCmdSetVertexInputEXT must: have been called in the
    current command buffer prior to this draw command
  * [[VUID-{refpage}-pStrides-04913]]
    If the bound graphics pipeline was created with the
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic state
    enabled, but not the ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic
    state enabled, then flink:vkCmdBindVertexBuffers2EXT must: have been
    called in the current command buffer prior to this draw command, and the
    pname:pStrides parameter of flink:vkCmdBindVertexBuffers2EXT must: not
    be `NULL`
endif::VK_EXT_vertex_input_dynamic_state[]
ifndef::VK_EXT_vertex_input_dynamic_state[]
  * [[VUID-{refpage}-pStrides-04884]]
    If the bound graphics pipeline was created with the
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT dynamic state
    enabled, then flink:vkCmdBindVertexBuffers2EXT must: have been called in
    the current command buffer prior to this drawing command, and the
    pname:pStrides parameter of flink:vkCmdBindVertexBuffers2EXT must: not
    be `NULL`
endif::VK_EXT_vertex_input_dynamic_state[]
endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state[]
ifdef::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-04914]]
    If
ifdef::VK_EXT_shader_object[]
    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
    stage
ifdef::VK_EXT_vertex_input_dynamic_state[or]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_vertex_input_dynamic_state[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
endif::VK_EXT_vertex_input_dynamic_state[]
    then flink:vkCmdSetVertexInputEXT must: have been called in the current
    command buffer prior to this draw command
  * [[VUID-{refpage}-Input-07939]]
    If
ifdef::VK_EXT_shader_object[]
    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
    stage
ifdef::VK_EXT_vertex_input_dynamic_state[or]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_vertex_input_dynamic_state[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
endif::VK_EXT_vertex_input_dynamic_state[]
    then all variables with the code:Input storage class decorated with
    code:Location in the code:Vertex {ExecutionModel} code:OpEntryPoint
    must: contain a location in
    slink:VkVertexInputAttributeDescription2EXT::pname:location
  * [[VUID-{refpage}-Input-08734]]
    If
ifdef::VK_EXT_shader_object[]
    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
    stage
ifdef::VK_EXT_vertex_input_dynamic_state[or]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_vertex_input_dynamic_state[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
endif::VK_EXT_vertex_input_dynamic_state[]
    then the numeric type associated with all code:Input variables of the
    corresponding code:Location in the code:Vertex {ExecutionModel}
    code:OpEntryPoint must: be the same as
    slink:VkVertexInputAttributeDescription2EXT::pname:format
  * [[VUID-{refpage}-format-08936]]
    If
ifdef::VK_EXT_shader_object[]
    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
    stage
ifdef::VK_EXT_vertex_input_dynamic_state[or]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_vertex_input_dynamic_state[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
endif::VK_EXT_vertex_input_dynamic_state[]
    and slink:VkVertexInputAttributeDescription2EXT::pname:format has a
    64-bit component, then the scalar width associated with all code:Input
    variables of the corresponding code:Location in the code:Vertex
    {ExecutionModel} code:OpEntryPoint must: be 64-bit
  * [[VUID-{refpage}-format-08937]]
    If
ifdef::VK_EXT_shader_object[]
    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
    stage
ifdef::VK_EXT_vertex_input_dynamic_state[or]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_vertex_input_dynamic_state[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
endif::VK_EXT_vertex_input_dynamic_state[]
    and the scalar width associated with a code:Location decorated
    code:Input variable in the code:Vertex {ExecutionModel}
    code:OpEntryPoint is 64-bit, then the corresponding
    slink:VkVertexInputAttributeDescription2EXT::pname:format must: have a
    64-bit component
  * [[VUID-{refpage}-None-09203]]
    If
ifdef::VK_EXT_shader_object[]
    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
    stage
ifdef::VK_EXT_vertex_input_dynamic_state[or]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_vertex_input_dynamic_state[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state enabled
endif::VK_EXT_vertex_input_dynamic_state[]
    and slink:VkVertexInputAttributeDescription2EXT::pname:format has a
    64-bit component, then all code:Input variables at the corresponding
    code:Location in the code:Vertex {ExecutionModel} code:OpEntryPoint
    must: not use components that are not present in the format
endif::VK_EXT_vertex_input_dynamic_state,VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state2[]
  * [[VUID-{refpage}-None-04875]]
    If
ifdef::VK_EXT_shader_object[]
    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
    stage and the most recent call to fname:vkCmdSetPrimitiveTopology in the
    current command buffer set pname:primitiveTopology to
    ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
ifdef::VK_EXT_extended_dynamic_state2[or]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state2[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state enabled
endif::VK_EXT_extended_dynamic_state2[]
    then flink:vkCmdSetPatchControlPointsEXT must: have been called in the
    current command buffer prior to this drawing command
endif::VK_EXT_extended_dynamic_state2[]
ifdef::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-04879]]
    If
ifdef::VK_EXT_shader_object[]
    there is a shader object bound to the ename:VK_SHADER_STAGE_VERTEX_BIT
    stage
ifdef::VK_EXT_extended_dynamic_state2[or]
endif::VK_EXT_shader_object[]
ifdef::VK_EXT_extended_dynamic_state2[]
    the bound graphics pipeline state was created with the
    ename:VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE dynamic state enabled
endif::VK_EXT_extended_dynamic_state2[]
    then flink:vkCmdSetPrimitiveRestartEnable must: have been called in the
    current command buffer prior to this drawing command
endif::VK_VERSION_1_3,VK_EXT_extended_dynamic_state2,VK_EXT_shader_object[]
ifdef::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
  * [[VUID-{refpage}-stage-06481]]
    The bound graphics pipeline must: not have been created with the
    slink:VkPipelineShaderStageCreateInfo::pname:stage member of an element
    of slink:VkGraphicsPipelineCreateInfo::pname:pStages set to
    ename:VK_SHADER_STAGE_TASK_BIT_EXT or ename:VK_SHADER_STAGE_MESH_BIT_EXT
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08885]]
    There must: be no shader object bound to either of the
    ename:VK_SHADER_STAGE_TASK_BIT_EXT or ename:VK_SHADER_STAGE_MESH_BIT_EXT
    stages
endif::VK_EXT_shader_object[]
endif::VK_NV_mesh_shader,VK_EXT_mesh_shader[]
// Common Valid Usage