blob: 4a105bcd0ea0b77a292bedbfe069bc5f1689ddf6 [file] [log] [blame]
Shannon McPhersoncfb16b52021-01-04 14:24:40 -07001/* Copyright (c) 2015-2021 The Khronos Group Inc.
2 * Copyright (c) 2015-2021 Valve Corporation
3 * Copyright (c) 2015-2021 LunarG, Inc.
4 * Copyright (C) 2015-2021 Google Inc.
5 * Modifications Copyright (C) 2020-2021 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() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070048 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";
sfricke-samsung962d6f02021-04-03 20:28:59 -070073 rasterization_samples = "VUID-vkCmdDraw-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070074 unprotected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02707";
75 protected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02712";
76 max_multiview_instance_index = "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -070077 img_filter_cubic = "VUID-vkCmdDraw-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070078 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";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -070081 patch_control_points = "VUID-vkCmdDraw-None-04875";
82 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
83 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
84 logic_op = "VUID-vkCmdDraw-logicOp-04878";
85 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Piers Daniell924cd832021-05-18 13:48:47 -060086 vertex_input_binding_stride = "VUID-vkCmdDraw-pStrides-04884";
87 vertex_input = kVUID_Core_CmdDraw_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070088 }
89};
90
Tony-LunarG4490de42021-06-21 15:49:19 -060091struct DispatchVuidsCmdDrawMultiEXT : DrawDispatchVuid {
92 DispatchVuidsCmdDrawMultiEXT() : DrawDispatchVuid() {
93 pipeline_bound = "VUID-vkCmdDrawMultiEXT-None-02700";
94 dynamic_state = "VUID-vkCmdDrawMultiEXT-commandBuffer-02701";
95 vertex_binding = "VUID-vkCmdDrawMultiEXT-None-04007";
96 vertex_binding_null = "VUID-vkCmdDrawMultiEXT-None-04008";
97 compatible_pipeline = "VUID-vkCmdDrawMultiEXT-None-02697";
98 render_pass_compatible = "VUID-vkCmdDrawMultiEXT-renderPass-02684";
99 subpass_index = "VUID-vkCmdDrawMultiEXT-subpass-02685";
100 sample_location = "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-02689";
101 linear_sampler = "VUID-vkCmdDrawMultiEXT-magFilter-04553";
102 cubic_sampler = "VUID-vkCmdDrawMultiEXT-None-02692";
103 viewport_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03417";
104 scissor_count = "VUID-vkCmdDrawMultiEXT-scissorCount-03418";
105 viewport_scissor_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03419";
106 primitive_topology = "VUID-vkCmdDrawMultiEXT-primitiveTopology-03420";
107 corner_sampled_address_mode = "VUID-vkCmdDrawMultiEXT-flags-02696";
108 subpass_input = "VUID-vkCmdDrawMultiEXT-None-02686";
109 imageview_atomic = "VUID-vkCmdDrawMultiEXT-None-02691";
110 push_constants_set = "VUID-vkCmdDrawMultiEXT-None-02698";
111 image_subresources = "VUID-vkCmdDrawMultiEXT-None-04584";
112 descriptor_valid = "VUID-vkCmdDrawMultiEXT-None-02699";
113 sampler_imageview_type = "VUID-vkCmdDrawMultiEXT-None-02702";
114 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiEXT-None-02703";
115 sampler_bias_offset = "VUID-vkCmdDrawMultiEXT-None-02704";
116 vertex_binding_attribute = "VUID-vkCmdDrawMultiEXT-None-02721";
117 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiEXT-None-02859";
118 rasterization_samples = "VUID-vkCmdDrawMultiEXT-rasterizationSamples-04740";
119 unprotected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02707";
120 protected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02712";
121 max_multiview_instance_index = "VUID-vkCmdDrawMultiEXT-maxMultiviewInstanceIndex-02688";
122 img_filter_cubic = "VUID-vkCmdDrawMultiEXT-None-02693";
123 filter_cubic = "VUID-vkCmdDrawMultiEXT-filterCubic-02694";
124 filter_cubic_min_max = "VUID-vkCmdDrawMultiEXT-filterCubicMinmax-02695";
125 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
126 patch_control_points = "VUID-vkCmdDrawMultiEXT-None-04875";
127 rasterizer_discard_enable = "VUID-vkCmdDrawMultiEXT-None-04876";
128 depth_bias_enable = "VUID-vkCmdDrawMultiEXT-None-04877";
129 logic_op = "VUID-vkCmdDrawMultiEXT-logicOp-04878";
130 primitive_restart_enable = "VUID-vkCmdDrawMultiEXT-None-04879";
131 vertex_input_binding_stride = "VUID-vkCmdDrawMultiEXT-pStrides-04884";
132 vertex_input = kVUID_Core_CmdDrawMultiEXT_VertexInput;
133 }
134};
135
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700136struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
137 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700138 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
139 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
140 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
141 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
142 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
143 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
144 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
145 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
146 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
147 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
148 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
149 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
150 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
151 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
152 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
153 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
154 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
155 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
156 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
157 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
158 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
159 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
160 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
161 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
162 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700163 rasterization_samples = "VUID-vkCmdDrawIndexed-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700164 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
165 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
166 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700167 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700168 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
169 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000170 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600171 patch_control_points = "VUID-vkCmdDrawIndexed-None-04875";
172 rasterizer_discard_enable = "VUID-vkCmdDrawIndexed-None-04876";
173 depth_bias_enable = "VUID-vkCmdDrawIndexed-None-04877";
174 logic_op = "VUID-vkCmdDrawIndexed-logicOp-04878";
175 primitive_restart_enable = "VUID-vkCmdDrawIndexed-None-04879";
176 vertex_input_binding_stride = "VUID-vkCmdDrawIndexed-pStrides-04884";
177 vertex_input = kVUID_Core_CmdDrawIndexed_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700178 }
179};
180
Tony-LunarG4490de42021-06-21 15:49:19 -0600181struct DispatchVuidsCmdDrawMultiIndexedEXT : DrawDispatchVuid {
182 DispatchVuidsCmdDrawMultiIndexedEXT() : DrawDispatchVuid() {
183 pipeline_bound = "VUID-vkCmdDrawMultiIndexedEXT-None-02700";
184 dynamic_state = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02701";
185 vertex_binding = "VUID-vkCmdDrawMultiIndexedEXT-None-04007";
186 vertex_binding_null = "VUID-vkCmdDrawMultiIndexedEXT-None-04008";
187 compatible_pipeline = "VUID-vkCmdDrawMultiIndexedEXT-None-02697";
188 render_pass_compatible = "VUID-vkCmdDrawMultiIndexedEXT-renderPass-02684";
189 subpass_index = "VUID-vkCmdDrawMultiIndexedEXT-subpass-02685";
190 sample_location = "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-02689";
191 linear_sampler = "VUID-vkCmdDrawMultiIndexedEXT-magFilter-04553";
192 cubic_sampler = "VUID-vkCmdDrawMultiIndexedEXT-None-02692";
193 viewport_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03417";
194 scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-scissorCount-03418";
195 viewport_scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03419";
196 primitive_topology = "VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-03420";
197 corner_sampled_address_mode = "VUID-vkCmdDrawMultiIndexedEXT-flags-02696";
198 subpass_input = "VUID-vkCmdDrawMultiIndexedEXT-None-02686";
199 imageview_atomic = "VUID-vkCmdDrawMultiIndexedEXT-None-02691";
200 push_constants_set = "VUID-vkCmdDrawMultiIndexedEXT-None-02698";
201 image_subresources = "VUID-vkCmdDrawMultiIndexedEXT-None-04584";
202 descriptor_valid = "VUID-vkCmdDrawMultiIndexedEXT-None-02699";
203 sampler_imageview_type = "VUID-vkCmdDrawMultiIndexedEXT-None-02702";
204 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiIndexedEXT-None-02703";
205 sampler_bias_offset = "VUID-vkCmdDrawMultiIndexedEXT-None-02704";
206 vertex_binding_attribute = "VUID-vkCmdDrawMultiIndexedEXT-None-02721";
207 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiIndexedEXT-None-02859";
208 rasterization_samples = "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-04740";
209 unprotected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02707";
210 protected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712";
211 max_multiview_instance_index = "VUID-vkCmdDrawMultiIndexedEXT-maxMultiviewInstanceIndex-02688";
212 img_filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-None-02693";
213 filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-filterCubic-02694";
214 filter_cubic_min_max = "VUID-vkCmdDrawMultiIndexedEXT-filterCubicMinmax-02695";
215 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
216 patch_control_points = "VUID-vkCmdDrawMultiIndexedEXT-None-04875";
217 rasterizer_discard_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04876";
218 depth_bias_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04877";
219 logic_op = "VUID-vkCmdDrawMultiIndexedEXT-logicOp-04878";
220 primitive_restart_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04879";
221 vertex_input_binding_stride = "VUID-vkCmdDrawMultiIndexedEXT-pStrides-04884";
222 vertex_input = kVUID_Core_CmdDrawMultiIndexedEXT_VertexInput;
223 }
224};
225
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700226struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
227 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700228 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
229 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
230 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
231 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
232 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
233 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
234 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
235 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
236 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
237 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
238 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
239 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
240 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
241 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
242 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
243 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
244 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
245 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
246 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
247 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
248 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
249 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
250 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
251 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
252 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
253 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
254 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
255 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700256 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700257 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
258 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700259 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700260 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
261 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000262 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600263 patch_control_points = "VUID-vkCmdDrawIndirect-None-04875";
264 rasterizer_discard_enable = "VUID-vkCmdDrawIndirect-None-04876";
265 depth_bias_enable = "VUID-vkCmdDrawIndirect-None-04877";
266 logic_op = "VUID-vkCmdDrawIndirect-logicOp-04878";
267 primitive_restart_enable = "VUID-vkCmdDrawIndirect-None-04879";
268 vertex_input_binding_stride = "VUID-vkCmdDrawIndirect-pStrides-04884";
269 vertex_input = kVUID_Core_CmdDrawIndirect_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700270 }
271};
272
273struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
274 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700275 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
276 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
277 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
278 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
279 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
280 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
281 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
282 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
283 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
284 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
285 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
286 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
287 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
288 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
289 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
290 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
291 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
292 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
293 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
294 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
295 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
296 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
297 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
298 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
299 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
300 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
301 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
302 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700303 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700304 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
305 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700306 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700307 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
308 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000309 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600310 patch_control_points = "VUID-vkCmdDrawIndexedIndirect-None-04875";
311 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirect-None-04876";
312 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirect-None-04877";
313 logic_op = "VUID-vkCmdDrawIndexedIndirect-logicOp-04878";
314 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirect-None-04879";
315 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirect-pStrides-04884";
316 vertex_input = kVUID_Core_CmdDrawIndexedIndirect_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700317 }
318};
319
320struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
321 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700322 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700323 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700324 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
325 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
326 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
327 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
328 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
329 push_constants_set = "VUID-vkCmdDispatch-None-02698";
330 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
331 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
332 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
333 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
334 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
335 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
336 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700337 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700338 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
339 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
340 }
341};
342
343struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
344 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700345 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700346 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700347 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
348 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
349 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
350 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
351 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
352 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
353 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
354 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
355 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
356 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
357 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
358 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
359 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
360 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
361 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700362 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700363 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
364 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
365 }
366};
367
368struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
369 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700370 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
371 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
372 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
373 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
374 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
375 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
376 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
377 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
378 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
379 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
380 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
381 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
382 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
383 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
384 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
385 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
386 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
387 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
388 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
389 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
390 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
391 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
392 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
393 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
394 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
395 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
396 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
397 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700398 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700399 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
400 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700401 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700402 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
403 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000404 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600405 patch_control_points = "VUID-vkCmdDrawIndirectCount-None-04875";
406 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectCount-None-04876";
407 depth_bias_enable = "VUID-vkCmdDrawIndirectCount-None-04877";
408 logic_op = "VUID-vkCmdDrawIndirectCount-logicOp-04878";
409 primitive_restart_enable = "VUID-vkCmdDrawIndirectCount-None-04879";
410 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectCount-pStrides-04884";
411 vertex_input = kVUID_Core_CmdDrawIndirectCount_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700412 }
413};
414
415struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
416 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700417 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
418 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
419 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
420 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
421 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
422 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
423 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
424 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
425 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
426 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
427 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
428 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
429 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
430 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
431 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
432 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
433 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
434 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
435 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
436 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
437 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
438 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
439 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
440 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
441 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
442 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
443 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
444 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700445 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700446 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
447 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700448 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700449 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
450 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000451 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600452 patch_control_points = "VUID-vkCmdDrawIndexedIndirectCount-None-04875";
453 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04876";
454 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04877";
455 logic_op = "VUID-vkCmdDrawIndexedIndirectCount-logicOp-04878";
456 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04879";
457 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirectCount-pStrides-04884";
458 vertex_input = kVUID_Core_CmdDrawIndexedIndirectCount_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700459 }
460};
461
462struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
463 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700464 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
465 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
466 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
467 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
468 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
469 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
470 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
471 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
472 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
473 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
474 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
475 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
476 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
477 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700478 protected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700479 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700480 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
481 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
482 }
483};
484
485struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
486 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700487 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
488 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
489 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
490 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
491 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
492 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
493 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
494 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
495 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
496 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
497 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
498 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
499 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
500 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700501 protected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700502 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700503 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
504 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
505 }
506};
507
508struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
509 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700510 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
511 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
512 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
513 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
514 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700515 indirect_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
516 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
517 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700518 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
519 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
520 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
521 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
522 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
523 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
524 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
525 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
526 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700527 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700528 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
529 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
530 }
531};
532
533struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
534 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700535 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
536 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
537 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
538 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
539 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
540 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
541 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
542 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
543 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
544 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
545 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
546 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
547 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
548 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
549 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
550 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
551 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
552 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
553 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
554 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
555 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
556 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700557 rasterization_samples = "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700558 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
559 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700560 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700561 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
562 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000563 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600564 patch_control_points = "VUID-vkCmdDrawMeshTasksNV-None-04875";
565 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksNV-None-04876";
566 depth_bias_enable = "VUID-vkCmdDrawMeshTasksNV-None-04877";
567 logic_op = "VUID-vkCmdDrawMeshTasksNV-logicOp-04878";
568 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksNV-None-04879";
569 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksNV-pStrides-04884";
570 vertex_input = kVUID_Core_CmdDrawMeshTasksNV_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700571 }
572};
573
574struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
575 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700576 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
577 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
578 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
579 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
580 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
581 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
582 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
583 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
584 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
585 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
586 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
587 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
588 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
589 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
590 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
591 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
592 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
593 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
594 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
595 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
596 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
597 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
598 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
599 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
600 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700601 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700602 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
603 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700604 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700605 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
606 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000607 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600608 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04875";
609 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04876";
610 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04877";
611 logic_op = "VUID-vkCmdDrawMeshTasksIndirectNV-logicOp-04878";
612 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04879";
613 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectNV-pStrides-04884";
614 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectNV_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700615 }
616};
617
618struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
619 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700620 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
621 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
622 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
623 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
624 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
625 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
626 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
627 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
628 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
629 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
630 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
631 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
632 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
633 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
634 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
635 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
636 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
637 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
638 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
639 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
640 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
641 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
642 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
643 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
644 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700645 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700646 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
647 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700648 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700649 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
650 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000651 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600652 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04875";
653 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04876";
654 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04877";
655 logic_op = "VUID-vkCmdDrawMeshTasksIndirectCountNV-logicOp-04878";
656 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04879";
657 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectCountNV-pStrides-04884";
658 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectCountNV_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700659 }
660};
661
662struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
663 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700664 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
665 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
666 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
667 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
668 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
669 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
670 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
671 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
672 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
673 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
674 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
sfricke-samsungb091d4e2021-04-18 23:15:59 -0700675 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567",
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700676 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
677 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
678 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
679 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
680 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
681 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
682 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
683 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
684 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
685 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
686 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
687 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
688 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
689 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
690 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
691 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700692 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700693 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
694 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700695 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700696 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
697 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000698 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600699 patch_control_points = "VUID-vkCmdDrawIndirectByteCountEXT-None-04875";
700 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04876";
701 depth_bias_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04877";
702 logic_op = "VUID-vkCmdDrawIndirectByteCountEXT-logicOp-04878";
703 primitive_restart_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04879";
704 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectByteCountEXT-pStrides-04884";
705 vertex_input = kVUID_Core_CmdDrawIndirectByteCountEXT_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700706 }
707};
708
709struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
710 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700711 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700712 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700713 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
714 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
715 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
716 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
717 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
718 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
719 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
720 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
721 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
722 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
723 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
724 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
sfricke-samsunge79d0892021-06-17 08:56:22 -0700725 protected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700726 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700727 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
728 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
729 }
730};
731
732// This LUT is created to allow a static listing of each VUID that is covered by drawdispatch commands
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700733static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700734 {CMD_DRAW, DispatchVuidsCmdDraw()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600735 {CMD_DRAWMULTIEXT, DispatchVuidsCmdDrawMultiEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700736 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600737 {CMD_DRAWMULTIINDEXEDEXT, DispatchVuidsCmdDrawMultiIndexedEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700738 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
739 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
740 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
741 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
742 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
743 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
744 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
745 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
746 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
747 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
748 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
749 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
750 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
751 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700752 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700753 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700754};
755// clang-format on
756
757// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
758const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700759 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
760 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700761 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700762 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700763 }
764}
765
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700766// Generic function to handle validation for all CmdDraw* type functions
767bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700768 const char *caller) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700769 bool skip = false;
John Zulauffbf3c202019-07-17 14:57:14 -0600770 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700771 if (cb_state) {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700772 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700773 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700774 }
775 return skip;
776}
777
locke-lunarg3fa463a2020-10-23 16:39:04 -0600778bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
779 CMD_TYPE cmd_type, const char *caller) const {
780 bool skip = false;
781 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
782 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
783 if (!cb_node) return skip;
784
785 // Verify maxMultiviewInstanceIndex
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600786 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass() && enabled_features.multiview_features.multiview &&
locke-lunarg3fa463a2020-10-23 16:39:04 -0600787 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
788 LogObjectList objlist(commandBuffer);
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600789 objlist.add(cb_node->activeRenderPass->renderPass());
locke-lunarg3fa463a2020-10-23 16:39:04 -0600790 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600791 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
locke-lunarg3fa463a2020-10-23 16:39:04 -0600792 "and firstInstance: %" PRIu32 ".",
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600793 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass()).c_str(),
locke-lunarg3fa463a2020-10-23 16:39:04 -0600794 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
795 }
796 return skip;
797}
798
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700799bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500800 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600801 bool skip = false;
802 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700803 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()");
locke-lunarg3fa463a2020-10-23 16:39:04 -0600804 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700805}
806
Tony-LunarG4490de42021-06-21 15:49:19 -0600807bool CoreChecks::PreCallValidateCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
808 const VkMultiDrawInfoEXT *pVertexInfo, uint32_t instanceCount,
809 uint32_t firstInstance, uint32_t stride) const {
810 bool skip = false;
811 if (!enabled_features.multi_draw_features.multiDraw) {
812 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-None-04933",
813 "vkCmdDrawMultiEXT(): The multiDraw feature must be enabled to "
814 "call this command.");
815 }
816 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
817 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-drawCount-04934",
818 "vkCmdDrawMultiEXT(): parameter, uint32_t drawCount (%" PRIu32
819 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (%" PRIu32 ").",
820 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
821 }
822
823 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWMULTIEXT, "vkCmdDrawMultiEXT()");
824 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIEXT, "vkCmdDrawMultiEXT()");
825 return skip;
826}
827
828bool CoreChecks::ValidateCmdDrawIndexedBufferSize(VkCommandBuffer commandBuffer, uint32_t indexCount,
829 uint32_t firstIndex, const char *caller, const char *first_index_vuid) const {
830 bool skip = false;
831 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
832 if (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND) {
833 unsigned int index_size = 0;
834 const auto &index_buffer_binding = cb_state->index_buffer_binding;
835 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
836 index_size = 2;
837 }
838 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
839 index_size = 4;
840 }
841 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
842 index_size = 1;
843 }
844 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
845 if (end_offset > index_buffer_binding.size) {
846 skip |= LogError(index_buffer_binding.buffer_state->buffer(), first_index_vuid,
847 "%s: index size (%u) * (firstIndex (%u) + indexCount (%u)) "
848 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
849 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
850 caller, index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset,
851 index_buffer_binding.size);
852 }
853 }
854 return skip;
855}
856
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700857bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500858 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600859 bool skip = false;
860 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700861 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
Tony-LunarG4490de42021-06-21 15:49:19 -0600862 skip |= ValidateCmdDrawIndexedBufferSize(commandBuffer, indexCount, firstIndex, "vkCmdDrawIndexed()",
863 "VUID-vkCmdDrawIndexed-firstIndex-04932");
864 return skip;
865}
866
867bool CoreChecks::PreCallValidateCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
868 const VkMultiDrawIndexedInfoEXT *pIndexInfo, uint32_t instanceCount,
869 uint32_t firstInstance, uint32_t stride,
870 const int32_t *pVertexOffset) const {
871 bool skip = false;
872 if (!enabled_features.multi_draw_features.multiDraw) {
873 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-None-04937",
874 "vkCmdDrawMultiIndexedEXT(): The multiDraw feature must be enabled to "
875 "call this command.");
876 }
877 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
878 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939",
879 "vkCmdDrawMultiIndexedEXT(): parameter, uint32_t drawCount (0x%" PRIu32
880 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (0x%" PRIu32 ").",
881 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
882 }
883 skip |=
884 ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWMULTIINDEXEDEXT, "vkCmdDrawMultiIndexedEXT()");
885 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIINDEXEDEXT,
886 "vkCmdDrawMultiIndexedEXT()");
887 for (uint32_t i = 0; i < drawCount; i++) {
888 skip |= ValidateCmdDrawIndexedBufferSize(commandBuffer, pIndexInfo[i].indexCount, pIndexInfo[i].firstIndex,
889 "vkCmdDrawMultiIndexedEXT()", "VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700890 }
891 return skip;
892}
893
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700894bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
895 uint32_t drawCount, uint32_t stride) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700896 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600897 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700898 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700899 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600900 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
901 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700902 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
903 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
904 buffer_state);
905 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
906 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600907 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%" PRIu64 ") is not less than "
908 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700909 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600910 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700911 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
912 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
913 return skip;
914}
915
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700916bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700917 uint32_t drawCount, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700918 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700919 "vkCmdDrawIndexedIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600920 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700921 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700922 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600923 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
924 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
925 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700926 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
927 offset, buffer_state);
928 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
929 skip |= LogError(
930 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600931 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%" PRIu64 ") is not less than "
932 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700933 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600934 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700935 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
936 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
937 // 'buffer'.
938 return skip;
939}
940
Jeff Bolz5c801d12019-10-09 10:38:45 -0500941bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600942 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700943 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()");
Lockef39c0772019-04-03 14:40:02 -0600944 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700945}
946
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700947bool CoreChecks::ValidateBaseGroups(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
948 const char *apiName) const {
949 bool skip = false;
950 if (baseGroupX || baseGroupY || baseGroupZ) {
951 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
952 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
953 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
954 if (pipeline_state && !(pipeline_state->computePipelineCI.flags & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
955 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchBase-baseGroupX-00427",
956 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
957 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
958 apiName);
959 }
960 }
961 return skip;
962}
963
locke-lunarg25b6c352020-08-06 17:44:18 -0600964bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
965 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
966 uint32_t groupCountZ) const {
967 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700968 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700969 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600970 return skip;
971}
972
973bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
974 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
975 uint32_t groupCountZ) const {
976 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700977 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700978 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600979 return skip;
980}
981
Jeff Bolz5c801d12019-10-09 10:38:45 -0500982bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700983 bool skip =
984 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700985 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Tony-LunarGda555b52021-01-06 13:43:49 -0700986 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
987 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
988 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
989 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
990 "size of the buffer");
991 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700992 return skip;
993}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700994bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
995 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700996 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700997 bool skip = false;
Nathaniel Cesario7f231f12021-03-25 12:10:58 -0600998 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
999 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001000 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001001 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1002 "call this command.",
1003 apiName);
1004 }
Tony-LunarG83544c72020-01-17 12:30:19 -07001005 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
1006 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001007 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -06001008 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -07001009 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
1010 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001011 }
1012
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001013 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -06001014 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001015 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -07001016 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -07001017 skip |=
1018 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
1019 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001020 return skip;
1021}
1022
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001023bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1024 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1025 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001026 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -07001027 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001028}
1029
1030bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1031 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1032 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001033 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -07001034 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001035}
1036
1037bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1038 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -07001039 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001040 bool skip = false;
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001041 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1042 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001043 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001044 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1045 "call this command.",
1046 apiName);
1047 }
sfricke-samsungf692b972020-05-02 08:00:45 -07001048 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
1049 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001050 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -06001051 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -08001052 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -07001053 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001054 }
1055
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001056 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -06001057 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001058 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -07001059 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001060 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001061 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -08001062 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001063 return skip;
1064}
1065
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001066bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1067 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1068 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001069 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
1070 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001071}
1072
1073bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1074 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1075 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001076 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
1077 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001078}
1079
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001080bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
1081 uint32_t firstInstance, VkBuffer counterBuffer,
1082 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
1083 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001084 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001085 if (!enabled_features.transform_feedback_features.transformFeedback) {
1086 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
1087 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
1088 }
1089 if (device_extensions.vk_ext_transform_feedback && !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -08001090 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001091 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
1092 "vkCmdDrawIndirectByteCountEXT()");
1093 }
locke-lunarg3fa463a2020-10-23 16:39:04 -06001094 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
1095 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001096 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001097 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001098 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
1099 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001100}
1101
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001102bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1103 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1104 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1105 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1106 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1107 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1108 uint32_t width, uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001109 bool skip =
1110 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV, "vkCmdTraceRaysNV()");
sourav parmard1521802020-06-07 21:49:02 -07001111 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001112 auto callable_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(callableShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001113 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
1114 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
1115 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
1116 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
1117 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
1118 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001119 auto hit_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(hitShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001120 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
1121 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
1122 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
1123 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
1124 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
1125 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001126 auto miss_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(missShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001127 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
1128 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
1129 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001130 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001131 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
1132 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001133 auto raygen_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(raygenShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001134 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
1135 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
1136 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001137 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001138 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
1139 }
sourav parmarcd5fb182020-07-17 12:58:44 -07001140
sourav parmar30e19392020-12-02 16:57:21 -08001141 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
1142 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001143 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmar30e19392020-12-02 16:57:21 -08001144 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
1145 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -07001146 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001147 return skip;
1148}
1149
Jason Macnak67407e72019-07-11 11:05:09 -07001150void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1151 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1152 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1153 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1154 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1155 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1156 uint32_t width, uint32_t height, uint32_t depth) {
1157 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001158 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -07001159 cb_state->hasTraceRaysCmd = true;
1160}
1161
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001162bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001163 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1164 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1165 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1166 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001167 uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001168 bool skip =
1169 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR, "vkCmdTraceRaysKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001170 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001171 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1172 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001173 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001174 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1175 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1176 } else { // bound to valid RT pipeline
1177 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1178 if (!pHitShaderBindingTable->deviceAddress) {
1179 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1180 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1181 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1182 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1183 }
1184 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1185 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1186 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1187 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1188 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1189 "execute an intersection shader must not be set to zero.");
1190 }
1191 }
1192 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1193 if (!pHitShaderBindingTable->deviceAddress) {
1194 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1195 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1196 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1197 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1198 }
1199 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1200 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1201 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1202 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1203 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1204 "execute a closest hit shader must not be set to zero.");
1205 }
1206 }
1207 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001208 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1209 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1210 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1211 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1212 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1213 "execute an any hit shader must not be set to zero.");
1214 }
1215 }
1216 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001217 return skip;
1218}
1219
1220void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001221 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1222 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1223 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1224 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001225 uint32_t height, uint32_t depth) {
1226 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001227 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001228 cb_state->hasTraceRaysCmd = true;
1229}
1230
1231bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001232 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1233 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1234 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1235 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1236 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001237 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001238 "vkCmdTraceRaysIndirectKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001239 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001240 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1241 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001242 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001243 skip |=
1244 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1245 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1246 } else { // valid bind point
1247 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1248 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1249 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1250 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1251 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1252 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1253 }
1254 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1255 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1256 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1257 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1258 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1259 "execute an intersection shader must not be set to zero.");
1260 }
1261 }
1262 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1263 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1264 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1265 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1266 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1267 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1268 }
1269 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1270 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1271 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1272 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1273 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1274 "execute a closest hit shader must not be set to zero.");
1275 }
1276 }
1277 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001278 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1279 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1280 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1281 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1282 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1283 "execute an any hit shader must not be set to zero.");
1284 }
1285 }
1286 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001287 return skip;
1288}
1289
1290void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001291 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1292 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1293 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1294 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -07001295 VkDeviceAddress indirectDeviceAddress) {
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001296 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001297 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
1298 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001299 cb_state->hasTraceRaysCmd = true;
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001300}
1301
Jeff Bolz5c801d12019-10-09 10:38:45 -05001302bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001303 bool skip =
1304 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV, "vkCmdDrawMeshTasksNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001305 return skip;
1306}
1307
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001308bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001309 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001310 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001311 "vkCmdDrawMeshTasksIndirectNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001312 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001313 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001314 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001315 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1316 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1317 drawCount, offset, buffer_state);
1318 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001319 return skip;
1320}
1321
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001322bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1323 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001324 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001325 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001326 "vkCmdDrawMeshTasksIndirectCountNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001327 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1328 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001329 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001330 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001331 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001332 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001333 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1334 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001335 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1336 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1337 if (maxDrawCount > 1) {
1338 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1339 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1340 maxDrawCount, offset, buffer_state);
1341 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001342 return skip;
1343}