blob: a9637ffb6cf3e4141245aa24ec15f918b29c596a [file] [log] [blame]
Lionel Landwerlin2d9f5632022-01-08 01:12:47 +02001/* Copyright (c) 2015-2022 The Khronos Group Inc.
2 * Copyright (c) 2015-2022 Valve Corporation
3 * Copyright (c) 2015-2022 LunarG, Inc.
4 * Copyright (C) 2015-2022 Google Inc.
Shannon McPhersoncfb16b52021-01-04 14:24:40 -07005 * 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";
Aaron Haganaca50442021-12-07 22:26:29 -0500100 dynamic_rendering_06189 = "VUID-vkCmdDraw-pDepthAttachment-06189";
101 dynamic_rendering_06190 = "VUID-vkCmdDraw-pStencilAttachment-06190";
102 dynamic_rendering_06198 = "VUID-vkCmdDraw-renderPass-06198";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700103 }
104};
105
Tony-LunarG4490de42021-06-21 15:49:19 -0600106struct DispatchVuidsCmdDrawMultiEXT : DrawDispatchVuid {
107 DispatchVuidsCmdDrawMultiEXT() : DrawDispatchVuid() {
108 pipeline_bound = "VUID-vkCmdDrawMultiEXT-None-02700";
109 dynamic_state = "VUID-vkCmdDrawMultiEXT-commandBuffer-02701";
110 vertex_binding = "VUID-vkCmdDrawMultiEXT-None-04007";
111 vertex_binding_null = "VUID-vkCmdDrawMultiEXT-None-04008";
112 compatible_pipeline = "VUID-vkCmdDrawMultiEXT-None-02697";
113 render_pass_compatible = "VUID-vkCmdDrawMultiEXT-renderPass-02684";
114 subpass_index = "VUID-vkCmdDrawMultiEXT-subpass-02685";
115 sample_location = "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-02689";
116 linear_sampler = "VUID-vkCmdDrawMultiEXT-magFilter-04553";
117 cubic_sampler = "VUID-vkCmdDrawMultiEXT-None-02692";
118 viewport_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03417";
119 scissor_count = "VUID-vkCmdDrawMultiEXT-scissorCount-03418";
120 viewport_scissor_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03419";
121 primitive_topology = "VUID-vkCmdDrawMultiEXT-primitiveTopology-03420";
122 corner_sampled_address_mode = "VUID-vkCmdDrawMultiEXT-flags-02696";
123 subpass_input = "VUID-vkCmdDrawMultiEXT-None-02686";
124 imageview_atomic = "VUID-vkCmdDrawMultiEXT-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700125 push_constants_set = "VUID-vkCmdDrawMultiEXT-maintenance4-06425";
Tony-LunarG4490de42021-06-21 15:49:19 -0600126 image_subresources = "VUID-vkCmdDrawMultiEXT-None-04584";
127 descriptor_valid = "VUID-vkCmdDrawMultiEXT-None-02699";
128 sampler_imageview_type = "VUID-vkCmdDrawMultiEXT-None-02702";
129 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiEXT-None-02703";
130 sampler_bias_offset = "VUID-vkCmdDrawMultiEXT-None-02704";
131 vertex_binding_attribute = "VUID-vkCmdDrawMultiEXT-None-02721";
132 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiEXT-None-02859";
133 rasterization_samples = "VUID-vkCmdDrawMultiEXT-rasterizationSamples-04740";
134 unprotected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02707";
135 protected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02712";
136 max_multiview_instance_index = "VUID-vkCmdDrawMultiEXT-maxMultiviewInstanceIndex-02688";
137 img_filter_cubic = "VUID-vkCmdDrawMultiEXT-None-02693";
138 filter_cubic = "VUID-vkCmdDrawMultiEXT-filterCubic-02694";
139 filter_cubic_min_max = "VUID-vkCmdDrawMultiEXT-filterCubicMinmax-02695";
140 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
141 patch_control_points = "VUID-vkCmdDrawMultiEXT-None-04875";
142 rasterizer_discard_enable = "VUID-vkCmdDrawMultiEXT-None-04876";
143 depth_bias_enable = "VUID-vkCmdDrawMultiEXT-None-04877";
144 logic_op = "VUID-vkCmdDrawMultiEXT-logicOp-04878";
145 primitive_restart_enable = "VUID-vkCmdDrawMultiEXT-None-04879";
146 vertex_input_binding_stride = "VUID-vkCmdDrawMultiEXT-pStrides-04884";
147 vertex_input = kVUID_Core_CmdDrawMultiEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200148 blend_enable = "VUID-vkCmdDrawMultiEXT-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500149 dynamic_rendering_view_mask = "VUID-vkCmdDrawMultiEXT-viewMask-06178";
150 dynamic_rendering_color_count = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06179";
151 dynamic_rendering_color_formats = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06180";
152 dynamic_rendering_depth_format = "VUID-vkCmdDrawMultiEXT-pDepthAttachment-06181";
153 dynamic_rendering_stencil_format = "VUID-vkCmdDrawMultiEXT-pStencilAttachment-06182";
154 dynamic_rendering_fsr = "VUID-vkCmdDrawMultiEXT-imageView-06183";
155 dynamic_rendering_fdm = "VUID-vkCmdDrawMultiEXT-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500156 dynamic_rendering_color_sample = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06185";
157 dynamic_rendering_depth_sample = "VUID-vkCmdDrawMultiEXT-pDepthAttachment-06186";
158 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawMultiEXT-pStencilAttachment-06187";
159 dynamic_rendering_multi_sample = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06188";
Aaron Haganaca50442021-12-07 22:26:29 -0500160 dynamic_rendering_06189 = "VUID-vkCmdDrawMultiEXT-pDepthAttachment-06189";
161 dynamic_rendering_06190 = "VUID-vkCmdDrawMultiEXT-pStencilAttachment-06190";
162 dynamic_rendering_06198 = "VUID-vkCmdDrawMultiEXT-renderPass-06198";
Tony-LunarG4490de42021-06-21 15:49:19 -0600163 }
164};
165
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700166struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
167 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700168 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
169 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
170 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
171 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
172 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
173 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
174 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
175 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
176 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
177 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
178 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
179 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
180 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
181 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
182 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
183 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
184 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700185 push_constants_set = "VUID-vkCmdDrawIndexed-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700186 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
187 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
188 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
189 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
190 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
191 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
192 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700193 rasterization_samples = "VUID-vkCmdDrawIndexed-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700194 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
195 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
196 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700197 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700198 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
199 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000200 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600201 patch_control_points = "VUID-vkCmdDrawIndexed-None-04875";
202 rasterizer_discard_enable = "VUID-vkCmdDrawIndexed-None-04876";
203 depth_bias_enable = "VUID-vkCmdDrawIndexed-None-04877";
204 logic_op = "VUID-vkCmdDrawIndexed-logicOp-04878";
205 primitive_restart_enable = "VUID-vkCmdDrawIndexed-None-04879";
206 vertex_input_binding_stride = "VUID-vkCmdDrawIndexed-pStrides-04884";
207 vertex_input = kVUID_Core_CmdDrawIndexed_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200208 blend_enable = "VUID-vkCmdDrawIndexed-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500209 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndexed-viewMask-06178";
210 dynamic_rendering_color_count = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06179";
211 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06180";
212 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndexed-pDepthAttachment-06181";
213 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndexed-pStencilAttachment-06182";
214 dynamic_rendering_fsr = "VUID-vkCmdDrawIndexed-imageView-06183";
215 dynamic_rendering_fdm = "VUID-vkCmdDrawIndexed-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500216 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06185";
217 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndexed-pDepthAttachment-06186";
218 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndexed-pStencilAttachment-06187";
219 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06188";
Aaron Haganaca50442021-12-07 22:26:29 -0500220 dynamic_rendering_06189 = "VUID-vkCmdDrawIndexed-pDepthAttachment-06189";
221 dynamic_rendering_06190 = "VUID-vkCmdDrawIndexed-pStencilAttachment-06190";
222 dynamic_rendering_06198 = "VUID-vkCmdDrawIndexed-renderPass-06198";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700223 }
224};
225
Tony-LunarG4490de42021-06-21 15:49:19 -0600226struct DispatchVuidsCmdDrawMultiIndexedEXT : DrawDispatchVuid {
227 DispatchVuidsCmdDrawMultiIndexedEXT() : DrawDispatchVuid() {
Lionel Landwerlin45e981c2021-12-07 15:29:40 +0200228 pipeline_bound = "VUID-vkCmdDrawMultiIndexedEXT-None-02700";
229 dynamic_state = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02701";
230 vertex_binding = "VUID-vkCmdDrawMultiIndexedEXT-None-04007";
231 vertex_binding_null = "VUID-vkCmdDrawMultiIndexedEXT-None-04008";
232 compatible_pipeline = "VUID-vkCmdDrawMultiIndexedEXT-None-02697";
233 render_pass_compatible = "VUID-vkCmdDrawMultiIndexedEXT-renderPass-02684";
234 subpass_index = "VUID-vkCmdDrawMultiIndexedEXT-subpass-02685";
235 sample_location = "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-02689";
236 linear_sampler = "VUID-vkCmdDrawMultiIndexedEXT-magFilter-04553";
237 cubic_sampler = "VUID-vkCmdDrawMultiIndexedEXT-None-02692";
238 viewport_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03417";
239 scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-scissorCount-03418";
240 viewport_scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03419";
241 primitive_topology = "VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-03420";
242 corner_sampled_address_mode = "VUID-vkCmdDrawMultiIndexedEXT-flags-02696";
243 subpass_input = "VUID-vkCmdDrawMultiIndexedEXT-None-02686";
244 imageview_atomic = "VUID-vkCmdDrawMultiIndexedEXT-None-02691";
245 push_constants_set = "VUID-vkCmdDrawMultiIndexedEXT-maintenance4-06425";
246 image_subresources = "VUID-vkCmdDrawMultiIndexedEXT-None-04584";
247 descriptor_valid = "VUID-vkCmdDrawMultiIndexedEXT-None-02699";
248 sampler_imageview_type = "VUID-vkCmdDrawMultiIndexedEXT-None-02702";
249 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiIndexedEXT-None-02703";
250 sampler_bias_offset = "VUID-vkCmdDrawMultiIndexedEXT-None-02704";
251 vertex_binding_attribute = "VUID-vkCmdDrawMultiIndexedEXT-None-02721";
252 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiIndexedEXT-None-02859";
253 rasterization_samples = "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-04740";
254 unprotected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02707";
255 protected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712";
256 max_multiview_instance_index = "VUID-vkCmdDrawMultiIndexedEXT-maxMultiviewInstanceIndex-02688";
257 img_filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-None-02693";
258 filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-filterCubic-02694";
259 filter_cubic_min_max = "VUID-vkCmdDrawMultiIndexedEXT-filterCubicMinmax-02695";
Tony-LunarG4490de42021-06-21 15:49:19 -0600260 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Lionel Landwerlin45e981c2021-12-07 15:29:40 +0200261 patch_control_points = "VUID-vkCmdDrawMultiIndexedEXT-None-04875";
262 rasterizer_discard_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04876";
263 depth_bias_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04877";
264 logic_op = "VUID-vkCmdDrawMultiIndexedEXT-logicOp-04878";
265 primitive_restart_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04879";
266 vertex_input_binding_stride = "VUID-vkCmdDrawMultiIndexedEXT-pStrides-04884";
267 vertex_input = kVUID_Core_CmdDrawMultiIndexedEXT_VertexInput;
268 blend_enable = "VUID-vkCmdDrawMultiIndexedEXT-blendEnable-04727";
269 dynamic_rendering_view_mask = "VUID-vkCmdDrawMultiIndexedEXT-viewMask-06178";
270 dynamic_rendering_color_count = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06179";
271 dynamic_rendering_color_formats = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06180";
272 dynamic_rendering_depth_format = "VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06181";
273 dynamic_rendering_stencil_format = "VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-06182";
274 dynamic_rendering_fsr = "VUID-vkCmdDrawMultiIndexedEXT-imageView-06183";
275 dynamic_rendering_fdm = "VUID-vkCmdDrawMultiIndexedEXT-imageView-06184";
276 dynamic_rendering_color_sample = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06185";
277 dynamic_rendering_depth_sample = "VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06186";
278 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-06187";
279 dynamic_rendering_multi_sample = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06188";
280 dynamic_rendering_06189 = "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06189";
281 dynamic_rendering_06190 = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06190";
282 dynamic_rendering_06198 = "VUID-vkCmdDrawIndexedIndirect-renderPass-06198";
Tony-LunarG4490de42021-06-21 15:49:19 -0600283 }
284};
285
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700286struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
287 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700288 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
289 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
290 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
291 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
292 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
293 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
294 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
295 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
296 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
297 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
298 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
299 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
300 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
301 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
302 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
303 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
304 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
305 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
306 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
307 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700308 push_constants_set = "VUID-vkCmdDrawIndirect-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700309 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
310 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
311 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
312 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
313 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
314 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
315 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700316 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700317 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
318 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700319 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700320 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
321 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000322 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600323 patch_control_points = "VUID-vkCmdDrawIndirect-None-04875";
324 rasterizer_discard_enable = "VUID-vkCmdDrawIndirect-None-04876";
325 depth_bias_enable = "VUID-vkCmdDrawIndirect-None-04877";
326 logic_op = "VUID-vkCmdDrawIndirect-logicOp-04878";
327 primitive_restart_enable = "VUID-vkCmdDrawIndirect-None-04879";
328 vertex_input_binding_stride = "VUID-vkCmdDrawIndirect-pStrides-04884";
329 vertex_input = kVUID_Core_CmdDrawIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200330 blend_enable = "VUID-vkCmdDrawIndirect-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500331 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndirect-viewMask-06178";
332 dynamic_rendering_color_count = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06179";
333 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06180";
334 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndirect-pDepthAttachment-06181";
335 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndirect-pStencilAttachment-06182";
336 dynamic_rendering_fsr = "VUID-vkCmdDrawIndirect-imageView-06183";
337 dynamic_rendering_fdm = "VUID-vkCmdDrawIndirect-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500338 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06185";
339 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndirect-pDepthAttachment-06186";
340 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndirect-pStencilAttachment-06187";
341 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06188";
Aaron Haganaca50442021-12-07 22:26:29 -0500342 dynamic_rendering_06189 = "VUID-vkCmdDrawIndirect-pDepthAttachment-06189";
343 dynamic_rendering_06190 = "VUID-vkCmdDrawIndirect-pStencilAttachment-06190";
344 dynamic_rendering_06198 = "VUID-vkCmdDrawIndirect-renderPass-06198";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700345 }
346};
347
348struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
349 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700350 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
351 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
352 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
353 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
354 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
355 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
356 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
357 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
358 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
359 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
360 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
361 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
362 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
363 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
364 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
365 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
366 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
367 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
368 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
369 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700370 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700371 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
372 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
373 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
374 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
375 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
376 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
377 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700378 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700379 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
380 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700381 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700382 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
383 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000384 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600385 patch_control_points = "VUID-vkCmdDrawIndexedIndirect-None-04875";
386 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirect-None-04876";
387 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirect-None-04877";
388 logic_op = "VUID-vkCmdDrawIndexedIndirect-logicOp-04878";
389 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirect-None-04879";
390 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirect-pStrides-04884";
391 vertex_input = kVUID_Core_CmdDrawIndexedIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200392 blend_enable = "VUID-vkCmdDrawIndexedIndirect-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500393 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndexedIndirect-viewMask-06178";
394 dynamic_rendering_color_count = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06179";
395 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06180";
396 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06181";
397 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06182";
398 dynamic_rendering_fsr = "VUID-vkCmdDrawIndexedIndirect-imageView-06183";
399 dynamic_rendering_fdm = "VUID-vkCmdDrawIndexedIndirect-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500400 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06185";
401 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06186";
402 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06187";
403 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06188";
Aaron Haganaca50442021-12-07 22:26:29 -0500404 dynamic_rendering_06189 = "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06189";
405 dynamic_rendering_06190 = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06190";
406 dynamic_rendering_06198 = "VUID-vkCmdDrawIndexedIndirect-renderPass-06198";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700407 }
408};
409
410struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
411 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700412 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700413 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700414 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
415 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
416 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
417 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
418 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700419 push_constants_set = "VUID-vkCmdDispatch-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700420 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
421 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
422 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
423 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
424 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
425 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
426 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700427 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700428 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
429 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
430 }
431};
432
433struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
434 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700435 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700436 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700437 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
438 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
439 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
440 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
441 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
442 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
443 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
444 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700445 push_constants_set = "VUID-vkCmdDispatchIndirect-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700446 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
447 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
448 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
449 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
450 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
451 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700452 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700453 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
454 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
455 }
456};
457
458struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
459 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700460 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
461 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
462 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
463 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
464 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
465 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
466 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
467 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
468 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
469 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
470 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
471 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
472 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
473 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
474 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
475 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
476 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
477 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
478 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
479 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700480 push_constants_set = "VUID-vkCmdDrawIndirectCount-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700481 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
482 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
483 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
484 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
485 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
486 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
487 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700488 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700489 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
490 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700491 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700492 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
493 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000494 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600495 patch_control_points = "VUID-vkCmdDrawIndirectCount-None-04875";
496 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectCount-None-04876";
497 depth_bias_enable = "VUID-vkCmdDrawIndirectCount-None-04877";
498 logic_op = "VUID-vkCmdDrawIndirectCount-logicOp-04878";
499 primitive_restart_enable = "VUID-vkCmdDrawIndirectCount-None-04879";
500 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectCount-pStrides-04884";
501 vertex_input = kVUID_Core_CmdDrawIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200502 blend_enable = "VUID-vkCmdDrawIndirectCount-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700503 }
504};
505
506struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
507 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700508 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
509 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
510 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
511 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
512 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
513 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
514 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
515 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
516 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
517 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
518 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
519 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
520 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
521 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
522 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
523 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
524 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
525 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
526 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
527 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700528 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700529 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
530 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
531 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
532 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
533 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
534 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
535 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700536 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700537 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
538 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700539 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700540 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
541 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000542 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600543 patch_control_points = "VUID-vkCmdDrawIndexedIndirectCount-None-04875";
544 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04876";
545 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04877";
546 logic_op = "VUID-vkCmdDrawIndexedIndirectCount-logicOp-04878";
547 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04879";
548 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirectCount-pStrides-04884";
549 vertex_input = kVUID_Core_CmdDrawIndexedIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200550 blend_enable = "VUID-vkCmdDrawIndexedIndirectCount-blendEnable-04727";
Aaron Haganaca50442021-12-07 22:26:29 -0500551 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndexedIndirectCount-viewMask-06178";
552 dynamic_rendering_color_count = "VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06179";
553 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06180";
554 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndexedIndirectCount-pDepthAttachment-06181";
555 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndexedIndirectCount-pStencilAttachment-06182";
556 dynamic_rendering_fsr = "VUID-vkCmdDrawIndexedIndirectCount-imageView-06183";
557 dynamic_rendering_fdm = "VUID-vkCmdDrawIndexedIndirectCount-imageView-06184";
558 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06185";
559 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndexedIndirectCount-pDepthAttachment-06186";
560 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndexedIndirectCount-pStencilAttachment-06187";
561 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndexedIndirectCount-colorAttachmentCount-06188";
562 dynamic_rendering_06189 = "VUID-vkCmdDrawIndexedIndirectCount-pDepthAttachment-06189";
563 dynamic_rendering_06190 = "VUID-vkCmdDrawIndexedIndirectCount-pStencilAttachment-06190";
564 dynamic_rendering_06198 = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-06198";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700565 }
566};
567
568struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
569 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700570 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
571 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
572 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
573 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
574 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
575 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
576 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700577 push_constants_set = "VUID-vkCmdTraceRaysNV-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700578 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
579 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
580 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
581 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
582 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
583 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700584 ray_query_protected_cb = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700585 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700586 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
587 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
588 }
589};
590
591struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
592 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700593 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
594 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
595 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
596 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
597 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
598 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
599 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700600 push_constants_set = "VUID-vkCmdTraceRaysKHR-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700601 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
602 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
603 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
604 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
605 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
606 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700607 ray_query_protected_cb = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700608 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700609 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
610 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
611 }
612};
613
614struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
615 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700616 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
617 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
618 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
619 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
620 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700621 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
622 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700623 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
624 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700625 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700626 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
627 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
628 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
629 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
630 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
631 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700632 ray_query_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700633 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700634 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
635 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
636 }
637};
638
639struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
640 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700641 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
642 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
643 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
644 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
645 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
646 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
647 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
648 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
649 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
650 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
651 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700652 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
653 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
654 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700655 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700656 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
657 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
658 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
659 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
660 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
661 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700662 rasterization_samples = "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700663 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
664 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700665 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700666 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
667 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000668 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600669 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksNV-None-04876";
670 depth_bias_enable = "VUID-vkCmdDrawMeshTasksNV-None-04877";
671 logic_op = "VUID-vkCmdDrawMeshTasksNV-logicOp-04878";
Piers Daniell924cd832021-05-18 13:48:47 -0600672 vertex_input = kVUID_Core_CmdDrawMeshTasksNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200673 blend_enable = "VUID-vkCmdDrawMeshTasksNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700674 }
675};
676
677struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
678 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700679 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
680 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
681 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
682 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
683 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
684 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
685 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
686 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
687 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
688 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
689 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
690 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
691 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
692 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700693 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
694 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
695 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700696 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700697 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
698 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
699 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
700 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
701 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
702 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700703 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700704 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
705 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700706 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700707 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
708 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000709 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600710 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04876";
711 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04877";
712 logic_op = "VUID-vkCmdDrawMeshTasksIndirectNV-logicOp-04878";
Piers Daniell924cd832021-05-18 13:48:47 -0600713 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200714 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700715 }
716};
717
718struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
719 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700720 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
721 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
722 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
723 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
724 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
725 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
726 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
727 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
728 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
729 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
730 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
731 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
732 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
733 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700734 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
735 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
736 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700737 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700738 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
739 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
740 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
741 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
742 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
743 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700744 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700745 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
746 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700747 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700748 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
749 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000750 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600751 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04876";
752 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04877";
753 logic_op = "VUID-vkCmdDrawMeshTasksIndirectCountNV-logicOp-04878";
Piers Daniell924cd832021-05-18 13:48:47 -0600754 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectCountNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200755 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700756 }
757};
758
759struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
760 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700761 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
762 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
763 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
764 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
765 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
766 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
767 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
768 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
769 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
770 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
771 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
sfricke-samsungb091d4e2021-04-18 23:15:59 -0700772 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567",
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700773 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
774 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
775 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
776 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
777 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
778 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
779 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
780 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700781 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700782 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
783 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
784 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
785 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
786 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
787 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
788 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700789 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700790 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
791 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700792 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700793 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
794 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000795 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600796 patch_control_points = "VUID-vkCmdDrawIndirectByteCountEXT-None-04875";
797 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04876";
798 depth_bias_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04877";
799 logic_op = "VUID-vkCmdDrawIndirectByteCountEXT-logicOp-04878";
800 primitive_restart_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04879";
801 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectByteCountEXT-pStrides-04884";
802 vertex_input = kVUID_Core_CmdDrawIndirectByteCountEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200803 blend_enable = "VUID-vkCmdDrawIndirectByteCountEXT-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700804 }
805};
806
807struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
808 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700809 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700810 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700811 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
812 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
813 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
814 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
815 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
Piers Daniella7f93b62021-11-20 12:32:04 -0700816 push_constants_set = "VUID-vkCmdDispatchBase-maintenance4-06425";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700817 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
818 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
819 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
820 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
821 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
822 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
sfricke-samsunge79d0892021-06-17 08:56:22 -0700823 protected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700824 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700825 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
826 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
827 }
828};
829
830// 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 -0700831static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700832 {CMD_DRAW, DispatchVuidsCmdDraw()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600833 {CMD_DRAWMULTIEXT, DispatchVuidsCmdDrawMultiEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700834 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600835 {CMD_DRAWMULTIINDEXEDEXT, DispatchVuidsCmdDrawMultiIndexedEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700836 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
837 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
838 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
839 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
840 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700841 {CMD_DRAWINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700842 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700843 {CMD_DRAWINDEXEDINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndexedIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700844 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
845 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
846 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
847 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
848 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
849 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
850 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
851 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700852 {CMD_DISPATCHBASEKHR, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700853 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700854 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700855};
856// clang-format on
857
858// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
859const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700860 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
861 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700862 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700863 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700864 }
865}
866
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700867// Generic function to handle validation for all CmdDraw* type functions
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700868bool CoreChecks::ValidateCmdDrawType(const CMD_BUFFER_STATE &cb_state, bool indexed, VkPipelineBindPoint bind_point,
sfricke-samsung85584a72021-09-30 21:43:38 -0700869 CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700870 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700871 skip |= ValidateCmd(&cb_state, cmd_type);
872 skip |= ValidateCmdBufDrawState(&cb_state, cmd_type, indexed, bind_point);
873 skip |= ValidateCmdRayQueryState(&cb_state, cmd_type, bind_point);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700874 return skip;
875}
876
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700877bool CoreChecks::ValidateCmdDrawInstance(const CMD_BUFFER_STATE &cb_node, uint32_t instanceCount, uint32_t firstInstance,
sfricke-samsung85584a72021-09-30 21:43:38 -0700878 CMD_TYPE cmd_type) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600879 bool skip = false;
880 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
sfricke-samsung85584a72021-09-30 21:43:38 -0700881 const char *caller = CommandTypeString(cmd_type);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600882
883 // Verify maxMultiviewInstanceIndex
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700884 if (cb_node.activeRenderPass && cb_node.activeRenderPass->renderPass() && enabled_features.multiview_features.multiview &&
locke-lunarg3fa463a2020-10-23 16:39:04 -0600885 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700886 LogObjectList objlist(cb_node.Handle());
887 objlist.add(cb_node.activeRenderPass->Handle());
locke-lunarg3fa463a2020-10-23 16:39:04 -0600888 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700889 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32
890 ", but instanceCount: %" PRIu32 "and firstInstance: %" PRIu32 ".",
891 caller, report_data->FormatHandle(cb_node.activeRenderPass->Handle()).c_str(),
locke-lunarg3fa463a2020-10-23 16:39:04 -0600892 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
893 }
894 return skip;
895}
896
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700897bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500898 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600899 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700900 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
901 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAW);
902 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600903 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700904}
905
Tony-LunarG4490de42021-06-21 15:49:19 -0600906bool CoreChecks::PreCallValidateCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
907 const VkMultiDrawInfoEXT *pVertexInfo, uint32_t instanceCount,
908 uint32_t firstInstance, uint32_t stride) const {
909 bool skip = false;
910 if (!enabled_features.multi_draw_features.multiDraw) {
911 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-None-04933",
912 "vkCmdDrawMultiEXT(): The multiDraw feature must be enabled to "
913 "call this command.");
914 }
915 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
916 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-drawCount-04934",
917 "vkCmdDrawMultiEXT(): parameter, uint32_t drawCount (%" PRIu32
918 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (%" PRIu32 ").",
919 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
920 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700921 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
922 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIEXT);
923 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIEXT);
Tony-LunarG4490de42021-06-21 15:49:19 -0600924 return skip;
925}
926
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700927bool CoreChecks::ValidateCmdDrawIndexedBufferSize(const CMD_BUFFER_STATE &cb_state, uint32_t indexCount, uint32_t firstIndex,
928 const char *caller, const char *first_index_vuid) const {
Tony-LunarG4490de42021-06-21 15:49:19 -0600929 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700930 if (cb_state.status & CBSTATUS_INDEX_BUFFER_BOUND) {
Tony-LunarG4490de42021-06-21 15:49:19 -0600931 unsigned int index_size = 0;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700932 const auto &index_buffer_binding = cb_state.index_buffer_binding;
Tony-LunarG4490de42021-06-21 15:49:19 -0600933 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
934 index_size = 2;
935 }
936 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
937 index_size = 4;
938 }
939 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
940 index_size = 1;
941 }
942 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
943 if (end_offset > index_buffer_binding.size) {
944 skip |= LogError(index_buffer_binding.buffer_state->buffer(), first_index_vuid,
945 "%s: index size (%u) * (firstIndex (%u) + indexCount (%u)) "
946 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
947 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
948 caller, index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset,
949 index_buffer_binding.size);
950 }
951 }
952 return skip;
953}
954
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700955bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500956 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600957 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700958 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
959 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDEXED);
960 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED);
961 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, indexCount, firstIndex, "vkCmdDrawIndexed()",
Tony-LunarG4490de42021-06-21 15:49:19 -0600962 "VUID-vkCmdDrawIndexed-firstIndex-04932");
963 return skip;
964}
965
966bool CoreChecks::PreCallValidateCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
967 const VkMultiDrawIndexedInfoEXT *pIndexInfo, uint32_t instanceCount,
968 uint32_t firstInstance, uint32_t stride,
969 const int32_t *pVertexOffset) const {
970 bool skip = false;
971 if (!enabled_features.multi_draw_features.multiDraw) {
972 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-None-04937",
973 "vkCmdDrawMultiIndexedEXT(): The multiDraw feature must be enabled to "
974 "call this command.");
975 }
976 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
977 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939",
978 "vkCmdDrawMultiIndexedEXT(): parameter, uint32_t drawCount (0x%" PRIu32
979 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (0x%" PRIu32 ").",
980 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
981 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700982 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
983 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIINDEXEDEXT);
984 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIINDEXEDEXT);
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200985 const auto info_bytes = reinterpret_cast<const char *>(pIndexInfo);
Tony-LunarG4490de42021-06-21 15:49:19 -0600986 for (uint32_t i = 0; i < drawCount; i++) {
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200987 const auto info_ptr = reinterpret_cast<const VkMultiDrawIndexedInfoEXT *>(info_bytes + i * stride);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700988 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, info_ptr->indexCount, info_ptr->firstIndex,
Tony-LunarG4490de42021-06-21 15:49:19 -0600989 "vkCmdDrawMultiIndexedEXT()", "VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700990 }
991 return skip;
992}
993
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700994bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
995 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700996 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
997 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -0600998 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700999 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001000 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001001 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
1002 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001003 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
1004 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
Jeremy Gebben9f537102021-10-05 16:37:12 -06001005 buffer_state.get());
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001006 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
1007 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -06001008 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%" PRIu64 ") is not less than "
1009 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001010 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -06001011 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001012 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
1013 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
1014 return skip;
1015}
1016
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001017bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001018 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001019 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1020 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001021 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001022 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDEXEDINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001023 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001024 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
1025 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
1026 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001027 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
Jeremy Gebben9f537102021-10-05 16:37:12 -06001028 offset, buffer_state.get());
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001029 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
1030 skip |= LogError(
1031 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -06001032 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%" PRIu64 ") is not less than "
1033 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001034 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -06001035 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001036 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
1037 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
1038 // 'buffer'.
1039 return skip;
1040}
1041
Jeff Bolz5c801d12019-10-09 10:38:45 -05001042bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -06001043 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001044 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1045 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH);
Lockef39c0772019-04-03 14:40:02 -06001046 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001047}
1048
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001049bool CoreChecks::ValidateBaseGroups(const CMD_BUFFER_STATE &cb_state, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001050 const char *apiName) const {
1051 bool skip = false;
1052 if (baseGroupX || baseGroupY || baseGroupZ) {
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001053 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001054 const auto *pipeline_state = cb_state.lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben11af9792021-08-20 10:20:09 -06001055 if (pipeline_state && !(pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001056 skip |= LogError(cb_state.Handle(), "VUID-vkCmdDispatchBase-baseGroupX-00427",
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001057 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
1058 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
1059 apiName);
1060 }
1061 }
1062 return skip;
1063}
1064
locke-lunarg25b6c352020-08-06 17:44:18 -06001065bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
1066 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
1067 uint32_t groupCountZ) const {
1068 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001069 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1070 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE);
1071 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -06001072 return skip;
1073}
1074
1075bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
1076 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
1077 uint32_t groupCountZ) const {
1078 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001079 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1080 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASEKHR);
1081 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -06001082 return skip;
1083}
1084
Jeff Bolz5c801d12019-10-09 10:38:45 -05001085bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001086 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1087 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001088 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001089 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DISPATCHINDIRECT);
Tony-LunarGda555b52021-01-06 13:43:49 -07001090 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
1091 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
1092 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
1093 "size of the buffer");
1094 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001095 return skip;
1096}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001097bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1098 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001099 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001100 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001101 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001102 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1103 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001104 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001105 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1106 "call this command.",
1107 apiName);
1108 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001109 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride,
1110 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001111 if (maxDrawCount > 1) {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001112 const auto buffer_state = Get<BUFFER_STATE>(buffer);
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001113 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride,
1114 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), maxDrawCount, offset,
Jeremy Gebben9f537102021-10-05 16:37:12 -06001115 buffer_state.get());
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001116 }
1117
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001118 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1119 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1120 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1121 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001122 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Jeremy Gebben9f537102021-10-05 16:37:12 -06001123 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state.get(), apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -07001124 skip |=
Jeremy Gebben9f537102021-10-05 16:37:12 -06001125 ValidateBufferUsageFlags(count_buffer_state.get(), VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
Tony-LunarG83544c72020-01-17 12:30:19 -07001126 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001127 return skip;
1128}
1129
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001130bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1131 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1132 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001133 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001134 CMD_DRAWINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001135}
1136
1137bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1138 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1139 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001140 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001141 CMD_DRAWINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001142}
1143
1144bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1145 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001146 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001147 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001148 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001149 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1150 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001151 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001152 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1153 "call this command.",
1154 apiName);
1155 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001156 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride,
1157 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001158 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Lockee68ac652019-05-06 10:17:33 -06001159 if (maxDrawCount > 1) {
Mike Schuchardt65847d92019-12-20 13:50:47 -08001160 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001161 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), maxDrawCount,
Jeremy Gebben9f537102021-10-05 16:37:12 -06001162 offset, buffer_state.get());
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001163 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001164 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1165 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1166 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001167 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Jeremy Gebben9f537102021-10-05 16:37:12 -06001168 skip |=
1169 ValidateMemoryIsBoundToBuffer(count_buffer_state.get(), apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
1170 skip |= ValidateBufferUsageFlags(count_buffer_state.get(), VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001171 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -08001172 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001173 return skip;
1174}
1175
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001176bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1177 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1178 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001179 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001180 CMD_DRAWINDEXEDINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001181}
1182
1183bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1184 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1185 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001186 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001187 CMD_DRAWINDEXEDINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001188}
1189
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001190bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
1191 uint32_t firstInstance, VkBuffer counterBuffer,
1192 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
1193 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001194 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001195 if (!enabled_features.transform_feedback_features.transformFeedback) {
1196 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
1197 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
1198 }
sfricke-samsung45996a42021-09-16 13:45:27 -07001199 if (IsExtEnabled(device_extensions.vk_ext_transform_feedback) &&
1200 !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -08001201 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001202 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
1203 "vkCmdDrawIndirectByteCountEXT()");
1204 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001205 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1206 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT);
1207 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT);
1208 const auto counter_buffer_state = Get<BUFFER_STATE>(counterBuffer);
1209 skip |= ValidateIndirectCmd(*cb_state, *counter_buffer_state, CMD_DRAWINDIRECTBYTECOUNTEXT);
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001210 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001211}
1212
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001213bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1214 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1215 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1216 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1217 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1218 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1219 uint32_t width, uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001220 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001221 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001222 auto callable_shader_buffer_state = Get<BUFFER_STATE>(callableShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001223 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
1224 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
1225 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
1226 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
1227 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
1228 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001229 auto hit_shader_buffer_state = Get<BUFFER_STATE>(hitShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001230 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
1231 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
1232 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
1233 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
1234 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
1235 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001236 auto miss_shader_buffer_state = Get<BUFFER_STATE>(missShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001237 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
1238 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
1239 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001240 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001241 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
1242 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001243 auto raygen_shader_buffer_state = Get<BUFFER_STATE>(raygenShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001244 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
1245 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
1246 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001247 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001248 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
1249 }
sourav parmarcd5fb182020-07-17 12:58:44 -07001250
sourav parmar30e19392020-12-02 16:57:21 -08001251 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
1252 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001253 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmar30e19392020-12-02 16:57:21 -08001254 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
1255 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -07001256 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001257 return skip;
1258}
1259
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001260bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001261 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1262 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1263 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1264 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001265 uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001266 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001267 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001268 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1269 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001270 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001271 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1272 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1273 } else { // bound to valid RT pipeline
Jeremy Gebben11af9792021-08-20 10:20:09 -06001274 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001275 if (!pHitShaderBindingTable->deviceAddress) {
1276 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1277 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1278 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1279 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1280 }
1281 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1282 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1283 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1284 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1285 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1286 "execute an intersection shader must not be set to zero.");
1287 }
1288 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001289 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001290 if (!pHitShaderBindingTable->deviceAddress) {
1291 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1292 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1293 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1294 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1295 }
1296 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1297 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1298 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1299 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1300 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1301 "execute a closest hit shader must not be set to zero.");
1302 }
1303 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001304 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001305 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1306 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1307 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1308 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1309 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1310 "execute an any hit shader must not be set to zero.");
1311 }
1312 }
1313 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001314 return skip;
1315}
1316
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001317bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001318 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1319 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1320 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1321 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1322 VkDeviceAddress indirectDeviceAddress) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001323 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001324 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001325 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001326 const auto *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001327 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001328 skip |=
1329 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1330 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1331 } else { // valid bind point
Jeremy Gebben11af9792021-08-20 10:20:09 -06001332 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001333 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1334 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1335 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1336 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1337 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1338 }
1339 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1340 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1341 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1342 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1343 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1344 "execute an intersection shader must not be set to zero.");
1345 }
1346 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001347 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001348 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1349 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1350 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1351 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1352 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1353 }
1354 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1355 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1356 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1357 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1358 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1359 "execute a closest hit shader must not be set to zero.");
1360 }
1361 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001362 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001363 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1364 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1365 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1366 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1367 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1368 "execute an any hit shader must not be set to zero.");
1369 }
1370 }
1371 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001372 return skip;
1373}
1374
Jeff Bolz5c801d12019-10-09 10:38:45 -05001375bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001376 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1377 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001378 return skip;
1379}
1380
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001381bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001382 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001383 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1384 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001385 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001386 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTNV);
Lockee68ac652019-05-06 10:17:33 -06001387 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001388 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1389 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
Jeremy Gebben9f537102021-10-05 16:37:12 -06001390 drawCount, offset, buffer_state.get());
Lockee68ac652019-05-06 10:17:33 -06001391 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001392 return skip;
1393}
1394
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001395bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1396 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001397 uint32_t maxDrawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001398 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1399 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001400 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1401 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001402 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jeremy Gebben9f537102021-10-05 16:37:12 -06001403 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state.get(), "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001404 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jeremy Gebben9f537102021-10-05 16:37:12 -06001405 skip |= ValidateBufferUsageFlags(count_buffer_state.get(), VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001406 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1407 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001408 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1409 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1410 if (maxDrawCount > 1) {
1411 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1412 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
Jeremy Gebben9f537102021-10-05 16:37:12 -06001413 maxDrawCount, offset, buffer_state.get());
Lockee68ac652019-05-06 10:17:33 -06001414 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001415 return skip;
1416}