blob: 5a897697eca363bb4d1db3de03a5488b46c25ee3 [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.
Tobias Hector6663c9b2020-11-05 10:18:02 +00005 * Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
Jasper St. Pierre512613a2019-04-08 16:25:23 -07006 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * Author: Cody Northrop <cnorthrop@google.com>
20 * Author: Michael Lentine <mlentine@google.com>
21 * Author: Tobin Ehlis <tobine@google.com>
22 * Author: Chia-I Wu <olv@google.com>
23 * Author: Chris Forbes <chrisf@ijw.co.nz>
24 * Author: Mark Lobodzinski <mark@lunarg.com>
25 * Author: Ian Elliott <ianelliott@google.com>
26 * Author: Dave Houlton <daveh@lunarg.com>
27 * Author: Dustin Graves <dustin@lunarg.com>
28 * Author: Jeremy Hayes <jeremy@lunarg.com>
29 * Author: Jon Ashburn <jon@lunarg.com>
30 * Author: Karl Schultz <karl@lunarg.com>
31 * Author: Mark Young <marky@lunarg.com>
32 * Author: Mike Schuchardt <mikes@lunarg.com>
33 * Author: Mike Weiblen <mikew@lunarg.com>
34 * Author: Tony Barbour <tony@LunarG.com>
35 * Author: John Zulauf <jzulauf@lunarg.com>
36 * Author: Shannon McPherson <shannon@lunarg.com>
Jeremy Kniagere6827432020-04-01 09:05:56 -060037 * Author: Jeremy Kniager <jeremyk@lunarg.com>
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070038 * Author: Nathaniel Cesario <nathaniel@lunarg.com>
Tobias Hector6663c9b2020-11-05 10:18:02 +000039 * Author: Tobias Hector <tobias.hector@amd.com>
Jasper St. Pierre512613a2019-04-08 16:25:23 -070040 */
41
Jasper St. Pierre512613a2019-04-08 16:25:23 -070042#include "chassis.h"
43#include "core_validation.h"
44
Spencer Fricke507600b2020-03-22 13:23:06 -070045// clang-format off
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070046struct DispatchVuidsCmdDraw : DrawDispatchVuid {
47 DispatchVuidsCmdDraw() : DrawDispatchVuid() {
48 queue_flag = "VUID-vkCmdDraw-commandBuffer-cmdpool";
49 inside_renderpass = "VUID-vkCmdDraw-renderpass";
50 pipeline_bound = "VUID-vkCmdDraw-None-02700";
51 dynamic_state = "VUID-vkCmdDraw-commandBuffer-02701";
52 vertex_binding = "VUID-vkCmdDraw-None-04007";
53 vertex_binding_null = "VUID-vkCmdDraw-None-04008";
54 compatible_pipeline = "VUID-vkCmdDraw-None-02697";
55 render_pass_compatible = "VUID-vkCmdDraw-renderPass-02684";
56 subpass_index = "VUID-vkCmdDraw-subpass-02685";
57 sample_location = "VUID-vkCmdDraw-sampleLocationsEnable-02689";
58 linear_sampler = "VUID-vkCmdDraw-magFilter-04553";
59 cubic_sampler = "VUID-vkCmdDraw-None-02692";
60 viewport_count = "VUID-vkCmdDraw-viewportCount-03417";
61 scissor_count = "VUID-vkCmdDraw-scissorCount-03418";
62 viewport_scissor_count = "VUID-vkCmdDraw-viewportCount-03419";
63 primitive_topology = "VUID-vkCmdDraw-primitiveTopology-03420";
64 corner_sampled_address_mode = "VUID-vkCmdDraw-flags-02696";
65 subpass_input = "VUID-vkCmdDraw-None-02686";
66 imageview_atomic = "VUID-vkCmdDraw-None-02691";
67 push_constants_set = "VUID-vkCmdDraw-None-02698";
68 image_subresources = "VUID-vkCmdDraw-None-04584";
69 descriptor_valid = "VUID-vkCmdDraw-None-02699";
70 sampler_imageview_type = "VUID-vkCmdDraw-None-02702";
71 sampler_implicitLod_dref_proj = "VUID-vkCmdDraw-None-02703";
72 sampler_bias_offset = "VUID-vkCmdDraw-None-02704";
73 vertex_binding_attribute = "VUID-vkCmdDraw-None-02721";
74 dynamic_state_setting_commands = "VUID-vkCmdDraw-None-02859";
75 unprotected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02707";
76 protected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02712";
77 max_multiview_instance_index = "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688";
78 filter_cubic = "VUID-vkCmdDraw-filterCubic-02694";
79 filter_cubic_min_max = "VUID-vkCmdDraw-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +000080 viewport_count_primitive_shading_rate = "VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070081 }
82};
83
84struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
85 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
86 queue_flag = "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool";
87 inside_renderpass = "VUID-vkCmdDrawIndexed-renderpass";
88 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
89 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
90 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
91 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
92 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
93 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
94 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
95 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
96 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
97 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
98 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
99 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
100 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
101 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
102 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
103 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
104 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
105 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
106 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
107 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
108 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
109 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
110 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
111 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
112 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
113 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
114 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
115 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
116 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
117 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000118 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700119 }
120};
121
122struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
123 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
124 queue_flag = "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool";
125 inside_renderpass = "VUID-vkCmdDrawIndirect-renderpass";
126 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
127 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
128 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
129 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
130 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
131 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
132 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
133 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
134 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
135 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
136 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
137 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
138 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
139 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
140 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
141 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
142 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
143 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
144 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
145 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
146 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
147 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
148 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
149 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
150 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
151 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
152 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
153 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
154 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
155 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
156 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
157 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000158 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700159 }
160};
161
162struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
163 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
164 queue_flag = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool";
165 inside_renderpass = "VUID-vkCmdDrawIndexedIndirect-renderpass";
166 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
167 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
168 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
169 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
170 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
171 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
172 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
173 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
174 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
175 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
176 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
177 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
178 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
179 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
180 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
181 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
182 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
183 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
184 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
185 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
186 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
187 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
188 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
189 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
190 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
191 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
192 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
193 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
194 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
195 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
196 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
197 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000198 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700199 }
200};
201
202struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
203 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
204 queue_flag = "VUID-vkCmdDispatch-commandBuffer-cmdpool";
205 inside_renderpass = "VUID-vkCmdDispatch-renderpass";
206 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
207 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
208 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
209 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
210 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
211 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
212 push_constants_set = "VUID-vkCmdDispatch-None-02698";
213 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
214 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
215 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
216 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
217 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
218 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
219 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
220 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
221 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
222 }
223};
224
225struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
226 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
227 queue_flag = "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool";
228 inside_renderpass = "VUID-vkCmdDispatchIndirect-renderpass";
229 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
230 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
231 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
232 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
233 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
234 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
235 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
236 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
237 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
238 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
239 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
240 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
241 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
242 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
243 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
244 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
245 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
246 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
247 }
248};
249
250struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
251 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
252 queue_flag = "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool";
253 inside_renderpass = "VUID-vkCmdDrawIndirectCount-renderpass";
254 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
255 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
256 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
257 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
258 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
259 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
260 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
261 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
262 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
263 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
264 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
265 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
266 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
267 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
268 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
269 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
270 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
271 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
272 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
273 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
274 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
275 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
276 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
277 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
278 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
279 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
280 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
281 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
282 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
283 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
284 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
285 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000286 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700287 }
288};
289
290struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
291 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
292 queue_flag = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool";
293 inside_renderpass = "VUID-vkCmdDrawIndexedIndirectCount-renderpass";
294 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
295 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
296 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
297 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
298 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
299 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
300 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
301 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
302 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
303 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
304 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
305 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
306 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
307 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
308 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
309 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
310 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
311 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
312 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
313 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
314 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
315 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
316 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
317 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
318 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
319 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
320 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
321 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
322 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
323 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
324 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
325 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000326 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700327 }
328};
329
330struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
331 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
332 queue_flag = "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool";
333 inside_renderpass = "VUID-vkCmdTraceRaysNV-renderpass";
334 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
335 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
336 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
337 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
338 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
339 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
340 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
341 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
342 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
343 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
344 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
345 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
346 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
347 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
348 protected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02712";
349 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
350 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
351 }
352};
353
354struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
355 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
356 queue_flag = "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool";
357 inside_renderpass = "VUID-vkCmdTraceRaysKHR-renderpass";
358 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
359 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
360 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
361 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
362 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
363 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
364 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
365 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
366 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
367 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
368 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
369 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
370 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
371 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
372 protected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02712";
373 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
374 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
375 }
376};
377
378struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
379 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
380 queue_flag = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool";
381 inside_renderpass = "VUID-vkCmdTraceRaysIndirectKHR-renderpass";
382 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
383 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
384 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
385 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
386 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
387 indirect_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711";
388 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-buffer-02708";
389 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-buffer-02709";
390 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
391 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
392 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
393 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
394 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
395 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
396 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
397 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
398 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
399 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
400 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
401 }
402};
403
404struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
405 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
406 queue_flag = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool";
407 inside_renderpass = "VUID-vkCmdDrawMeshTasksNV-renderpass";
408 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
409 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
410 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
411 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
412 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
413 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
414 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
415 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
416 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
417 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
418 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
419 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
420 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
421 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
422 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
423 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
424 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
425 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
426 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
427 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
428 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
429 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
430 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
431 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
432 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
433 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000434 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700435 }
436};
437
438struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
439 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
440 queue_flag = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool";
441 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass";
442 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
443 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
444 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
445 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
446 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
447 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
448 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
449 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
450 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
451 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
452 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
453 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
454 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
455 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
456 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
457 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
458 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
459 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
460 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
461 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
462 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
463 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
464 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
465 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
466 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
467 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
468 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
469 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
470 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000471 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700472 }
473};
474
475struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
476 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
477 queue_flag = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool";
478 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass";
479 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
480 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
481 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
482 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
483 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
484 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
485 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
486 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
487 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
488 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
489 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
490 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
491 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
492 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
493 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
494 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
495 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
496 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
497 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
498 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
499 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
500 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
501 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
502 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
503 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
504 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
505 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
506 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
507 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000508 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700509 }
510};
511
512struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
513 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
514 queue_flag = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool";
515 inside_renderpass = "VUID-vkCmdDrawIndirectByteCountEXT-renderpass";
516 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
517 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
518 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
519 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
520 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
521 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
522 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
523 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
524 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
525 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
526 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
527 indirect_contiguous_memory = "UNASSIGNED-vkCmdDrawIndirectByteCountEXT-buffer", // TODO - Update when header are updated
528 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
529 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
530 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
531 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
532 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
533 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
534 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
535 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
536 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
537 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
538 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
539 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
540 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
541 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
542 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
543 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
544 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
545 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
546 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
547 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000548 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700549 }
550};
551
552struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
553 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
554 queue_flag = "VUID-vkCmdDispatchBase-commandBuffer-cmdpool";
555 inside_renderpass = "VUID-vkCmdDispatchBase-renderpass";
556 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
557 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
558 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
559 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
560 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
561 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
562 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
563 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
564 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
565 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
566 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
567 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
568 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
569 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
570 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
571 }
572};
573
574// 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 -0700575static const std::map<CMD_TYPE, DrawDispatchVuid> drawdispatch_vuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700576 {CMD_DRAW, DispatchVuidsCmdDraw()},
577 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
578 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
579 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
580 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
581 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
582 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
583 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
584 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
585 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
586 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
587 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
588 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
589 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
590 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
591 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700592 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700593 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700594};
595// clang-format on
596
597// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
598const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
599 if (drawdispatch_vuid.find(cmd_type) != drawdispatch_vuid.cend()) {
600 return drawdispatch_vuid.at(cmd_type);
601 } else {
602 return drawdispatch_vuid.at(CMD_NONE);
603 }
604}
605
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700606// Generic function to handle validation for all CmdDraw* type functions
607bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700608 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700609 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700610 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600611 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700612 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700613 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700614 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700615 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
616 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
617 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700618 }
619 return skip;
620}
621
locke-lunarg3fa463a2020-10-23 16:39:04 -0600622bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
623 CMD_TYPE cmd_type, const char *caller) const {
624 bool skip = false;
625 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
626 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
627 if (!cb_node) return skip;
628
629 // Verify maxMultiviewInstanceIndex
630 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass && enabled_features.multiview_features.multiview &&
631 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
632 LogObjectList objlist(commandBuffer);
633 objlist.add(cb_node->activeRenderPass->renderPass);
634 skip |= LogError(objlist, vuid.max_multiview_instance_index,
635 "%s: multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
636 "and firstInstance: %" PRIu32 ".",
637 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass).c_str(),
638 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
639 }
640 return skip;
641}
642
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700643bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500644 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600645 bool skip = false;
646 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
647 skip |=
648 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()", VK_QUEUE_GRAPHICS_BIT);
649 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700650}
651
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700652bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500653 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600654 bool skip = false;
655 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
656 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
657 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500658 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700659 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
660 unsigned int index_size = 0;
661 const auto &index_buffer_binding = cb_state->index_buffer_binding;
662 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
663 index_size = 2;
664 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
665 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600666 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
667 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700668 }
669 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
670 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700671 skip |=
locke-lunarg1ae57d62020-11-18 10:49:19 -0700672 LogError(index_buffer_binding.buffer_state->buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700673 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
674 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
675 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
676 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700677 }
678 }
679 return skip;
680}
681
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700682bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
683 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700684 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700685 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600686 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700687 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700688 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600689 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
690 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700691 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
692 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
693 buffer_state);
694 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
695 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
696 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%u) is not less than "
697 "or equal to the size of buffer (%u).",
698 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600699 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700700 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
701 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
702 return skip;
703}
704
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700705bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700706 uint32_t drawCount, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700707 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
708 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600709 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700710 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700711 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600712 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
713 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
714 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700715 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
716 offset, buffer_state);
717 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
718 skip |= LogError(
719 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
720 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%u) is not less than "
721 "or equal to the size of buffer (%u).",
722 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600723 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700724 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
725 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
726 // 'buffer'.
727 return skip;
728}
729
Jeff Bolz5c801d12019-10-09 10:38:45 -0500730bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600731 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600732 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700733 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600734 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700735}
736
locke-lunarg25b6c352020-08-06 17:44:18 -0600737bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
738 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
739 uint32_t groupCountZ) const {
740 bool skip = false;
741 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
742 VK_QUEUE_COMPUTE_BIT);
743 return skip;
744}
745
746bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
747 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
748 uint32_t groupCountZ) const {
749 bool skip = false;
750 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
751 VK_QUEUE_COMPUTE_BIT);
752 return skip;
753}
754
Jeff Bolz5c801d12019-10-09 10:38:45 -0500755bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700756 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700757 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700758 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700759 return skip;
760}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700761bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
762 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700763 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700764 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700765 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600766 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700767 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
768 "call this command.",
769 apiName);
770 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700771 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
772 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600773 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600774 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700775 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
776 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700777 }
778
Tony-LunarG83544c72020-01-17 12:30:19 -0700779 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700780 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600781 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700782 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700783 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700784 skip |=
785 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
786 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700787 return skip;
788}
789
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700790bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
791 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
792 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700793 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700794 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700795}
796
797bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
798 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
799 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700800 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700801 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700802}
803
804bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
805 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700806 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700807 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700808 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600809 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700810 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
811 "call this command.",
812 apiName);
813 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700814 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
815 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600816 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600817 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800818 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700819 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700820 }
821
sfricke-samsungf692b972020-05-02 08:00:45 -0700822 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
823 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600824 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700825 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700826 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700827 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700828 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800829 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700830 return skip;
831}
832
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700833bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
834 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
835 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700836 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
837 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700838}
839
840bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
841 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
842 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700843 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
844 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700845}
846
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600847bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
848 uint32_t firstInstance, VkBuffer counterBuffer,
849 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
850 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700851 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700852 if (!enabled_features.transform_feedback_features.transformFeedback) {
853 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
854 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
855 }
856 if (device_extensions.vk_ext_transform_feedback && !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
857 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02288",
858 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
859 "vkCmdDrawIndirectByteCountEXT()");
860 }
locke-lunarg3fa463a2020-10-23 16:39:04 -0600861 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
862 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700863 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
864 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
865 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
866 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600867}
868
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500869bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
870 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
871 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
872 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
873 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
874 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
875 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700876 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
877 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700878 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
879 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
880 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
881 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
882 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
883 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
884 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
885 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
886 }
887 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
888 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
889 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
890 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
891 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
892 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
893 }
894 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
895 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
896 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
897 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100898 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700899 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
900 }
901 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
902 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
903 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
904 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100905 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700906 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
907 }
sourav parmarcd5fb182020-07-17 12:58:44 -0700908
sourav parmar30e19392020-12-02 16:57:21 -0800909 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
910 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
911 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
912 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
913 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -0700914 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500915 return skip;
916}
917
Jason Macnak67407e72019-07-11 11:05:09 -0700918void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
919 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
920 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
921 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
922 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
923 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
924 uint32_t width, uint32_t height, uint32_t depth) {
925 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600926 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -0700927 cb_state->hasTraceRaysCmd = true;
928}
929
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500930bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700931 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
932 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
933 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
934 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500935 uint32_t height, uint32_t depth) const {
936 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
937 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
sourav parmarcd5fb182020-07-17 12:58:44 -0700938 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -0700939 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
940 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -0700941 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
942 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
943 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
944 } else { // bound to valid RT pipeline
945 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
946 if (!pHitShaderBindingTable->deviceAddress) {
947 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
948 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
949 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
950 "deviceAddress member of pHitShaderBindingTable must not be zero.");
951 }
952 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
953 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
954 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
955 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
956 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
957 "execute an intersection shader must not be set to zero.");
958 }
959 }
960 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
961 if (!pHitShaderBindingTable->deviceAddress) {
962 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
963 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
964 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
965 "deviceAddress member of pHitShaderBindingTable must not be zero.");
966 }
967 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
968 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
969 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
970 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
971 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
972 "execute a closest hit shader must not be set to zero.");
973 }
974 }
975 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
976 if (!pHitShaderBindingTable->deviceAddress) {
977 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03695",
978 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
979 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
980 "deviceAddress member of pHitShaderBindingTable must not be zero.");
981 }
982 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
983 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
984 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
985 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
986 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
987 "execute an any hit shader must not be set to zero.");
988 }
989 }
990 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500991 return skip;
992}
993
994void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700995 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
996 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
997 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
998 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500999 uint32_t height, uint32_t depth) {
1000 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001001 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001002 cb_state->hasTraceRaysCmd = true;
1003}
1004
1005bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001006 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1007 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1008 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1009 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1010 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001011 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001012 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sourav parmarcd5fb182020-07-17 12:58:44 -07001013 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001014 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1015 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001016 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1017 skip |=
1018 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1019 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1020 } else { // valid bind point
1021 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1022 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1023 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1024 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1025 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1026 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1027 }
1028 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1029 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1030 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1031 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1032 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1033 "execute an intersection shader must not be set to zero.");
1034 }
1035 }
1036 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1037 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1038 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1039 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1040 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1041 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1042 }
1043 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1044 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1045 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1046 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1047 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1048 "execute a closest hit shader must not be set to zero.");
1049 }
1050 }
1051 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
1052 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1053 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03695",
1054 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1055 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, the "
1056 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1057 }
1058 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1059 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1060 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1061 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1062 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1063 "execute an any hit shader must not be set to zero.");
1064 }
1065 }
1066 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001067 return skip;
1068}
1069
1070void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001071 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1072 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1073 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1074 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -07001075 VkDeviceAddress indirectDeviceAddress) {
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001076 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001077 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
1078 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001079 cb_state->hasTraceRaysCmd = true;
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001080}
1081
Jeff Bolz5c801d12019-10-09 10:38:45 -05001082bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -07001083 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
1084 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001085 return skip;
1086}
1087
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001088bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001089 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001090 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001091 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001092 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001093 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001094 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001095 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1096 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1097 drawCount, offset, buffer_state);
1098 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001099 return skip;
1100}
1101
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001102bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1103 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001104 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001105 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001106 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001107 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1108 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001109 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001110 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001111 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001112 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001113 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1114 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001115 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1116 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1117 if (maxDrawCount > 1) {
1118 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1119 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1120 maxDrawCount, offset, buffer_state);
1121 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001122 return skip;
1123}