blob: dc5556215d40c50ab20ccdf54fdd4e493b978abc [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";
Piers Daniella7f93b62021-11-20 12:32:04 -070065 push_constants_set = "VUID-vkCmdDraw-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070066 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";
Aaron Hagan09a0e172021-11-19 21:18:33 -050096 dynamic_rendering_color_sample = "VUID-vkCmdDraw-colorAttachmentCount-06185";
97 dynamic_rendering_depth_sample = "VUID-vkCmdDraw-pDepthAttachment-06186";
98 dynamic_rendering_stencil_sample = "VUID-vkCmdDraw-pStencilAttachment-06187";
99 dynamic_rendering_multi_sample = "VUID-vkCmdDraw-colorAttachmentCount-06188";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700100 }
101};
102
Tony-LunarG4490de42021-06-21 15:49:19 -0600103struct DispatchVuidsCmdDrawMultiEXT : DrawDispatchVuid {
104 DispatchVuidsCmdDrawMultiEXT() : DrawDispatchVuid() {
105 pipeline_bound = "VUID-vkCmdDrawMultiEXT-None-02700";
106 dynamic_state = "VUID-vkCmdDrawMultiEXT-commandBuffer-02701";
107 vertex_binding = "VUID-vkCmdDrawMultiEXT-None-04007";
108 vertex_binding_null = "VUID-vkCmdDrawMultiEXT-None-04008";
109 compatible_pipeline = "VUID-vkCmdDrawMultiEXT-None-02697";
110 render_pass_compatible = "VUID-vkCmdDrawMultiEXT-renderPass-02684";
111 subpass_index = "VUID-vkCmdDrawMultiEXT-subpass-02685";
112 sample_location = "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-02689";
113 linear_sampler = "VUID-vkCmdDrawMultiEXT-magFilter-04553";
114 cubic_sampler = "VUID-vkCmdDrawMultiEXT-None-02692";
115 viewport_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03417";
116 scissor_count = "VUID-vkCmdDrawMultiEXT-scissorCount-03418";
117 viewport_scissor_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03419";
118 primitive_topology = "VUID-vkCmdDrawMultiEXT-primitiveTopology-03420";
119 corner_sampled_address_mode = "VUID-vkCmdDrawMultiEXT-flags-02696";
120 subpass_input = "VUID-vkCmdDrawMultiEXT-None-02686";
121 imageview_atomic = "VUID-vkCmdDrawMultiEXT-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700122 push_constants_set = "VUID-vkCmdDrawMultiEXT-maintenance4-06425";
Tony-LunarG4490de42021-06-21 15:49:19 -0600123 image_subresources = "VUID-vkCmdDrawMultiEXT-None-04584";
124 descriptor_valid = "VUID-vkCmdDrawMultiEXT-None-02699";
125 sampler_imageview_type = "VUID-vkCmdDrawMultiEXT-None-02702";
126 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiEXT-None-02703";
127 sampler_bias_offset = "VUID-vkCmdDrawMultiEXT-None-02704";
128 vertex_binding_attribute = "VUID-vkCmdDrawMultiEXT-None-02721";
129 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiEXT-None-02859";
130 rasterization_samples = "VUID-vkCmdDrawMultiEXT-rasterizationSamples-04740";
131 unprotected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02707";
132 protected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02712";
133 max_multiview_instance_index = "VUID-vkCmdDrawMultiEXT-maxMultiviewInstanceIndex-02688";
134 img_filter_cubic = "VUID-vkCmdDrawMultiEXT-None-02693";
135 filter_cubic = "VUID-vkCmdDrawMultiEXT-filterCubic-02694";
136 filter_cubic_min_max = "VUID-vkCmdDrawMultiEXT-filterCubicMinmax-02695";
137 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
138 patch_control_points = "VUID-vkCmdDrawMultiEXT-None-04875";
139 rasterizer_discard_enable = "VUID-vkCmdDrawMultiEXT-None-04876";
140 depth_bias_enable = "VUID-vkCmdDrawMultiEXT-None-04877";
141 logic_op = "VUID-vkCmdDrawMultiEXT-logicOp-04878";
142 primitive_restart_enable = "VUID-vkCmdDrawMultiEXT-None-04879";
143 vertex_input_binding_stride = "VUID-vkCmdDrawMultiEXT-pStrides-04884";
144 vertex_input = kVUID_Core_CmdDrawMultiEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200145 blend_enable = "VUID-vkCmdDrawMultiEXT-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500146 dynamic_rendering_view_mask = "VUID-vkCmdDrawMultiEXT-viewMask-06178";
147 dynamic_rendering_color_count = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06179";
148 dynamic_rendering_color_formats = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06180";
149 dynamic_rendering_depth_format = "VUID-vkCmdDrawMultiEXT-pDepthAttachment-06181";
150 dynamic_rendering_stencil_format = "VUID-vkCmdDrawMultiEXT-pStencilAttachment-06182";
151 dynamic_rendering_fsr = "VUID-vkCmdDrawMultiEXT-imageView-06183";
152 dynamic_rendering_fdm = "VUID-vkCmdDrawMultiEXT-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500153 dynamic_rendering_color_sample = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06185";
154 dynamic_rendering_depth_sample = "VUID-vkCmdDrawMultiEXT-pDepthAttachment-06186";
155 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawMultiEXT-pStencilAttachment-06187";
156 dynamic_rendering_multi_sample = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06188";
Tony-LunarG4490de42021-06-21 15:49:19 -0600157 }
158};
159
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700160struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
161 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700162 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
163 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
164 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
165 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
166 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
167 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
168 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
169 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
170 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
171 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
172 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
173 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
174 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
175 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
176 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
177 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
178 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700179 push_constants_set = "VUID-vkCmdDrawIndexed-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700180 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
181 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
182 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
183 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
184 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
185 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
186 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700187 rasterization_samples = "VUID-vkCmdDrawIndexed-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700188 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
189 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
190 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700191 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700192 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
193 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000194 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600195 patch_control_points = "VUID-vkCmdDrawIndexed-None-04875";
196 rasterizer_discard_enable = "VUID-vkCmdDrawIndexed-None-04876";
197 depth_bias_enable = "VUID-vkCmdDrawIndexed-None-04877";
198 logic_op = "VUID-vkCmdDrawIndexed-logicOp-04878";
199 primitive_restart_enable = "VUID-vkCmdDrawIndexed-None-04879";
200 vertex_input_binding_stride = "VUID-vkCmdDrawIndexed-pStrides-04884";
201 vertex_input = kVUID_Core_CmdDrawIndexed_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200202 blend_enable = "VUID-vkCmdDrawIndexed-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500203 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndexed-viewMask-06178";
204 dynamic_rendering_color_count = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06179";
205 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06180";
206 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndexed-pDepthAttachment-06181";
207 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndexed-pStencilAttachment-06182";
208 dynamic_rendering_fsr = "VUID-vkCmdDrawIndexed-imageView-06183";
209 dynamic_rendering_fdm = "VUID-vkCmdDrawIndexed-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500210 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06185";
211 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndexed-pDepthAttachment-06186";
212 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndexed-pStencilAttachment-06187";
213 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06188";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700214 }
215};
216
Tony-LunarG4490de42021-06-21 15:49:19 -0600217struct DispatchVuidsCmdDrawMultiIndexedEXT : DrawDispatchVuid {
218 DispatchVuidsCmdDrawMultiIndexedEXT() : DrawDispatchVuid() {
219 pipeline_bound = "VUID-vkCmdDrawMultiIndexedEXT-None-02700";
220 dynamic_state = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02701";
221 vertex_binding = "VUID-vkCmdDrawMultiIndexedEXT-None-04007";
222 vertex_binding_null = "VUID-vkCmdDrawMultiIndexedEXT-None-04008";
223 compatible_pipeline = "VUID-vkCmdDrawMultiIndexedEXT-None-02697";
224 render_pass_compatible = "VUID-vkCmdDrawMultiIndexedEXT-renderPass-02684";
225 subpass_index = "VUID-vkCmdDrawMultiIndexedEXT-subpass-02685";
226 sample_location = "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-02689";
227 linear_sampler = "VUID-vkCmdDrawMultiIndexedEXT-magFilter-04553";
228 cubic_sampler = "VUID-vkCmdDrawMultiIndexedEXT-None-02692";
229 viewport_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03417";
230 scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-scissorCount-03418";
231 viewport_scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03419";
232 primitive_topology = "VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-03420";
233 corner_sampled_address_mode = "VUID-vkCmdDrawMultiIndexedEXT-flags-02696";
234 subpass_input = "VUID-vkCmdDrawMultiIndexedEXT-None-02686";
235 imageview_atomic = "VUID-vkCmdDrawMultiIndexedEXT-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700236 push_constants_set = "VUID-vkCmdDrawMultiIndexedEXT-maintenance4-06425";
Tony-LunarG4490de42021-06-21 15:49:19 -0600237 image_subresources = "VUID-vkCmdDrawMultiIndexedEXT-None-04584";
238 descriptor_valid = "VUID-vkCmdDrawMultiIndexedEXT-None-02699";
239 sampler_imageview_type = "VUID-vkCmdDrawMultiIndexedEXT-None-02702";
240 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiIndexedEXT-None-02703";
241 sampler_bias_offset = "VUID-vkCmdDrawMultiIndexedEXT-None-02704";
242 vertex_binding_attribute = "VUID-vkCmdDrawMultiIndexedEXT-None-02721";
243 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiIndexedEXT-None-02859";
244 rasterization_samples = "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-04740";
245 unprotected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02707";
246 protected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712";
247 max_multiview_instance_index = "VUID-vkCmdDrawMultiIndexedEXT-maxMultiviewInstanceIndex-02688";
248 img_filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-None-02693";
249 filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-filterCubic-02694";
250 filter_cubic_min_max = "VUID-vkCmdDrawMultiIndexedEXT-filterCubicMinmax-02695";
251 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
252 patch_control_points = "VUID-vkCmdDrawMultiIndexedEXT-None-04875";
253 rasterizer_discard_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04876";
254 depth_bias_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04877";
255 logic_op = "VUID-vkCmdDrawMultiIndexedEXT-logicOp-04878";
256 primitive_restart_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04879";
257 vertex_input_binding_stride = "VUID-vkCmdDrawMultiIndexedEXT-pStrides-04884";
258 vertex_input = kVUID_Core_CmdDrawMultiIndexedEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200259 blend_enable = "VUID-vkCmdDrawMultiIndexedEXT-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500260 dynamic_rendering_view_mask = "VUID-vkCmdDrawMultiIndexedEXT-viewMask-06178";
261 dynamic_rendering_color_count = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06179";
262 dynamic_rendering_color_formats = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06180";
263 dynamic_rendering_depth_format = "VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06181";
264 dynamic_rendering_stencil_format = "VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-06182";
265 dynamic_rendering_fsr = "VUID-vkCmdDrawMultiIndexedEXT-imageView-06183";
266 dynamic_rendering_fdm = "VUID-vkCmdDrawMultiIndexedEXT-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500267 dynamic_rendering_color_sample = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06185";
268 dynamic_rendering_depth_sample = "VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06186";
269 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06187";
270 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06188";
Tony-LunarG4490de42021-06-21 15:49:19 -0600271 }
272};
273
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700274struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
275 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700276 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
277 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
278 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
279 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
280 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
281 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
282 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
283 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
284 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
285 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
286 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
287 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
288 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
289 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
290 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
291 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
292 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
293 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
294 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
295 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700296 push_constants_set = "VUID-vkCmdDrawIndirect-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700297 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
298 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
299 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
300 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
301 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
302 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
303 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700304 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700305 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
306 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700307 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700308 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
309 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000310 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600311 patch_control_points = "VUID-vkCmdDrawIndirect-None-04875";
312 rasterizer_discard_enable = "VUID-vkCmdDrawIndirect-None-04876";
313 depth_bias_enable = "VUID-vkCmdDrawIndirect-None-04877";
314 logic_op = "VUID-vkCmdDrawIndirect-logicOp-04878";
315 primitive_restart_enable = "VUID-vkCmdDrawIndirect-None-04879";
316 vertex_input_binding_stride = "VUID-vkCmdDrawIndirect-pStrides-04884";
317 vertex_input = kVUID_Core_CmdDrawIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200318 blend_enable = "VUID-vkCmdDrawIndirect-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500319 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndirect-viewMask-06178";
320 dynamic_rendering_color_count = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06179";
321 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06180";
322 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndirect-pDepthAttachment-06181";
323 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndirect-pStencilAttachment-06182";
324 dynamic_rendering_fsr = "VUID-vkCmdDrawIndirect-imageView-06183";
325 dynamic_rendering_fdm = "VUID-vkCmdDrawIndirect-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500326 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06185";
327 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndirect-pDepthAttachment-06186";
328 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndirect-pStencilAttachment-06187";
329 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06188";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700330 }
331};
332
333struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
334 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700335 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
336 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
337 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
338 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
339 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
340 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
341 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
342 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
343 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
344 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
345 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
346 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
347 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
348 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
349 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
350 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
351 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
352 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
353 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
354 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700355 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700356 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
357 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
358 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
359 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
360 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
361 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
362 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700363 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700364 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
365 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700366 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700367 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
368 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000369 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600370 patch_control_points = "VUID-vkCmdDrawIndexedIndirect-None-04875";
371 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirect-None-04876";
372 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirect-None-04877";
373 logic_op = "VUID-vkCmdDrawIndexedIndirect-logicOp-04878";
374 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirect-None-04879";
375 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirect-pStrides-04884";
376 vertex_input = kVUID_Core_CmdDrawIndexedIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200377 blend_enable = "VUID-vkCmdDrawIndexedIndirect-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500378 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndexedIndirect-viewMask-06178";
379 dynamic_rendering_color_count = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06179";
380 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06180";
381 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06181";
382 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06182";
383 dynamic_rendering_fsr = "VUID-vkCmdDrawIndexedIndirect-imageView-06183";
384 dynamic_rendering_fdm = "VUID-vkCmdDrawIndexedIndirect-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500385 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06185";
386 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06186";
387 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06187";
388 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06188";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700389 }
390};
391
392struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
393 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700394 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700395 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700396 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
397 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
398 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
399 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
400 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700401 push_constants_set = "VUID-vkCmdDispatch-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700402 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
403 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
404 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
405 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
406 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
407 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
408 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700409 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700410 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
411 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
412 }
413};
414
415struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
416 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700417 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700418 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700419 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
420 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
421 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
422 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
423 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
424 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
425 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
426 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700427 push_constants_set = "VUID-vkCmdDispatchIndirect-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700428 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
429 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
430 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
431 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
432 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
433 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700434 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700435 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
436 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
437 }
438};
439
440struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
441 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700442 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
443 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
444 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
445 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
446 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
447 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
448 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
449 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
450 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
451 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
452 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
453 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
454 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
455 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
456 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
457 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
458 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
459 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
460 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
461 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700462 push_constants_set = "VUID-vkCmdDrawIndirectCount-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700463 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
464 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
465 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
466 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
467 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
468 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
469 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700470 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700471 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
472 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700473 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700474 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
475 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000476 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600477 patch_control_points = "VUID-vkCmdDrawIndirectCount-None-04875";
478 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectCount-None-04876";
479 depth_bias_enable = "VUID-vkCmdDrawIndirectCount-None-04877";
480 logic_op = "VUID-vkCmdDrawIndirectCount-logicOp-04878";
481 primitive_restart_enable = "VUID-vkCmdDrawIndirectCount-None-04879";
482 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectCount-pStrides-04884";
483 vertex_input = kVUID_Core_CmdDrawIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200484 blend_enable = "VUID-vkCmdDrawIndirectCount-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700485 }
486};
487
488struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
489 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700490 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
491 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
492 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
493 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
494 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
495 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
496 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
497 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
498 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
499 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
500 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
501 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
502 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
503 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
504 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
505 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
506 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
507 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
508 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
509 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700510 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700511 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
512 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
513 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
514 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
515 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
516 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
517 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700518 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700519 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
520 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700521 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700522 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
523 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000524 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600525 patch_control_points = "VUID-vkCmdDrawIndexedIndirectCount-None-04875";
526 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04876";
527 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04877";
528 logic_op = "VUID-vkCmdDrawIndexedIndirectCount-logicOp-04878";
529 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04879";
530 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirectCount-pStrides-04884";
531 vertex_input = kVUID_Core_CmdDrawIndexedIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200532 blend_enable = "VUID-vkCmdDrawIndexedIndirectCount-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700533 }
534};
535
536struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
537 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700538 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
539 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
540 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
541 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
542 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
543 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
544 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700545 push_constants_set = "VUID-vkCmdTraceRaysNV-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700546 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
547 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
548 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
549 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
550 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
551 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700552 ray_query_protected_cb = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700553 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700554 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
555 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
556 }
557};
558
559struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
560 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700561 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
562 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
563 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
564 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
565 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
566 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
567 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700568 push_constants_set = "VUID-vkCmdTraceRaysKHR-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700569 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
570 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
571 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
572 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
573 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
574 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700575 ray_query_protected_cb = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700576 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700577 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
578 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
579 }
580};
581
582struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
583 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700584 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
585 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
586 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
587 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
588 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700589 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
590 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700591 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
592 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700593 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700594 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
595 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
596 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
597 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
598 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
599 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700600 ray_query_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700601 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700602 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
603 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
604 }
605};
606
607struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
608 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700609 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
610 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
611 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
612 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
613 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
614 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
615 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
616 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
617 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
618 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
619 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700620 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
621 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
622 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700623 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700624 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
625 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
626 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
627 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
628 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
629 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700630 rasterization_samples = "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700631 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
632 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700633 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700634 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
635 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000636 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600637 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksNV-None-04876";
638 depth_bias_enable = "VUID-vkCmdDrawMeshTasksNV-None-04877";
639 logic_op = "VUID-vkCmdDrawMeshTasksNV-logicOp-04878";
Piers Daniell924cd832021-05-18 13:48:47 -0600640 vertex_input = kVUID_Core_CmdDrawMeshTasksNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200641 blend_enable = "VUID-vkCmdDrawMeshTasksNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700642 }
643};
644
645struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
646 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700647 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
648 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
649 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
650 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
651 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
652 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
653 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
654 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
655 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
656 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
657 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
658 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
659 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
660 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700661 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
662 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
663 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700664 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700665 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
666 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
667 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
668 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
669 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
670 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700671 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700672 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
673 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700674 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700675 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
676 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000677 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600678 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04876";
679 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04877";
680 logic_op = "VUID-vkCmdDrawMeshTasksIndirectNV-logicOp-04878";
Piers Daniell924cd832021-05-18 13:48:47 -0600681 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200682 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700683 }
684};
685
686struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
687 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700688 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
689 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
690 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
691 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
692 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
693 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
694 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
695 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
696 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
697 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
698 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
699 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
700 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
701 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700702 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
703 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
704 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700705 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700706 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
707 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
708 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
709 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
710 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
711 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700712 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700713 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
714 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700715 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700716 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
717 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000718 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600719 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04876";
720 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04877";
721 logic_op = "VUID-vkCmdDrawMeshTasksIndirectCountNV-logicOp-04878";
Piers Daniell924cd832021-05-18 13:48:47 -0600722 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectCountNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200723 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700724 }
725};
726
727struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
728 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700729 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
730 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
731 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
732 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
733 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
734 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
735 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
736 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
737 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
738 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
739 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
sfricke-samsungb091d4e2021-04-18 23:15:59 -0700740 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567",
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700741 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
742 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
743 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
744 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
745 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
746 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
747 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
748 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700749 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700750 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
751 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
752 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
753 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
754 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
755 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
756 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700757 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700758 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
759 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700760 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700761 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
762 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000763 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600764 patch_control_points = "VUID-vkCmdDrawIndirectByteCountEXT-None-04875";
765 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04876";
766 depth_bias_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04877";
767 logic_op = "VUID-vkCmdDrawIndirectByteCountEXT-logicOp-04878";
768 primitive_restart_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04879";
769 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectByteCountEXT-pStrides-04884";
770 vertex_input = kVUID_Core_CmdDrawIndirectByteCountEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200771 blend_enable = "VUID-vkCmdDrawIndirectByteCountEXT-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700772 }
773};
774
775struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
776 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700777 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700778 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700779 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
780 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
781 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
782 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
783 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700784 push_constants_set = "VUID-vkCmdDispatchBase-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700785 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
786 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
787 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
788 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
789 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
790 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
sfricke-samsunge79d0892021-06-17 08:56:22 -0700791 protected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700792 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700793 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
794 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
795 }
796};
797
798// 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 -0700799static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700800 {CMD_DRAW, DispatchVuidsCmdDraw()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600801 {CMD_DRAWMULTIEXT, DispatchVuidsCmdDrawMultiEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700802 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600803 {CMD_DRAWMULTIINDEXEDEXT, DispatchVuidsCmdDrawMultiIndexedEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700804 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
805 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
806 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
807 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
808 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700809 {CMD_DRAWINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700810 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700811 {CMD_DRAWINDEXEDINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndexedIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700812 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
813 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
814 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
815 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
816 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
817 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
818 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
819 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700820 {CMD_DISPATCHBASEKHR, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700821 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700822 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700823};
824// clang-format on
825
826// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
827const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700828 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
829 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700830 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700831 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700832 }
833}
834
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700835// Generic function to handle validation for all CmdDraw* type functions
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700836bool CoreChecks::ValidateCmdDrawType(const CMD_BUFFER_STATE &cb_state, bool indexed, VkPipelineBindPoint bind_point,
sfricke-samsung85584a72021-09-30 21:43:38 -0700837 CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700838 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700839 skip |= ValidateCmd(&cb_state, cmd_type);
840 skip |= ValidateCmdBufDrawState(&cb_state, cmd_type, indexed, bind_point);
841 skip |= ValidateCmdRayQueryState(&cb_state, cmd_type, bind_point);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700842 return skip;
843}
844
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700845bool CoreChecks::ValidateCmdDrawInstance(const CMD_BUFFER_STATE &cb_node, uint32_t instanceCount, uint32_t firstInstance,
sfricke-samsung85584a72021-09-30 21:43:38 -0700846 CMD_TYPE cmd_type) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600847 bool skip = false;
848 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
sfricke-samsung85584a72021-09-30 21:43:38 -0700849 const char *caller = CommandTypeString(cmd_type);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600850
851 // Verify maxMultiviewInstanceIndex
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700852 if (cb_node.activeRenderPass && cb_node.activeRenderPass->renderPass() && enabled_features.multiview_features.multiview &&
locke-lunarg3fa463a2020-10-23 16:39:04 -0600853 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700854 LogObjectList objlist(cb_node.Handle());
855 objlist.add(cb_node.activeRenderPass->Handle());
locke-lunarg3fa463a2020-10-23 16:39:04 -0600856 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700857 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32
858 ", but instanceCount: %" PRIu32 "and firstInstance: %" PRIu32 ".",
859 caller, report_data->FormatHandle(cb_node.activeRenderPass->Handle()).c_str(),
locke-lunarg3fa463a2020-10-23 16:39:04 -0600860 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
861 }
862 return skip;
863}
864
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700865bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500866 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600867 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700868 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
869 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAW);
870 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600871 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700872}
873
Tony-LunarG4490de42021-06-21 15:49:19 -0600874bool CoreChecks::PreCallValidateCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
875 const VkMultiDrawInfoEXT *pVertexInfo, uint32_t instanceCount,
876 uint32_t firstInstance, uint32_t stride) const {
877 bool skip = false;
878 if (!enabled_features.multi_draw_features.multiDraw) {
879 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-None-04933",
880 "vkCmdDrawMultiEXT(): The multiDraw feature must be enabled to "
881 "call this command.");
882 }
883 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
884 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-drawCount-04934",
885 "vkCmdDrawMultiEXT(): parameter, uint32_t drawCount (%" PRIu32
886 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (%" PRIu32 ").",
887 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
888 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700889 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
890 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIEXT);
891 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIEXT);
Tony-LunarG4490de42021-06-21 15:49:19 -0600892 return skip;
893}
894
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700895bool CoreChecks::ValidateCmdDrawIndexedBufferSize(const CMD_BUFFER_STATE &cb_state, uint32_t indexCount, uint32_t firstIndex,
896 const char *caller, const char *first_index_vuid) const {
Tony-LunarG4490de42021-06-21 15:49:19 -0600897 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700898 if (cb_state.status & CBSTATUS_INDEX_BUFFER_BOUND) {
Tony-LunarG4490de42021-06-21 15:49:19 -0600899 unsigned int index_size = 0;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700900 const auto &index_buffer_binding = cb_state.index_buffer_binding;
Tony-LunarG4490de42021-06-21 15:49:19 -0600901 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
902 index_size = 2;
903 }
904 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
905 index_size = 4;
906 }
907 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
908 index_size = 1;
909 }
910 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
911 if (end_offset > index_buffer_binding.size) {
912 skip |= LogError(index_buffer_binding.buffer_state->buffer(), first_index_vuid,
913 "%s: index size (%u) * (firstIndex (%u) + indexCount (%u)) "
914 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
915 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
916 caller, index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset,
917 index_buffer_binding.size);
918 }
919 }
920 return skip;
921}
922
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700923bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500924 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600925 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700926 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
927 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDEXED);
928 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED);
929 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, indexCount, firstIndex, "vkCmdDrawIndexed()",
Tony-LunarG4490de42021-06-21 15:49:19 -0600930 "VUID-vkCmdDrawIndexed-firstIndex-04932");
931 return skip;
932}
933
934bool CoreChecks::PreCallValidateCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
935 const VkMultiDrawIndexedInfoEXT *pIndexInfo, uint32_t instanceCount,
936 uint32_t firstInstance, uint32_t stride,
937 const int32_t *pVertexOffset) const {
938 bool skip = false;
939 if (!enabled_features.multi_draw_features.multiDraw) {
940 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-None-04937",
941 "vkCmdDrawMultiIndexedEXT(): The multiDraw feature must be enabled to "
942 "call this command.");
943 }
944 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
945 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939",
946 "vkCmdDrawMultiIndexedEXT(): parameter, uint32_t drawCount (0x%" PRIu32
947 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (0x%" PRIu32 ").",
948 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
949 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700950 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
951 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIINDEXEDEXT);
952 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIINDEXEDEXT);
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200953 const auto info_bytes = reinterpret_cast<const char *>(pIndexInfo);
Tony-LunarG4490de42021-06-21 15:49:19 -0600954 for (uint32_t i = 0; i < drawCount; i++) {
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200955 const auto info_ptr = reinterpret_cast<const VkMultiDrawIndexedInfoEXT *>(info_bytes + i * stride);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700956 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, info_ptr->indexCount, info_ptr->firstIndex,
Tony-LunarG4490de42021-06-21 15:49:19 -0600957 "vkCmdDrawMultiIndexedEXT()", "VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700958 }
959 return skip;
960}
961
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700962bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
963 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700964 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
965 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -0600966 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700967 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700968 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600969 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
970 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700971 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
972 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
Jeremy Gebben9f537102021-10-05 16:37:12 -0600973 buffer_state.get());
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700974 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
975 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600976 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%" PRIu64 ") is not less than "
977 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700978 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600979 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700980 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
981 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
982 return skip;
983}
984
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700985bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700986 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700987 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
988 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -0600989 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700990 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDEXEDINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700991 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600992 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
993 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
994 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700995 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
Jeremy Gebben9f537102021-10-05 16:37:12 -0600996 offset, buffer_state.get());
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700997 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
998 skip |= LogError(
999 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -06001000 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%" PRIu64 ") is not less than "
1001 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001002 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -06001003 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001004 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
1005 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
1006 // 'buffer'.
1007 return skip;
1008}
1009
Jeff Bolz5c801d12019-10-09 10:38:45 -05001010bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -06001011 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001012 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1013 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH);
Lockef39c0772019-04-03 14:40:02 -06001014 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001015}
1016
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001017bool CoreChecks::ValidateBaseGroups(const CMD_BUFFER_STATE &cb_state, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001018 const char *apiName) const {
1019 bool skip = false;
1020 if (baseGroupX || baseGroupY || baseGroupZ) {
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001021 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001022 const auto *pipeline_state = cb_state.lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben11af9792021-08-20 10:20:09 -06001023 if (pipeline_state && !(pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001024 skip |= LogError(cb_state.Handle(), "VUID-vkCmdDispatchBase-baseGroupX-00427",
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001025 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
1026 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
1027 apiName);
1028 }
1029 }
1030 return skip;
1031}
1032
locke-lunarg25b6c352020-08-06 17:44:18 -06001033bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
1034 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
1035 uint32_t groupCountZ) const {
1036 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001037 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1038 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE);
1039 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -06001040 return skip;
1041}
1042
1043bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
1044 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
1045 uint32_t groupCountZ) const {
1046 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001047 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1048 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASEKHR);
1049 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -06001050 return skip;
1051}
1052
Jeff Bolz5c801d12019-10-09 10:38:45 -05001053bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001054 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1055 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001056 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001057 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DISPATCHINDIRECT);
Tony-LunarGda555b52021-01-06 13:43:49 -07001058 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
1059 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
1060 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
1061 "size of the buffer");
1062 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001063 return skip;
1064}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001065bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1066 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001067 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001068 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001069 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001070 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1071 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001072 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001073 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1074 "call this command.",
1075 apiName);
1076 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001077 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride,
1078 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001079 if (maxDrawCount > 1) {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001080 const auto buffer_state = Get<BUFFER_STATE>(buffer);
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001081 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride,
1082 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), maxDrawCount, offset,
Jeremy Gebben9f537102021-10-05 16:37:12 -06001083 buffer_state.get());
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001084 }
1085
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001086 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1087 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1088 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1089 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001090 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Jeremy Gebben9f537102021-10-05 16:37:12 -06001091 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state.get(), apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -07001092 skip |=
Jeremy Gebben9f537102021-10-05 16:37:12 -06001093 ValidateBufferUsageFlags(count_buffer_state.get(), VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
Tony-LunarG83544c72020-01-17 12:30:19 -07001094 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001095 return skip;
1096}
1097
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001098bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1099 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1100 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001101 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001102 CMD_DRAWINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001103}
1104
1105bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1106 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1107 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001108 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001109 CMD_DRAWINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001110}
1111
1112bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1113 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001114 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001115 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001116 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001117 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1118 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001119 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001120 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1121 "call this command.",
1122 apiName);
1123 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001124 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride,
1125 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001126 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Lockee68ac652019-05-06 10:17:33 -06001127 if (maxDrawCount > 1) {
Mike Schuchardt65847d92019-12-20 13:50:47 -08001128 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001129 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), maxDrawCount,
Jeremy Gebben9f537102021-10-05 16:37:12 -06001130 offset, buffer_state.get());
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001131 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001132 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1133 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1134 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001135 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Jeremy Gebben9f537102021-10-05 16:37:12 -06001136 skip |=
1137 ValidateMemoryIsBoundToBuffer(count_buffer_state.get(), apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
1138 skip |= ValidateBufferUsageFlags(count_buffer_state.get(), VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001139 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -08001140 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001141 return skip;
1142}
1143
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001144bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1145 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1146 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001147 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001148 CMD_DRAWINDEXEDINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001149}
1150
1151bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1152 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1153 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001154 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001155 CMD_DRAWINDEXEDINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001156}
1157
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001158bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
1159 uint32_t firstInstance, VkBuffer counterBuffer,
1160 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
1161 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001162 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001163 if (!enabled_features.transform_feedback_features.transformFeedback) {
1164 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
1165 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
1166 }
sfricke-samsung45996a42021-09-16 13:45:27 -07001167 if (IsExtEnabled(device_extensions.vk_ext_transform_feedback) &&
1168 !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -08001169 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001170 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
1171 "vkCmdDrawIndirectByteCountEXT()");
1172 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001173 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1174 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT);
1175 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT);
1176 const auto counter_buffer_state = Get<BUFFER_STATE>(counterBuffer);
1177 skip |= ValidateIndirectCmd(*cb_state, *counter_buffer_state, CMD_DRAWINDIRECTBYTECOUNTEXT);
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001178 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001179}
1180
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001181bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1182 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1183 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1184 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1185 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1186 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1187 uint32_t width, uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001188 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001189 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001190 auto callable_shader_buffer_state = Get<BUFFER_STATE>(callableShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001191 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
1192 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
1193 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
1194 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
1195 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
1196 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001197 auto hit_shader_buffer_state = Get<BUFFER_STATE>(hitShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001198 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
1199 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
1200 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
1201 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
1202 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
1203 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001204 auto miss_shader_buffer_state = Get<BUFFER_STATE>(missShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001205 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
1206 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
1207 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001208 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001209 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
1210 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001211 auto raygen_shader_buffer_state = Get<BUFFER_STATE>(raygenShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001212 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
1213 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
1214 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001215 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001216 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
1217 }
sourav parmarcd5fb182020-07-17 12:58:44 -07001218
sourav parmar30e19392020-12-02 16:57:21 -08001219 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
1220 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001221 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmar30e19392020-12-02 16:57:21 -08001222 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
1223 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -07001224 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001225 return skip;
1226}
1227
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001228bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001229 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1230 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1231 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1232 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001233 uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001234 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001235 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001236 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1237 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001238 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001239 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1240 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1241 } else { // bound to valid RT pipeline
Jeremy Gebben11af9792021-08-20 10:20:09 -06001242 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001243 if (!pHitShaderBindingTable->deviceAddress) {
1244 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1245 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1246 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1247 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1248 }
1249 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1250 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1251 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1252 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1253 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1254 "execute an intersection shader must not be set to zero.");
1255 }
1256 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001257 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001258 if (!pHitShaderBindingTable->deviceAddress) {
1259 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1260 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1261 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1262 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1263 }
1264 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1265 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1266 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1267 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1268 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1269 "execute a closest hit shader must not be set to zero.");
1270 }
1271 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001272 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001273 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1274 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1275 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1276 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1277 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1278 "execute an any hit shader must not be set to zero.");
1279 }
1280 }
1281 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001282 return skip;
1283}
1284
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001285bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001286 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1287 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1288 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1289 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1290 VkDeviceAddress indirectDeviceAddress) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001291 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001292 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001293 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001294 const auto *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001295 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001296 skip |=
1297 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1298 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1299 } else { // valid bind point
Jeremy Gebben11af9792021-08-20 10:20:09 -06001300 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001301 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1302 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1303 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1304 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1305 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1306 }
1307 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1308 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1309 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1310 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1311 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1312 "execute an intersection shader must not be set to zero.");
1313 }
1314 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001315 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001316 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1317 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1318 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1319 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1320 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1321 }
1322 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1323 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1324 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1325 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1326 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1327 "execute a closest hit shader must not be set to zero.");
1328 }
1329 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001330 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001331 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1332 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1333 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1334 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1335 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1336 "execute an any hit shader must not be set to zero.");
1337 }
1338 }
1339 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001340 return skip;
1341}
1342
Jeff Bolz5c801d12019-10-09 10:38:45 -05001343bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001344 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1345 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001346 return skip;
1347}
1348
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001349bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001350 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001351 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1352 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001353 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001354 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTNV);
Lockee68ac652019-05-06 10:17:33 -06001355 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001356 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1357 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
Jeremy Gebben9f537102021-10-05 16:37:12 -06001358 drawCount, offset, buffer_state.get());
Lockee68ac652019-05-06 10:17:33 -06001359 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001360 return skip;
1361}
1362
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001363bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1364 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001365 uint32_t maxDrawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001366 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1367 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001368 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1369 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001370 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jeremy Gebben9f537102021-10-05 16:37:12 -06001371 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state.get(), "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001372 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jeremy Gebben9f537102021-10-05 16:37:12 -06001373 skip |= ValidateBufferUsageFlags(count_buffer_state.get(), VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001374 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1375 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001376 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1377 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1378 if (maxDrawCount > 1) {
1379 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1380 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
Jeremy Gebben9f537102021-10-05 16:37:12 -06001381 maxDrawCount, offset, buffer_state.get());
Lockee68ac652019-05-06 10:17:33 -06001382 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001383 return skip;
1384}