blob: 987f319aaf256d37915518ae3798d40d3c3c5e33 [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;
ziga-lunarg8d62f952021-08-30 16:47:25 +020088 blend_enable = "VUID-vkCmdDraw-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -050089 dynamic_rendering_view_mask = "VUID-vkCmdDraw-viewMask-06178";
90 dynamic_rendering_color_count = "VUID-vkCmdDraw-colorAttachmentCount-06179";
91 dynamic_rendering_color_formats = "VUID-vkCmdDraw-colorAttachmentCount-06180";
92 dynamic_rendering_depth_format = "VUID-vkCmdDraw-pDepthAttachment-06181";
93 dynamic_rendering_stencil_format = "VUID-vkCmdDraw-pStencilAttachment-06182";
94 dynamic_rendering_fsr = "VUID-vkCmdDraw-imageView-06183";
95 dynamic_rendering_fdm = "VUID-vkCmdDraw-imageView-06184";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070096 }
97};
98
Tony-LunarG4490de42021-06-21 15:49:19 -060099struct DispatchVuidsCmdDrawMultiEXT : DrawDispatchVuid {
100 DispatchVuidsCmdDrawMultiEXT() : DrawDispatchVuid() {
101 pipeline_bound = "VUID-vkCmdDrawMultiEXT-None-02700";
102 dynamic_state = "VUID-vkCmdDrawMultiEXT-commandBuffer-02701";
103 vertex_binding = "VUID-vkCmdDrawMultiEXT-None-04007";
104 vertex_binding_null = "VUID-vkCmdDrawMultiEXT-None-04008";
105 compatible_pipeline = "VUID-vkCmdDrawMultiEXT-None-02697";
106 render_pass_compatible = "VUID-vkCmdDrawMultiEXT-renderPass-02684";
107 subpass_index = "VUID-vkCmdDrawMultiEXT-subpass-02685";
108 sample_location = "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-02689";
109 linear_sampler = "VUID-vkCmdDrawMultiEXT-magFilter-04553";
110 cubic_sampler = "VUID-vkCmdDrawMultiEXT-None-02692";
111 viewport_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03417";
112 scissor_count = "VUID-vkCmdDrawMultiEXT-scissorCount-03418";
113 viewport_scissor_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03419";
114 primitive_topology = "VUID-vkCmdDrawMultiEXT-primitiveTopology-03420";
115 corner_sampled_address_mode = "VUID-vkCmdDrawMultiEXT-flags-02696";
116 subpass_input = "VUID-vkCmdDrawMultiEXT-None-02686";
117 imageview_atomic = "VUID-vkCmdDrawMultiEXT-None-02691";
118 push_constants_set = "VUID-vkCmdDrawMultiEXT-None-02698";
119 image_subresources = "VUID-vkCmdDrawMultiEXT-None-04584";
120 descriptor_valid = "VUID-vkCmdDrawMultiEXT-None-02699";
121 sampler_imageview_type = "VUID-vkCmdDrawMultiEXT-None-02702";
122 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiEXT-None-02703";
123 sampler_bias_offset = "VUID-vkCmdDrawMultiEXT-None-02704";
124 vertex_binding_attribute = "VUID-vkCmdDrawMultiEXT-None-02721";
125 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiEXT-None-02859";
126 rasterization_samples = "VUID-vkCmdDrawMultiEXT-rasterizationSamples-04740";
127 unprotected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02707";
128 protected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02712";
129 max_multiview_instance_index = "VUID-vkCmdDrawMultiEXT-maxMultiviewInstanceIndex-02688";
130 img_filter_cubic = "VUID-vkCmdDrawMultiEXT-None-02693";
131 filter_cubic = "VUID-vkCmdDrawMultiEXT-filterCubic-02694";
132 filter_cubic_min_max = "VUID-vkCmdDrawMultiEXT-filterCubicMinmax-02695";
133 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
134 patch_control_points = "VUID-vkCmdDrawMultiEXT-None-04875";
135 rasterizer_discard_enable = "VUID-vkCmdDrawMultiEXT-None-04876";
136 depth_bias_enable = "VUID-vkCmdDrawMultiEXT-None-04877";
137 logic_op = "VUID-vkCmdDrawMultiEXT-logicOp-04878";
138 primitive_restart_enable = "VUID-vkCmdDrawMultiEXT-None-04879";
139 vertex_input_binding_stride = "VUID-vkCmdDrawMultiEXT-pStrides-04884";
140 vertex_input = kVUID_Core_CmdDrawMultiEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200141 blend_enable = "VUID-vkCmdDrawMultiEXT-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500142 dynamic_rendering_view_mask = "VUID-vkCmdDrawMultiEXT-viewMask-06178";
143 dynamic_rendering_color_count = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06179";
144 dynamic_rendering_color_formats = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06180";
145 dynamic_rendering_depth_format = "VUID-vkCmdDrawMultiEXT-pDepthAttachment-06181";
146 dynamic_rendering_stencil_format = "VUID-vkCmdDrawMultiEXT-pStencilAttachment-06182";
147 dynamic_rendering_fsr = "VUID-vkCmdDrawMultiEXT-imageView-06183";
148 dynamic_rendering_fdm = "VUID-vkCmdDrawMultiEXT-imageView-06184";
Tony-LunarG4490de42021-06-21 15:49:19 -0600149 }
150};
151
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700152struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
153 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700154 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
155 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
156 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
157 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
158 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
159 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
160 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
161 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
162 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
163 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
164 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
165 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
166 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
167 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
168 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
169 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
170 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
171 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
172 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
173 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
174 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
175 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
176 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
177 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
178 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700179 rasterization_samples = "VUID-vkCmdDrawIndexed-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700180 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
181 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
182 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700183 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700184 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
185 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000186 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600187 patch_control_points = "VUID-vkCmdDrawIndexed-None-04875";
188 rasterizer_discard_enable = "VUID-vkCmdDrawIndexed-None-04876";
189 depth_bias_enable = "VUID-vkCmdDrawIndexed-None-04877";
190 logic_op = "VUID-vkCmdDrawIndexed-logicOp-04878";
191 primitive_restart_enable = "VUID-vkCmdDrawIndexed-None-04879";
192 vertex_input_binding_stride = "VUID-vkCmdDrawIndexed-pStrides-04884";
193 vertex_input = kVUID_Core_CmdDrawIndexed_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200194 blend_enable = "VUID-vkCmdDrawIndexed-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500195 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndexed-viewMask-06178";
196 dynamic_rendering_color_count = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06179";
197 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06180";
198 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndexed-pDepthAttachment-06181";
199 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndexed-pStencilAttachment-06182";
200 dynamic_rendering_fsr = "VUID-vkCmdDrawIndexed-imageView-06183";
201 dynamic_rendering_fdm = "VUID-vkCmdDrawIndexed-imageView-06184";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700202 }
203};
204
Tony-LunarG4490de42021-06-21 15:49:19 -0600205struct DispatchVuidsCmdDrawMultiIndexedEXT : DrawDispatchVuid {
206 DispatchVuidsCmdDrawMultiIndexedEXT() : DrawDispatchVuid() {
207 pipeline_bound = "VUID-vkCmdDrawMultiIndexedEXT-None-02700";
208 dynamic_state = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02701";
209 vertex_binding = "VUID-vkCmdDrawMultiIndexedEXT-None-04007";
210 vertex_binding_null = "VUID-vkCmdDrawMultiIndexedEXT-None-04008";
211 compatible_pipeline = "VUID-vkCmdDrawMultiIndexedEXT-None-02697";
212 render_pass_compatible = "VUID-vkCmdDrawMultiIndexedEXT-renderPass-02684";
213 subpass_index = "VUID-vkCmdDrawMultiIndexedEXT-subpass-02685";
214 sample_location = "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-02689";
215 linear_sampler = "VUID-vkCmdDrawMultiIndexedEXT-magFilter-04553";
216 cubic_sampler = "VUID-vkCmdDrawMultiIndexedEXT-None-02692";
217 viewport_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03417";
218 scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-scissorCount-03418";
219 viewport_scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03419";
220 primitive_topology = "VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-03420";
221 corner_sampled_address_mode = "VUID-vkCmdDrawMultiIndexedEXT-flags-02696";
222 subpass_input = "VUID-vkCmdDrawMultiIndexedEXT-None-02686";
223 imageview_atomic = "VUID-vkCmdDrawMultiIndexedEXT-None-02691";
224 push_constants_set = "VUID-vkCmdDrawMultiIndexedEXT-None-02698";
225 image_subresources = "VUID-vkCmdDrawMultiIndexedEXT-None-04584";
226 descriptor_valid = "VUID-vkCmdDrawMultiIndexedEXT-None-02699";
227 sampler_imageview_type = "VUID-vkCmdDrawMultiIndexedEXT-None-02702";
228 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiIndexedEXT-None-02703";
229 sampler_bias_offset = "VUID-vkCmdDrawMultiIndexedEXT-None-02704";
230 vertex_binding_attribute = "VUID-vkCmdDrawMultiIndexedEXT-None-02721";
231 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiIndexedEXT-None-02859";
232 rasterization_samples = "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-04740";
233 unprotected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02707";
234 protected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712";
235 max_multiview_instance_index = "VUID-vkCmdDrawMultiIndexedEXT-maxMultiviewInstanceIndex-02688";
236 img_filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-None-02693";
237 filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-filterCubic-02694";
238 filter_cubic_min_max = "VUID-vkCmdDrawMultiIndexedEXT-filterCubicMinmax-02695";
239 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
240 patch_control_points = "VUID-vkCmdDrawMultiIndexedEXT-None-04875";
241 rasterizer_discard_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04876";
242 depth_bias_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04877";
243 logic_op = "VUID-vkCmdDrawMultiIndexedEXT-logicOp-04878";
244 primitive_restart_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04879";
245 vertex_input_binding_stride = "VUID-vkCmdDrawMultiIndexedEXT-pStrides-04884";
246 vertex_input = kVUID_Core_CmdDrawMultiIndexedEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200247 blend_enable = "VUID-vkCmdDrawMultiIndexedEXT-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500248 dynamic_rendering_view_mask = "VUID-vkCmdDrawMultiIndexedEXT-viewMask-06178";
249 dynamic_rendering_color_count = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06179";
250 dynamic_rendering_color_formats = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06180";
251 dynamic_rendering_depth_format = "VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06181";
252 dynamic_rendering_stencil_format = "VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-06182";
253 dynamic_rendering_fsr = "VUID-vkCmdDrawMultiIndexedEXT-imageView-06183";
254 dynamic_rendering_fdm = "VUID-vkCmdDrawMultiIndexedEXT-imageView-06184";
Tony-LunarG4490de42021-06-21 15:49:19 -0600255 }
256};
257
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700258struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
259 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700260 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
261 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
262 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
263 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
264 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
265 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
266 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
267 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
268 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
269 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
270 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
271 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
272 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
273 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
274 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
275 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
276 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
277 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
278 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
279 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
280 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
281 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
282 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
283 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
284 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
285 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
286 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
287 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700288 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700289 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
290 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700291 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700292 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
293 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000294 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600295 patch_control_points = "VUID-vkCmdDrawIndirect-None-04875";
296 rasterizer_discard_enable = "VUID-vkCmdDrawIndirect-None-04876";
297 depth_bias_enable = "VUID-vkCmdDrawIndirect-None-04877";
298 logic_op = "VUID-vkCmdDrawIndirect-logicOp-04878";
299 primitive_restart_enable = "VUID-vkCmdDrawIndirect-None-04879";
300 vertex_input_binding_stride = "VUID-vkCmdDrawIndirect-pStrides-04884";
301 vertex_input = kVUID_Core_CmdDrawIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200302 blend_enable = "VUID-vkCmdDrawIndirect-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500303 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndirect-viewMask-06178";
304 dynamic_rendering_color_count = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06179";
305 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06180";
306 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndirect-pDepthAttachment-06181";
307 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndirect-pStencilAttachment-06182";
308 dynamic_rendering_fsr = "VUID-vkCmdDrawIndirect-imageView-06183";
309 dynamic_rendering_fdm = "VUID-vkCmdDrawIndirect-imageView-06184";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700310 }
311};
312
313struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
314 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700315 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
316 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
317 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
318 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
319 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
320 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
321 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
322 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
323 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
324 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
325 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
326 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
327 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
328 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
329 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
330 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
331 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
332 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
333 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
334 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
335 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
336 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
337 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
338 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
339 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
340 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
341 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
342 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700343 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700344 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
345 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700346 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700347 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
348 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000349 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600350 patch_control_points = "VUID-vkCmdDrawIndexedIndirect-None-04875";
351 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirect-None-04876";
352 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirect-None-04877";
353 logic_op = "VUID-vkCmdDrawIndexedIndirect-logicOp-04878";
354 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirect-None-04879";
355 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirect-pStrides-04884";
356 vertex_input = kVUID_Core_CmdDrawIndexedIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200357 blend_enable = "VUID-vkCmdDrawIndexedIndirect-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500358 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndexedIndirect-viewMask-06178";
359 dynamic_rendering_color_count = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06179";
360 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06180";
361 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06181";
362 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06182";
363 dynamic_rendering_fsr = "VUID-vkCmdDrawIndexedIndirect-imageView-06183";
364 dynamic_rendering_fdm = "VUID-vkCmdDrawIndexedIndirect-imageView-06184";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700365 }
366};
367
368struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
369 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700370 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700371 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700372 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
373 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
374 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
375 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
376 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
377 push_constants_set = "VUID-vkCmdDispatch-None-02698";
378 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
379 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
380 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
381 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
382 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
383 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
384 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700385 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700386 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
387 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
388 }
389};
390
391struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
392 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700393 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700394 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700395 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
396 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
397 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
398 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
399 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
400 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
401 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
402 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
403 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
404 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
405 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
406 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
407 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
408 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
409 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700410 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700411 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
412 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
413 }
414};
415
416struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
417 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700418 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
419 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
420 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
421 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
422 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
423 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
424 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
425 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
426 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
427 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
428 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
429 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
430 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
431 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
432 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
433 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
434 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
435 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
436 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
437 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
438 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
439 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
440 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
441 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
442 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
443 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
444 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
445 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700446 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700447 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
448 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700449 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700450 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
451 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000452 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600453 patch_control_points = "VUID-vkCmdDrawIndirectCount-None-04875";
454 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectCount-None-04876";
455 depth_bias_enable = "VUID-vkCmdDrawIndirectCount-None-04877";
456 logic_op = "VUID-vkCmdDrawIndirectCount-logicOp-04878";
457 primitive_restart_enable = "VUID-vkCmdDrawIndirectCount-None-04879";
458 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectCount-pStrides-04884";
459 vertex_input = kVUID_Core_CmdDrawIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200460 blend_enable = "VUID-vkCmdDrawIndirectCount-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700461 }
462};
463
464struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
465 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700466 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
467 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
468 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
469 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
470 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
471 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
472 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
473 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
474 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
475 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
476 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
477 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
478 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
479 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
480 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
481 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
482 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
483 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
484 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
485 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
486 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
487 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
488 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
489 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
490 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
491 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
492 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
493 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700494 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700495 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
496 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700497 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700498 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
499 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000500 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600501 patch_control_points = "VUID-vkCmdDrawIndexedIndirectCount-None-04875";
502 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04876";
503 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04877";
504 logic_op = "VUID-vkCmdDrawIndexedIndirectCount-logicOp-04878";
505 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04879";
506 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirectCount-pStrides-04884";
507 vertex_input = kVUID_Core_CmdDrawIndexedIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200508 blend_enable = "VUID-vkCmdDrawIndexedIndirectCount-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700509 }
510};
511
512struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
513 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700514 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
515 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
516 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
517 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
518 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
519 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
520 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
521 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
522 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
523 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
524 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
525 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
526 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
527 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700528 ray_query_protected_cb = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700529 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700530 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
531 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
532 }
533};
534
535struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
536 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700537 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
538 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
539 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
540 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
541 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
542 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
543 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
544 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
545 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
546 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
547 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
548 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
549 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
550 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700551 ray_query_protected_cb = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700552 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700553 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
554 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
555 }
556};
557
558struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
559 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700560 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
561 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
562 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
563 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
564 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700565 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
566 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700567 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
568 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
569 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
570 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
571 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
572 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
573 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
574 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
575 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700576 ray_query_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700577 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700578 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
579 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
580 }
581};
582
583struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
584 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700585 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
586 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
587 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
588 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
589 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
590 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
591 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
592 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
593 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
594 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
595 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
596 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
597 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
598 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
599 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
600 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
601 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
602 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
603 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
604 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
605 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
606 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700607 rasterization_samples = "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700608 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
609 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700610 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700611 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
612 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000613 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600614 patch_control_points = "VUID-vkCmdDrawMeshTasksNV-None-04875";
615 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksNV-None-04876";
616 depth_bias_enable = "VUID-vkCmdDrawMeshTasksNV-None-04877";
617 logic_op = "VUID-vkCmdDrawMeshTasksNV-logicOp-04878";
618 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksNV-None-04879";
619 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksNV-pStrides-04884";
620 vertex_input = kVUID_Core_CmdDrawMeshTasksNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200621 blend_enable = "VUID-vkCmdDrawMeshTasksNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700622 }
623};
624
625struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
626 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700627 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
628 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
629 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
630 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
631 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
632 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
633 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
634 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
635 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
636 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
637 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
638 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
639 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
640 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
641 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
642 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
643 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
644 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
645 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
646 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
647 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
648 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
649 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
650 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
651 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700652 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700653 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
654 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700655 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700656 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
657 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000658 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600659 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04875";
660 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04876";
661 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04877";
662 logic_op = "VUID-vkCmdDrawMeshTasksIndirectNV-logicOp-04878";
663 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04879";
664 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectNV-pStrides-04884";
665 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200666 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700667 }
668};
669
670struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
671 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700672 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
673 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
674 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
675 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
676 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
677 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
678 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
679 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
680 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
681 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
682 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
683 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
684 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
685 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
686 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
687 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
688 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
689 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
690 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
691 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
692 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
693 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
694 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
695 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
696 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700697 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700698 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
699 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700700 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700701 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
702 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000703 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600704 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04875";
705 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04876";
706 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04877";
707 logic_op = "VUID-vkCmdDrawMeshTasksIndirectCountNV-logicOp-04878";
708 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04879";
709 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectCountNV-pStrides-04884";
710 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectCountNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200711 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700712 }
713};
714
715struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
716 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700717 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
718 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
719 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
720 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
721 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
722 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
723 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
724 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
725 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
726 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
727 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
sfricke-samsungb091d4e2021-04-18 23:15:59 -0700728 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567",
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700729 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
730 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
731 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
732 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
733 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
734 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
735 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
736 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
737 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
738 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
739 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
740 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
741 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
742 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
743 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
744 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700745 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700746 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
747 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700748 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700749 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
750 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000751 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600752 patch_control_points = "VUID-vkCmdDrawIndirectByteCountEXT-None-04875";
753 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04876";
754 depth_bias_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04877";
755 logic_op = "VUID-vkCmdDrawIndirectByteCountEXT-logicOp-04878";
756 primitive_restart_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04879";
757 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectByteCountEXT-pStrides-04884";
758 vertex_input = kVUID_Core_CmdDrawIndirectByteCountEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200759 blend_enable = "VUID-vkCmdDrawIndirectByteCountEXT-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700760 }
761};
762
763struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
764 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700765 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700766 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700767 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
768 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
769 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
770 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
771 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
772 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
773 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
774 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
775 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
776 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
777 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
778 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
sfricke-samsunge79d0892021-06-17 08:56:22 -0700779 protected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700780 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700781 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
782 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
783 }
784};
785
786// 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 -0700787static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700788 {CMD_DRAW, DispatchVuidsCmdDraw()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600789 {CMD_DRAWMULTIEXT, DispatchVuidsCmdDrawMultiEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700790 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600791 {CMD_DRAWMULTIINDEXEDEXT, DispatchVuidsCmdDrawMultiIndexedEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700792 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
793 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
794 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
795 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
796 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700797 {CMD_DRAWINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700798 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700799 {CMD_DRAWINDEXEDINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndexedIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700800 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
801 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
802 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
803 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
804 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
805 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
806 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
807 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700808 {CMD_DISPATCHBASEKHR, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700809 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700810 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700811};
812// clang-format on
813
814// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
815const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700816 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
817 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700818 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700819 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700820 }
821}
822
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700823// Generic function to handle validation for all CmdDraw* type functions
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700824bool CoreChecks::ValidateCmdDrawType(const CMD_BUFFER_STATE &cb_state, bool indexed, VkPipelineBindPoint bind_point,
sfricke-samsung85584a72021-09-30 21:43:38 -0700825 CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700826 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700827 skip |= ValidateCmd(&cb_state, cmd_type);
828 skip |= ValidateCmdBufDrawState(&cb_state, cmd_type, indexed, bind_point);
829 skip |= ValidateCmdRayQueryState(&cb_state, cmd_type, bind_point);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700830 return skip;
831}
832
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700833bool CoreChecks::ValidateCmdDrawInstance(const CMD_BUFFER_STATE &cb_node, uint32_t instanceCount, uint32_t firstInstance,
sfricke-samsung85584a72021-09-30 21:43:38 -0700834 CMD_TYPE cmd_type) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600835 bool skip = false;
836 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
sfricke-samsung85584a72021-09-30 21:43:38 -0700837 const char *caller = CommandTypeString(cmd_type);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600838
839 // Verify maxMultiviewInstanceIndex
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700840 if (cb_node.activeRenderPass && cb_node.activeRenderPass->renderPass() && enabled_features.multiview_features.multiview &&
locke-lunarg3fa463a2020-10-23 16:39:04 -0600841 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700842 LogObjectList objlist(cb_node.Handle());
843 objlist.add(cb_node.activeRenderPass->Handle());
locke-lunarg3fa463a2020-10-23 16:39:04 -0600844 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700845 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32
846 ", but instanceCount: %" PRIu32 "and firstInstance: %" PRIu32 ".",
847 caller, report_data->FormatHandle(cb_node.activeRenderPass->Handle()).c_str(),
locke-lunarg3fa463a2020-10-23 16:39:04 -0600848 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
849 }
850 return skip;
851}
852
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700853bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500854 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600855 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700856 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
857 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAW);
858 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600859 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700860}
861
Tony-LunarG4490de42021-06-21 15:49:19 -0600862bool CoreChecks::PreCallValidateCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
863 const VkMultiDrawInfoEXT *pVertexInfo, uint32_t instanceCount,
864 uint32_t firstInstance, uint32_t stride) const {
865 bool skip = false;
866 if (!enabled_features.multi_draw_features.multiDraw) {
867 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-None-04933",
868 "vkCmdDrawMultiEXT(): The multiDraw feature must be enabled to "
869 "call this command.");
870 }
871 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
872 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-drawCount-04934",
873 "vkCmdDrawMultiEXT(): parameter, uint32_t drawCount (%" PRIu32
874 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (%" PRIu32 ").",
875 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
876 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700877 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
878 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIEXT);
879 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIEXT);
Tony-LunarG4490de42021-06-21 15:49:19 -0600880 return skip;
881}
882
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700883bool CoreChecks::ValidateCmdDrawIndexedBufferSize(const CMD_BUFFER_STATE &cb_state, uint32_t indexCount, uint32_t firstIndex,
884 const char *caller, const char *first_index_vuid) const {
Tony-LunarG4490de42021-06-21 15:49:19 -0600885 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700886 if (cb_state.status & CBSTATUS_INDEX_BUFFER_BOUND) {
Tony-LunarG4490de42021-06-21 15:49:19 -0600887 unsigned int index_size = 0;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700888 const auto &index_buffer_binding = cb_state.index_buffer_binding;
Tony-LunarG4490de42021-06-21 15:49:19 -0600889 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
890 index_size = 2;
891 }
892 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
893 index_size = 4;
894 }
895 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
896 index_size = 1;
897 }
898 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
899 if (end_offset > index_buffer_binding.size) {
900 skip |= LogError(index_buffer_binding.buffer_state->buffer(), first_index_vuid,
901 "%s: index size (%u) * (firstIndex (%u) + indexCount (%u)) "
902 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
903 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
904 caller, index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset,
905 index_buffer_binding.size);
906 }
907 }
908 return skip;
909}
910
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700911bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500912 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600913 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700914 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
915 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDEXED);
916 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED);
917 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, indexCount, firstIndex, "vkCmdDrawIndexed()",
Tony-LunarG4490de42021-06-21 15:49:19 -0600918 "VUID-vkCmdDrawIndexed-firstIndex-04932");
919 return skip;
920}
921
922bool CoreChecks::PreCallValidateCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
923 const VkMultiDrawIndexedInfoEXT *pIndexInfo, uint32_t instanceCount,
924 uint32_t firstInstance, uint32_t stride,
925 const int32_t *pVertexOffset) const {
926 bool skip = false;
927 if (!enabled_features.multi_draw_features.multiDraw) {
928 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-None-04937",
929 "vkCmdDrawMultiIndexedEXT(): The multiDraw feature must be enabled to "
930 "call this command.");
931 }
932 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
933 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939",
934 "vkCmdDrawMultiIndexedEXT(): parameter, uint32_t drawCount (0x%" PRIu32
935 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (0x%" PRIu32 ").",
936 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
937 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700938 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
939 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIINDEXEDEXT);
940 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIINDEXEDEXT);
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200941 const auto info_bytes = reinterpret_cast<const char *>(pIndexInfo);
Tony-LunarG4490de42021-06-21 15:49:19 -0600942 for (uint32_t i = 0; i < drawCount; i++) {
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200943 const auto info_ptr = reinterpret_cast<const VkMultiDrawIndexedInfoEXT *>(info_bytes + i * stride);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700944 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, info_ptr->indexCount, info_ptr->firstIndex,
Tony-LunarG4490de42021-06-21 15:49:19 -0600945 "vkCmdDrawMultiIndexedEXT()", "VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700946 }
947 return skip;
948}
949
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700950bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
951 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700952 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
953 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -0600954 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700955 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700956 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600957 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
958 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700959 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
960 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
961 buffer_state);
962 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
963 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600964 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%" PRIu64 ") is not less than "
965 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700966 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600967 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700968 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
969 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
970 return skip;
971}
972
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700973bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700974 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700975 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
976 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -0600977 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700978 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDEXEDINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700979 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600980 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
981 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
982 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700983 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
984 offset, buffer_state);
985 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
986 skip |= LogError(
987 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600988 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%" PRIu64 ") is not less than "
989 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700990 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600991 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700992 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
993 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
994 // 'buffer'.
995 return skip;
996}
997
Jeff Bolz5c801d12019-10-09 10:38:45 -0500998bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600999 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001000 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1001 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH);
Lockef39c0772019-04-03 14:40:02 -06001002 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001003}
1004
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001005bool CoreChecks::ValidateBaseGroups(const CMD_BUFFER_STATE &cb_state, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001006 const char *apiName) const {
1007 bool skip = false;
1008 if (baseGroupX || baseGroupY || baseGroupZ) {
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001009 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001010 const auto *pipeline_state = cb_state.lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben11af9792021-08-20 10:20:09 -06001011 if (pipeline_state && !(pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001012 skip |= LogError(cb_state.Handle(), "VUID-vkCmdDispatchBase-baseGroupX-00427",
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001013 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
1014 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
1015 apiName);
1016 }
1017 }
1018 return skip;
1019}
1020
locke-lunarg25b6c352020-08-06 17:44:18 -06001021bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
1022 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
1023 uint32_t groupCountZ) const {
1024 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001025 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1026 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE);
1027 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -06001028 return skip;
1029}
1030
1031bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
1032 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
1033 uint32_t groupCountZ) const {
1034 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001035 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1036 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASEKHR);
1037 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -06001038 return skip;
1039}
1040
Jeff Bolz5c801d12019-10-09 10:38:45 -05001041bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001042 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1043 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001044 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001045 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DISPATCHINDIRECT);
Tony-LunarGda555b52021-01-06 13:43:49 -07001046 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
1047 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
1048 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
1049 "size of the buffer");
1050 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001051 return skip;
1052}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001053bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1054 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001055 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001056 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001057 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001058 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1059 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001060 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001061 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1062 "call this command.",
1063 apiName);
1064 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001065 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride,
1066 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001067 if (maxDrawCount > 1) {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001068 const auto buffer_state = Get<BUFFER_STATE>(buffer);
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001069 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride,
1070 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), maxDrawCount, offset,
1071 buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001072 }
1073
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001074 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1075 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1076 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1077 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001078 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Tony-LunarG83544c72020-01-17 12:30:19 -07001079 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -07001080 skip |=
1081 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
1082 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001083 return skip;
1084}
1085
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001086bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1087 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1088 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001089 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001090 CMD_DRAWINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001091}
1092
1093bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1094 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1095 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001096 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001097 CMD_DRAWINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001098}
1099
1100bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1101 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001102 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001103 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001104 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001105 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1106 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001107 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001108 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1109 "call this command.",
1110 apiName);
1111 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001112 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride,
1113 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001114 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Lockee68ac652019-05-06 10:17:33 -06001115 if (maxDrawCount > 1) {
Mike Schuchardt65847d92019-12-20 13:50:47 -08001116 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001117 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), maxDrawCount,
1118 offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001119 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001120 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1121 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1122 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001123 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
sfricke-samsungf692b972020-05-02 08:00:45 -07001124 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001125 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001126 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -08001127 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001128 return skip;
1129}
1130
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001131bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1132 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1133 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001134 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001135 CMD_DRAWINDEXEDINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001136}
1137
1138bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1139 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1140 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001141 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001142 CMD_DRAWINDEXEDINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001143}
1144
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001145bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
1146 uint32_t firstInstance, VkBuffer counterBuffer,
1147 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
1148 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001149 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001150 if (!enabled_features.transform_feedback_features.transformFeedback) {
1151 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
1152 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
1153 }
sfricke-samsung45996a42021-09-16 13:45:27 -07001154 if (IsExtEnabled(device_extensions.vk_ext_transform_feedback) &&
1155 !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -08001156 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001157 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
1158 "vkCmdDrawIndirectByteCountEXT()");
1159 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001160 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1161 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT);
1162 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT);
1163 const auto counter_buffer_state = Get<BUFFER_STATE>(counterBuffer);
1164 skip |= ValidateIndirectCmd(*cb_state, *counter_buffer_state, CMD_DRAWINDIRECTBYTECOUNTEXT);
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001165 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001166}
1167
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001168bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1169 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1170 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1171 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1172 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1173 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1174 uint32_t width, uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001175 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001176 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001177 auto callable_shader_buffer_state = Get<BUFFER_STATE>(callableShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001178 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
1179 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
1180 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
1181 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
1182 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
1183 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001184 auto hit_shader_buffer_state = Get<BUFFER_STATE>(hitShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001185 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
1186 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
1187 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
1188 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
1189 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
1190 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001191 auto miss_shader_buffer_state = Get<BUFFER_STATE>(missShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001192 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
1193 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
1194 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001195 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001196 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
1197 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001198 auto raygen_shader_buffer_state = Get<BUFFER_STATE>(raygenShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001199 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
1200 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
1201 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001202 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001203 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
1204 }
sourav parmarcd5fb182020-07-17 12:58:44 -07001205
sourav parmar30e19392020-12-02 16:57:21 -08001206 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
1207 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001208 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmar30e19392020-12-02 16:57:21 -08001209 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
1210 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -07001211 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001212 return skip;
1213}
1214
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001215bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001216 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1217 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1218 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1219 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001220 uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001221 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001222 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001223 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1224 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001225 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001226 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1227 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1228 } else { // bound to valid RT pipeline
Jeremy Gebben11af9792021-08-20 10:20:09 -06001229 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001230 if (!pHitShaderBindingTable->deviceAddress) {
1231 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1232 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1233 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1234 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1235 }
1236 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1237 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1238 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1239 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1240 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1241 "execute an intersection shader must not be set to zero.");
1242 }
1243 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001244 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001245 if (!pHitShaderBindingTable->deviceAddress) {
1246 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1247 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1248 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1249 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1250 }
1251 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1252 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1253 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1254 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1255 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1256 "execute a closest hit shader must not be set to zero.");
1257 }
1258 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001259 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001260 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1261 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1262 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1263 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1264 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1265 "execute an any hit shader must not be set to zero.");
1266 }
1267 }
1268 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001269 return skip;
1270}
1271
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001272bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001273 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1274 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1275 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1276 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1277 VkDeviceAddress indirectDeviceAddress) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001278 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001279 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001280 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001281 const auto *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001282 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001283 skip |=
1284 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1285 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1286 } else { // valid bind point
Jeremy Gebben11af9792021-08-20 10:20:09 -06001287 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001288 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1289 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1290 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1291 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1292 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1293 }
1294 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1295 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1296 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1297 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1298 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1299 "execute an intersection shader must not be set to zero.");
1300 }
1301 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001302 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001303 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1304 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1305 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1306 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1307 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1308 }
1309 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1310 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1311 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1312 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1313 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1314 "execute a closest hit shader must not be set to zero.");
1315 }
1316 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001317 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001318 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1319 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1320 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1321 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1322 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1323 "execute an any hit shader must not be set to zero.");
1324 }
1325 }
1326 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001327 return skip;
1328}
1329
Jeff Bolz5c801d12019-10-09 10:38:45 -05001330bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001331 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1332 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001333 return skip;
1334}
1335
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001336bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001337 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001338 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1339 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001340 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001341 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTNV);
Lockee68ac652019-05-06 10:17:33 -06001342 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001343 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1344 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1345 drawCount, offset, buffer_state);
1346 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001347 return skip;
1348}
1349
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001350bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1351 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001352 uint32_t maxDrawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001353 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1354 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001355 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1356 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001357 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001358 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001359 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001360 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001361 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1362 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001363 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1364 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1365 if (maxDrawCount > 1) {
1366 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1367 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1368 maxDrawCount, offset, buffer_state);
1369 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001370 return skip;
1371}