blob: 96e00b4c9c095997615e224e5714deab3f6989bb [file] [log] [blame]
Tony-LunarG73719992020-01-15 10:20:28 -07001/* Copyright (c) 2015-2020 The Khronos Group Inc.
2 * Copyright (c) 2015-2020 Valve Corporation
3 * Copyright (c) 2015-2020 LunarG, Inc.
4 * Copyright (C) 2015-2020 Google Inc.
Jasper St. Pierre512613a2019-04-08 16:25:23 -07005 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 * Author: Cody Northrop <cnorthrop@google.com>
19 * Author: Michael Lentine <mlentine@google.com>
20 * Author: Tobin Ehlis <tobine@google.com>
21 * Author: Chia-I Wu <olv@google.com>
22 * Author: Chris Forbes <chrisf@ijw.co.nz>
23 * Author: Mark Lobodzinski <mark@lunarg.com>
24 * Author: Ian Elliott <ianelliott@google.com>
25 * Author: Dave Houlton <daveh@lunarg.com>
26 * Author: Dustin Graves <dustin@lunarg.com>
27 * Author: Jeremy Hayes <jeremy@lunarg.com>
28 * Author: Jon Ashburn <jon@lunarg.com>
29 * Author: Karl Schultz <karl@lunarg.com>
30 * Author: Mark Young <marky@lunarg.com>
31 * Author: Mike Schuchardt <mikes@lunarg.com>
32 * Author: Mike Weiblen <mikew@lunarg.com>
33 * Author: Tony Barbour <tony@LunarG.com>
34 * Author: John Zulauf <jzulauf@lunarg.com>
35 * Author: Shannon McPherson <shannon@lunarg.com>
Jeremy Kniagere6827432020-04-01 09:05:56 -060036 * Author: Jeremy Kniager <jeremyk@lunarg.com>
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070037 * Author: Nathaniel Cesario <nathaniel@lunarg.com>
Jasper St. Pierre512613a2019-04-08 16:25:23 -070038 */
39
Jasper St. Pierre512613a2019-04-08 16:25:23 -070040#include "chassis.h"
41#include "core_validation.h"
42
Spencer Fricke507600b2020-03-22 13:23:06 -070043// clang-format off
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070044struct DispatchVuidsCmdDraw : DrawDispatchVuid {
45 DispatchVuidsCmdDraw() : DrawDispatchVuid() {
46 queue_flag = "VUID-vkCmdDraw-commandBuffer-cmdpool";
47 inside_renderpass = "VUID-vkCmdDraw-renderpass";
48 pipeline_bound = "VUID-vkCmdDraw-None-02700";
49 dynamic_state = "VUID-vkCmdDraw-commandBuffer-02701";
50 vertex_binding = "VUID-vkCmdDraw-None-04007";
51 vertex_binding_null = "VUID-vkCmdDraw-None-04008";
52 compatible_pipeline = "VUID-vkCmdDraw-None-02697";
53 render_pass_compatible = "VUID-vkCmdDraw-renderPass-02684";
54 subpass_index = "VUID-vkCmdDraw-subpass-02685";
55 sample_location = "VUID-vkCmdDraw-sampleLocationsEnable-02689";
56 linear_sampler = "VUID-vkCmdDraw-magFilter-04553";
57 cubic_sampler = "VUID-vkCmdDraw-None-02692";
58 viewport_count = "VUID-vkCmdDraw-viewportCount-03417";
59 scissor_count = "VUID-vkCmdDraw-scissorCount-03418";
60 viewport_scissor_count = "VUID-vkCmdDraw-viewportCount-03419";
61 primitive_topology = "VUID-vkCmdDraw-primitiveTopology-03420";
62 corner_sampled_address_mode = "VUID-vkCmdDraw-flags-02696";
63 subpass_input = "VUID-vkCmdDraw-None-02686";
64 imageview_atomic = "VUID-vkCmdDraw-None-02691";
65 push_constants_set = "VUID-vkCmdDraw-None-02698";
66 image_subresources = "VUID-vkCmdDraw-None-04584";
67 descriptor_valid = "VUID-vkCmdDraw-None-02699";
68 sampler_imageview_type = "VUID-vkCmdDraw-None-02702";
69 sampler_implicitLod_dref_proj = "VUID-vkCmdDraw-None-02703";
70 sampler_bias_offset = "VUID-vkCmdDraw-None-02704";
71 vertex_binding_attribute = "VUID-vkCmdDraw-None-02721";
72 dynamic_state_setting_commands = "VUID-vkCmdDraw-None-02859";
73 unprotected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02707";
74 protected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02712";
75 max_multiview_instance_index = "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688";
76 filter_cubic = "VUID-vkCmdDraw-filterCubic-02694";
77 filter_cubic_min_max = "VUID-vkCmdDraw-filterCubicMinmax-02695";
78 }
79};
80
81struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
82 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
83 queue_flag = "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool";
84 inside_renderpass = "VUID-vkCmdDrawIndexed-renderpass";
85 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
86 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
87 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
88 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
89 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
90 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
91 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
92 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
93 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
94 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
95 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
96 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
97 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
98 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
99 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
100 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
101 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
102 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
103 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
104 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
105 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
106 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
107 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
108 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
109 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
110 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
111 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
112 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
113 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
114 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
115 }
116};
117
118struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
119 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
120 queue_flag = "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool";
121 inside_renderpass = "VUID-vkCmdDrawIndirect-renderpass";
122 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
123 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
124 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
125 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
126 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
127 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
128 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
129 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
130 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
131 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
132 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
133 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
134 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
135 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
136 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
137 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
138 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
139 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
140 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
141 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
142 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
143 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
144 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
145 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
146 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
147 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
148 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
149 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
150 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
151 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
152 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
153 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
154 }
155};
156
157struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
158 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
159 queue_flag = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool";
160 inside_renderpass = "VUID-vkCmdDrawIndexedIndirect-renderpass";
161 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
162 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
163 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
164 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
165 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
166 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
167 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
168 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
169 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
170 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
171 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
172 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
173 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
174 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
175 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
176 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
177 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
178 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
179 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
180 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
181 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
182 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
183 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
184 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
185 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
186 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
187 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
188 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
189 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
190 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
191 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
192 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
193 }
194};
195
196struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
197 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
198 queue_flag = "VUID-vkCmdDispatch-commandBuffer-cmdpool";
199 inside_renderpass = "VUID-vkCmdDispatch-renderpass";
200 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
201 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
202 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
203 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
204 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
205 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
206 push_constants_set = "VUID-vkCmdDispatch-None-02698";
207 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
208 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
209 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
210 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
211 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
212 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
213 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
214 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
215 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
216 }
217};
218
219struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
220 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
221 queue_flag = "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool";
222 inside_renderpass = "VUID-vkCmdDispatchIndirect-renderpass";
223 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
224 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
225 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
226 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
227 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
228 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
229 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
230 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
231 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
232 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
233 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
234 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
235 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
236 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
237 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
238 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
239 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
240 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
241 }
242};
243
244struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
245 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
246 queue_flag = "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool";
247 inside_renderpass = "VUID-vkCmdDrawIndirectCount-renderpass";
248 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
249 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
250 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
251 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
252 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
253 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
254 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
255 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
256 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
257 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
258 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
259 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
260 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
261 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
262 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
263 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
264 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
265 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
266 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
267 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
268 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
269 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
270 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
271 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
272 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
273 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
274 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
275 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
276 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
277 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
278 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
279 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
280 }
281};
282
283struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
284 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
285 queue_flag = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool";
286 inside_renderpass = "VUID-vkCmdDrawIndexedIndirectCount-renderpass";
287 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
288 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
289 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
290 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
291 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
292 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
293 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
294 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
295 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
296 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
297 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
298 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
299 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
300 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
301 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
302 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
303 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
304 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
305 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
306 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
307 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
308 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
309 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
310 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
311 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
312 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
313 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
314 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
315 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
316 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
317 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
318 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
319 }
320};
321
322struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
323 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
324 queue_flag = "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool";
325 inside_renderpass = "VUID-vkCmdTraceRaysNV-renderpass";
326 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
327 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
328 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
329 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
330 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
331 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
332 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
333 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
334 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
335 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
336 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
337 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
338 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
339 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
340 protected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02712";
341 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
342 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
343 }
344};
345
346struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
347 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
348 queue_flag = "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool";
349 inside_renderpass = "VUID-vkCmdTraceRaysKHR-renderpass";
350 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
351 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
352 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
353 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
354 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
355 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
356 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
357 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
358 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
359 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
360 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
361 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
362 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
363 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
364 protected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02712";
365 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
366 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
367 }
368};
369
370struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
371 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
372 queue_flag = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool";
373 inside_renderpass = "VUID-vkCmdTraceRaysIndirectKHR-renderpass";
374 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
375 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
376 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
377 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
378 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
379 indirect_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711";
380 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-buffer-02708";
381 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-buffer-02709";
382 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
383 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
384 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
385 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
386 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
387 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
388 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
389 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
390 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
391 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
392 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
393 }
394};
395
396struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
397 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
398 queue_flag = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool";
399 inside_renderpass = "VUID-vkCmdDrawMeshTasksNV-renderpass";
400 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
401 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
402 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
403 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
404 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
405 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
406 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
407 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
408 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
409 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
410 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
411 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
412 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
413 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
414 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
415 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
416 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
417 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
418 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
419 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
420 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
421 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
422 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
423 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
424 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
425 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
426 }
427};
428
429struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
430 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
431 queue_flag = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool";
432 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass";
433 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
434 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
435 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
436 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
437 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
438 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
439 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
440 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
441 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
442 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
443 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
444 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
445 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
446 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
447 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
448 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
449 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
450 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
451 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
452 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
453 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
454 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
455 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
456 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
457 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
458 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
459 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
460 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
461 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
462 }
463};
464
465struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
466 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
467 queue_flag = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool";
468 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass";
469 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
470 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
471 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
472 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
473 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
474 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
475 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
476 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
477 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
478 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
479 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
480 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
481 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
482 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
483 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
484 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
485 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
486 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
487 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
488 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
489 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
490 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
491 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
492 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
493 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
494 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
495 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
496 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
497 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
498 }
499};
500
501struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
502 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
503 queue_flag = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool";
504 inside_renderpass = "VUID-vkCmdDrawIndirectByteCountEXT-renderpass";
505 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
506 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
507 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
508 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
509 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
510 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
511 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
512 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
513 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
514 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
515 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
516 indirect_contiguous_memory = "UNASSIGNED-vkCmdDrawIndirectByteCountEXT-buffer", // TODO - Update when header are updated
517 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
518 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
519 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
520 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
521 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
522 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
523 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
524 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
525 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
526 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
527 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
528 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
529 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
530 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
531 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
532 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
533 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
534 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
535 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
536 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
537 }
538};
539
540struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
541 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
542 queue_flag = "VUID-vkCmdDispatchBase-commandBuffer-cmdpool";
543 inside_renderpass = "VUID-vkCmdDispatchBase-renderpass";
544 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
545 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
546 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
547 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
548 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
549 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
550 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
551 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
552 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
553 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
554 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
555 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
556 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
557 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
558 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
559 }
560};
561
562// This LUT is created to allow a static listing of each VUID that is covered by drawdispatch commands
Spencer Fricke507600b2020-03-22 13:23:06 -0700563static const std::map<CMD_TYPE, DrawDispatchVuid> drawdispatch_vuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700564 {CMD_DRAW, DispatchVuidsCmdDraw()},
565 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
566 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
567 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
568 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
569 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
570 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
571 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
572 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
573 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
574 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
575 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
576 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
577 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
578 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
579 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700580 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700581 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700582};
583// clang-format on
584
585// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
586const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
587 if (drawdispatch_vuid.find(cmd_type) != drawdispatch_vuid.cend()) {
588 return drawdispatch_vuid.at(cmd_type);
589 } else {
590 return drawdispatch_vuid.at(CMD_NONE);
591 }
592}
593
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700594// Generic function to handle validation for all CmdDraw* type functions
595bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700596 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700597 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700598 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600599 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700600 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700601 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700602 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700603 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
604 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
605 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700606 }
607 return skip;
608}
609
locke-lunarg3fa463a2020-10-23 16:39:04 -0600610bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
611 CMD_TYPE cmd_type, const char *caller) const {
612 bool skip = false;
613 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
614 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
615 if (!cb_node) return skip;
616
617 // Verify maxMultiviewInstanceIndex
618 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass && enabled_features.multiview_features.multiview &&
619 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
620 LogObjectList objlist(commandBuffer);
621 objlist.add(cb_node->activeRenderPass->renderPass);
622 skip |= LogError(objlist, vuid.max_multiview_instance_index,
623 "%s: multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
624 "and firstInstance: %" PRIu32 ".",
625 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass).c_str(),
626 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
627 }
628 return skip;
629}
630
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700631bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500632 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600633 bool skip = false;
634 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
635 skip |=
636 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()", VK_QUEUE_GRAPHICS_BIT);
637 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700638}
639
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700640bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500641 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600642 bool skip = false;
643 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
644 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
645 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500646 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700647 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
648 unsigned int index_size = 0;
649 const auto &index_buffer_binding = cb_state->index_buffer_binding;
650 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
651 index_size = 2;
652 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
653 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600654 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
655 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700656 }
657 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
658 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700659 skip |=
locke-lunarg1ae57d62020-11-18 10:49:19 -0700660 LogError(index_buffer_binding.buffer_state->buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700661 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
662 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
663 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
664 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700665 }
666 }
667 return skip;
668}
669
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700670bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500671 uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700672 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700673 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600674 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700675 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600676 if (count > 1) {
677 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
678 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
679 skip |=
680 ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
681 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), count, offset, buffer_state);
682 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700683 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
684 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
685 return skip;
686}
687
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700688bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500689 uint32_t count, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700690 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
691 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600692 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700693 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600694 if (count > 1) {
695 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
696 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
697 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
698 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), count, offset,
699 buffer_state);
700 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700701 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
702 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
703 // 'buffer'.
704 return skip;
705}
706
Jeff Bolz5c801d12019-10-09 10:38:45 -0500707bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600708 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600709 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700710 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600711 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700712}
713
locke-lunarg25b6c352020-08-06 17:44:18 -0600714bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
715 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
716 uint32_t groupCountZ) const {
717 bool skip = false;
718 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
719 VK_QUEUE_COMPUTE_BIT);
720 return skip;
721}
722
723bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
724 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
725 uint32_t groupCountZ) const {
726 bool skip = false;
727 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
728 VK_QUEUE_COMPUTE_BIT);
729 return skip;
730}
731
Jeff Bolz5c801d12019-10-09 10:38:45 -0500732bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700733 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700734 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700735 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700736 return skip;
737}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700738bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
739 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700740 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700741 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700742 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600743 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700744 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
745 "call this command.",
746 apiName);
747 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700748 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
749 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600750 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600751 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700752 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
753 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700754 }
755
Tony-LunarG83544c72020-01-17 12:30:19 -0700756 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700757 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600758 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700759 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700760 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700761 skip |=
762 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
763 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700764 return skip;
765}
766
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700767bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
768 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
769 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700770 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700771 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700772}
773
774bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
775 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
776 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700777 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700778 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700779}
780
781bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
782 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700783 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700784 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700785 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600786 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700787 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
788 "call this command.",
789 apiName);
790 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700791 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
792 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600793 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600794 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800795 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700796 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700797 }
798
sfricke-samsungf692b972020-05-02 08:00:45 -0700799 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
800 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600801 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700802 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700803 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700804 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700805 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800806 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700807 return skip;
808}
809
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700810bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
811 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
812 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700813 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
814 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700815}
816
817bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
818 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
819 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700820 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
821 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700822}
823
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600824bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
825 uint32_t firstInstance, VkBuffer counterBuffer,
826 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
827 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700828 bool skip = false;
locke-lunarg3fa463a2020-10-23 16:39:04 -0600829 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
830 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700831 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
832 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
833 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
834 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600835}
836
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500837bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
838 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
839 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
840 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
841 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
842 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
843 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700844 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
845 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700846 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
847 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
848 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
849 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
850 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
851 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
852 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
853 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
854 }
855 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
856 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
857 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
858 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
859 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
860 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
861 }
862 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
863 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
864 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
865 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100866 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700867 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
868 }
869 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
870 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
871 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
872 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100873 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700874 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
875 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500876 return skip;
877}
878
Jason Macnak67407e72019-07-11 11:05:09 -0700879void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
880 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
881 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
882 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
883 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
884 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
885 uint32_t width, uint32_t height, uint32_t depth) {
886 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600887 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -0700888 cb_state->hasTraceRaysCmd = true;
889}
890
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500891bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
892 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
893 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
894 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
895 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
896 uint32_t height, uint32_t depth) const {
897 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
898 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
899 return skip;
900}
901
902void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
903 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
904 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
905 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
906 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
907 uint32_t height, uint32_t depth) {
908 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600909 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500910 cb_state->hasTraceRaysCmd = true;
911}
912
913bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
914 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
915 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
916 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
917 const VkStridedBufferRegionKHR *pCallableShaderBindingTable,
918 VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700919 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500920 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700921 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_TRACERAYSINDIRECTKHR, "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500922 return skip;
923}
924
925void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
926 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
927 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
928 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
929 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, VkBuffer buffer,
930 VkDeviceSize offset) {
931 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
932 BUFFER_STATE *buffer_state = GetBufferState(buffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600933 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
934 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500935 cb_state->hasTraceRaysCmd = true;
936 AddCommandBufferBindingBuffer(cb_state, buffer_state);
937}
938
Jeff Bolz5c801d12019-10-09 10:38:45 -0500939bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700940 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
941 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700942 return skip;
943}
944
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700945bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500946 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700947 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700948 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600949 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700950 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -0600951 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600952 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
953 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
954 drawCount, offset, buffer_state);
955 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700956 return skip;
957}
958
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700959bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
960 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500961 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700962 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700963 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600964 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
965 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700966 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700967 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -0600968 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700969 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700970 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
971 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -0600972 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
973 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
974 if (maxDrawCount > 1) {
975 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
976 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
977 maxDrawCount, offset, buffer_state);
978 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700979 return skip;
980}