blob: 45d27bdbfbe36e0a930e1bb658ace60e538f59fd [file] [log] [blame]
Shannon McPhersoncfb16b52021-01-04 14:24:40 -07001/* Copyright (c) 2015-2021 The Khronos Group Inc.
2 * Copyright (c) 2015-2021 Valve Corporation
3 * Copyright (c) 2015-2021 LunarG, Inc.
4 * Copyright (C) 2015-2021 Google Inc.
5 * Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved.
Jasper St. Pierre512613a2019-04-08 16:25:23 -07006 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * Author: Cody Northrop <cnorthrop@google.com>
20 * Author: Michael Lentine <mlentine@google.com>
21 * Author: Tobin Ehlis <tobine@google.com>
22 * Author: Chia-I Wu <olv@google.com>
23 * Author: Chris Forbes <chrisf@ijw.co.nz>
24 * Author: Mark Lobodzinski <mark@lunarg.com>
25 * Author: Ian Elliott <ianelliott@google.com>
26 * Author: Dave Houlton <daveh@lunarg.com>
27 * Author: Dustin Graves <dustin@lunarg.com>
28 * Author: Jeremy Hayes <jeremy@lunarg.com>
29 * Author: Jon Ashburn <jon@lunarg.com>
30 * Author: Karl Schultz <karl@lunarg.com>
31 * Author: Mark Young <marky@lunarg.com>
32 * Author: Mike Schuchardt <mikes@lunarg.com>
33 * Author: Mike Weiblen <mikew@lunarg.com>
34 * Author: Tony Barbour <tony@LunarG.com>
35 * Author: John Zulauf <jzulauf@lunarg.com>
36 * Author: Shannon McPherson <shannon@lunarg.com>
Jeremy Kniagere6827432020-04-01 09:05:56 -060037 * Author: Jeremy Kniager <jeremyk@lunarg.com>
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070038 * Author: Nathaniel Cesario <nathaniel@lunarg.com>
Tobias Hector6663c9b2020-11-05 10:18:02 +000039 * Author: Tobias Hector <tobias.hector@amd.com>
Jasper St. Pierre512613a2019-04-08 16:25:23 -070040 */
41
Jasper St. Pierre512613a2019-04-08 16:25:23 -070042#include "chassis.h"
43#include "core_validation.h"
44
Spencer Fricke507600b2020-03-22 13:23:06 -070045// clang-format off
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070046struct DispatchVuidsCmdDraw : DrawDispatchVuid {
47 DispatchVuidsCmdDraw() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070048 pipeline_bound = "VUID-vkCmdDraw-None-02700";
49 dynamic_state = "VUID-vkCmdDraw-commandBuffer-02701";
50 vertex_binding = "VUID-vkCmdDraw-None-04007";
51 vertex_binding_null = "VUID-vkCmdDraw-None-04008";
52 compatible_pipeline = "VUID-vkCmdDraw-None-02697";
53 render_pass_compatible = "VUID-vkCmdDraw-renderPass-02684";
54 subpass_index = "VUID-vkCmdDraw-subpass-02685";
55 sample_location = "VUID-vkCmdDraw-sampleLocationsEnable-02689";
56 linear_sampler = "VUID-vkCmdDraw-magFilter-04553";
57 cubic_sampler = "VUID-vkCmdDraw-None-02692";
58 viewport_count = "VUID-vkCmdDraw-viewportCount-03417";
59 scissor_count = "VUID-vkCmdDraw-scissorCount-03418";
60 viewport_scissor_count = "VUID-vkCmdDraw-viewportCount-03419";
61 primitive_topology = "VUID-vkCmdDraw-primitiveTopology-03420";
62 corner_sampled_address_mode = "VUID-vkCmdDraw-flags-02696";
63 subpass_input = "VUID-vkCmdDraw-None-02686";
64 imageview_atomic = "VUID-vkCmdDraw-None-02691";
65 push_constants_set = "VUID-vkCmdDraw-None-02698";
66 image_subresources = "VUID-vkCmdDraw-None-04584";
67 descriptor_valid = "VUID-vkCmdDraw-None-02699";
68 sampler_imageview_type = "VUID-vkCmdDraw-None-02702";
69 sampler_implicitLod_dref_proj = "VUID-vkCmdDraw-None-02703";
70 sampler_bias_offset = "VUID-vkCmdDraw-None-02704";
71 vertex_binding_attribute = "VUID-vkCmdDraw-None-02721";
72 dynamic_state_setting_commands = "VUID-vkCmdDraw-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -070073 rasterization_samples = "VUID-vkCmdDraw-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070074 unprotected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02707";
75 protected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02712";
76 max_multiview_instance_index = "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -070077 img_filter_cubic = "VUID-vkCmdDraw-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070078 filter_cubic = "VUID-vkCmdDraw-filterCubic-02694";
79 filter_cubic_min_max = "VUID-vkCmdDraw-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +000080 viewport_count_primitive_shading_rate = "VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -070081 patch_control_points = "VUID-vkCmdDraw-None-04875";
82 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
83 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
84 logic_op = "VUID-vkCmdDraw-logicOp-04878";
85 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Piers Daniell924cd832021-05-18 13:48:47 -060086 vertex_input_binding_stride = "VUID-vkCmdDraw-pStrides-04884";
87 vertex_input = kVUID_Core_CmdDraw_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +020088 blend_enable = "VUID-vkCmdDraw-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -050089 dynamic_rendering_view_mask = "VUID-vkCmdDraw-viewMask-06178";
90 dynamic_rendering_color_count = "VUID-vkCmdDraw-colorAttachmentCount-06179";
91 dynamic_rendering_color_formats = "VUID-vkCmdDraw-colorAttachmentCount-06180";
92 dynamic_rendering_depth_format = "VUID-vkCmdDraw-pDepthAttachment-06181";
93 dynamic_rendering_stencil_format = "VUID-vkCmdDraw-pStencilAttachment-06182";
94 dynamic_rendering_fsr = "VUID-vkCmdDraw-imageView-06183";
95 dynamic_rendering_fdm = "VUID-vkCmdDraw-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -050096 dynamic_rendering_color_sample = "VUID-vkCmdDraw-colorAttachmentCount-06185";
97 dynamic_rendering_depth_sample = "VUID-vkCmdDraw-pDepthAttachment-06186";
98 dynamic_rendering_stencil_sample = "VUID-vkCmdDraw-pStencilAttachment-06187";
99 dynamic_rendering_multi_sample = "VUID-vkCmdDraw-colorAttachmentCount-06188";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700100 }
101};
102
Tony-LunarG4490de42021-06-21 15:49:19 -0600103struct DispatchVuidsCmdDrawMultiEXT : DrawDispatchVuid {
104 DispatchVuidsCmdDrawMultiEXT() : DrawDispatchVuid() {
105 pipeline_bound = "VUID-vkCmdDrawMultiEXT-None-02700";
106 dynamic_state = "VUID-vkCmdDrawMultiEXT-commandBuffer-02701";
107 vertex_binding = "VUID-vkCmdDrawMultiEXT-None-04007";
108 vertex_binding_null = "VUID-vkCmdDrawMultiEXT-None-04008";
109 compatible_pipeline = "VUID-vkCmdDrawMultiEXT-None-02697";
110 render_pass_compatible = "VUID-vkCmdDrawMultiEXT-renderPass-02684";
111 subpass_index = "VUID-vkCmdDrawMultiEXT-subpass-02685";
112 sample_location = "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-02689";
113 linear_sampler = "VUID-vkCmdDrawMultiEXT-magFilter-04553";
114 cubic_sampler = "VUID-vkCmdDrawMultiEXT-None-02692";
115 viewport_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03417";
116 scissor_count = "VUID-vkCmdDrawMultiEXT-scissorCount-03418";
117 viewport_scissor_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03419";
118 primitive_topology = "VUID-vkCmdDrawMultiEXT-primitiveTopology-03420";
119 corner_sampled_address_mode = "VUID-vkCmdDrawMultiEXT-flags-02696";
120 subpass_input = "VUID-vkCmdDrawMultiEXT-None-02686";
121 imageview_atomic = "VUID-vkCmdDrawMultiEXT-None-02691";
122 push_constants_set = "VUID-vkCmdDrawMultiEXT-None-02698";
123 image_subresources = "VUID-vkCmdDrawMultiEXT-None-04584";
124 descriptor_valid = "VUID-vkCmdDrawMultiEXT-None-02699";
125 sampler_imageview_type = "VUID-vkCmdDrawMultiEXT-None-02702";
126 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiEXT-None-02703";
127 sampler_bias_offset = "VUID-vkCmdDrawMultiEXT-None-02704";
128 vertex_binding_attribute = "VUID-vkCmdDrawMultiEXT-None-02721";
129 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiEXT-None-02859";
130 rasterization_samples = "VUID-vkCmdDrawMultiEXT-rasterizationSamples-04740";
131 unprotected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02707";
132 protected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02712";
133 max_multiview_instance_index = "VUID-vkCmdDrawMultiEXT-maxMultiviewInstanceIndex-02688";
134 img_filter_cubic = "VUID-vkCmdDrawMultiEXT-None-02693";
135 filter_cubic = "VUID-vkCmdDrawMultiEXT-filterCubic-02694";
136 filter_cubic_min_max = "VUID-vkCmdDrawMultiEXT-filterCubicMinmax-02695";
137 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
138 patch_control_points = "VUID-vkCmdDrawMultiEXT-None-04875";
139 rasterizer_discard_enable = "VUID-vkCmdDrawMultiEXT-None-04876";
140 depth_bias_enable = "VUID-vkCmdDrawMultiEXT-None-04877";
141 logic_op = "VUID-vkCmdDrawMultiEXT-logicOp-04878";
142 primitive_restart_enable = "VUID-vkCmdDrawMultiEXT-None-04879";
143 vertex_input_binding_stride = "VUID-vkCmdDrawMultiEXT-pStrides-04884";
144 vertex_input = kVUID_Core_CmdDrawMultiEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200145 blend_enable = "VUID-vkCmdDrawMultiEXT-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500146 dynamic_rendering_view_mask = "VUID-vkCmdDrawMultiEXT-viewMask-06178";
147 dynamic_rendering_color_count = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06179";
148 dynamic_rendering_color_formats = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06180";
149 dynamic_rendering_depth_format = "VUID-vkCmdDrawMultiEXT-pDepthAttachment-06181";
150 dynamic_rendering_stencil_format = "VUID-vkCmdDrawMultiEXT-pStencilAttachment-06182";
151 dynamic_rendering_fsr = "VUID-vkCmdDrawMultiEXT-imageView-06183";
152 dynamic_rendering_fdm = "VUID-vkCmdDrawMultiEXT-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500153 dynamic_rendering_color_sample = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06185";
154 dynamic_rendering_depth_sample = "VUID-vkCmdDrawMultiEXT-pDepthAttachment-06186";
155 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawMultiEXT-pStencilAttachment-06187";
156 dynamic_rendering_multi_sample = "VUID-vkCmdDrawMultiEXT-colorAttachmentCount-06188";
Tony-LunarG4490de42021-06-21 15:49:19 -0600157 }
158};
159
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700160struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
161 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700162 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
163 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
164 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
165 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
166 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
167 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
168 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
169 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
170 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
171 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
172 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
173 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
174 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
175 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
176 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
177 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
178 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
179 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
180 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
181 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
182 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
183 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
184 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
185 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
186 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700187 rasterization_samples = "VUID-vkCmdDrawIndexed-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700188 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
189 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
190 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700191 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700192 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
193 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000194 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600195 patch_control_points = "VUID-vkCmdDrawIndexed-None-04875";
196 rasterizer_discard_enable = "VUID-vkCmdDrawIndexed-None-04876";
197 depth_bias_enable = "VUID-vkCmdDrawIndexed-None-04877";
198 logic_op = "VUID-vkCmdDrawIndexed-logicOp-04878";
199 primitive_restart_enable = "VUID-vkCmdDrawIndexed-None-04879";
200 vertex_input_binding_stride = "VUID-vkCmdDrawIndexed-pStrides-04884";
201 vertex_input = kVUID_Core_CmdDrawIndexed_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200202 blend_enable = "VUID-vkCmdDrawIndexed-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500203 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndexed-viewMask-06178";
204 dynamic_rendering_color_count = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06179";
205 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06180";
206 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndexed-pDepthAttachment-06181";
207 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndexed-pStencilAttachment-06182";
208 dynamic_rendering_fsr = "VUID-vkCmdDrawIndexed-imageView-06183";
209 dynamic_rendering_fdm = "VUID-vkCmdDrawIndexed-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500210 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06185";
211 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndexed-pDepthAttachment-06186";
212 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndexed-pStencilAttachment-06187";
213 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndexed-colorAttachmentCount-06188";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700214 }
215};
216
Tony-LunarG4490de42021-06-21 15:49:19 -0600217struct DispatchVuidsCmdDrawMultiIndexedEXT : DrawDispatchVuid {
218 DispatchVuidsCmdDrawMultiIndexedEXT() : DrawDispatchVuid() {
219 pipeline_bound = "VUID-vkCmdDrawMultiIndexedEXT-None-02700";
220 dynamic_state = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02701";
221 vertex_binding = "VUID-vkCmdDrawMultiIndexedEXT-None-04007";
222 vertex_binding_null = "VUID-vkCmdDrawMultiIndexedEXT-None-04008";
223 compatible_pipeline = "VUID-vkCmdDrawMultiIndexedEXT-None-02697";
224 render_pass_compatible = "VUID-vkCmdDrawMultiIndexedEXT-renderPass-02684";
225 subpass_index = "VUID-vkCmdDrawMultiIndexedEXT-subpass-02685";
226 sample_location = "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-02689";
227 linear_sampler = "VUID-vkCmdDrawMultiIndexedEXT-magFilter-04553";
228 cubic_sampler = "VUID-vkCmdDrawMultiIndexedEXT-None-02692";
229 viewport_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03417";
230 scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-scissorCount-03418";
231 viewport_scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03419";
232 primitive_topology = "VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-03420";
233 corner_sampled_address_mode = "VUID-vkCmdDrawMultiIndexedEXT-flags-02696";
234 subpass_input = "VUID-vkCmdDrawMultiIndexedEXT-None-02686";
235 imageview_atomic = "VUID-vkCmdDrawMultiIndexedEXT-None-02691";
236 push_constants_set = "VUID-vkCmdDrawMultiIndexedEXT-None-02698";
237 image_subresources = "VUID-vkCmdDrawMultiIndexedEXT-None-04584";
238 descriptor_valid = "VUID-vkCmdDrawMultiIndexedEXT-None-02699";
239 sampler_imageview_type = "VUID-vkCmdDrawMultiIndexedEXT-None-02702";
240 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiIndexedEXT-None-02703";
241 sampler_bias_offset = "VUID-vkCmdDrawMultiIndexedEXT-None-02704";
242 vertex_binding_attribute = "VUID-vkCmdDrawMultiIndexedEXT-None-02721";
243 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiIndexedEXT-None-02859";
244 rasterization_samples = "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-04740";
245 unprotected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02707";
246 protected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712";
247 max_multiview_instance_index = "VUID-vkCmdDrawMultiIndexedEXT-maxMultiviewInstanceIndex-02688";
248 img_filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-None-02693";
249 filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-filterCubic-02694";
250 filter_cubic_min_max = "VUID-vkCmdDrawMultiIndexedEXT-filterCubicMinmax-02695";
251 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
252 patch_control_points = "VUID-vkCmdDrawMultiIndexedEXT-None-04875";
253 rasterizer_discard_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04876";
254 depth_bias_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04877";
255 logic_op = "VUID-vkCmdDrawMultiIndexedEXT-logicOp-04878";
256 primitive_restart_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04879";
257 vertex_input_binding_stride = "VUID-vkCmdDrawMultiIndexedEXT-pStrides-04884";
258 vertex_input = kVUID_Core_CmdDrawMultiIndexedEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200259 blend_enable = "VUID-vkCmdDrawMultiIndexedEXT-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500260 dynamic_rendering_view_mask = "VUID-vkCmdDrawMultiIndexedEXT-viewMask-06178";
261 dynamic_rendering_color_count = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06179";
262 dynamic_rendering_color_formats = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06180";
263 dynamic_rendering_depth_format = "VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06181";
264 dynamic_rendering_stencil_format = "VUID-vkCmdDrawMultiIndexedEXT-pStencilAttachment-06182";
265 dynamic_rendering_fsr = "VUID-vkCmdDrawMultiIndexedEXT-imageView-06183";
266 dynamic_rendering_fdm = "VUID-vkCmdDrawMultiIndexedEXT-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500267 dynamic_rendering_color_sample = "VUID-vkCmdDrawMultiIndexedEXT-colorAttachmentCount-06185";
268 dynamic_rendering_depth_sample = "VUID-vkCmdDrawMultiIndexedEXT-pDepthAttachment-06186";
269 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06187";
270 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06188";
Tony-LunarG4490de42021-06-21 15:49:19 -0600271 }
272};
273
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700274struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
275 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700276 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
277 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
278 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
279 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
280 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
281 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
282 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
283 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
284 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
285 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
286 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
287 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
288 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
289 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
290 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
291 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
292 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
293 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
294 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
295 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
296 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
297 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
298 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
299 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
300 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
301 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
302 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
303 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700304 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700305 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
306 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700307 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700308 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
309 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000310 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600311 patch_control_points = "VUID-vkCmdDrawIndirect-None-04875";
312 rasterizer_discard_enable = "VUID-vkCmdDrawIndirect-None-04876";
313 depth_bias_enable = "VUID-vkCmdDrawIndirect-None-04877";
314 logic_op = "VUID-vkCmdDrawIndirect-logicOp-04878";
315 primitive_restart_enable = "VUID-vkCmdDrawIndirect-None-04879";
316 vertex_input_binding_stride = "VUID-vkCmdDrawIndirect-pStrides-04884";
317 vertex_input = kVUID_Core_CmdDrawIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200318 blend_enable = "VUID-vkCmdDrawIndirect-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500319 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndirect-viewMask-06178";
320 dynamic_rendering_color_count = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06179";
321 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06180";
322 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndirect-pDepthAttachment-06181";
323 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndirect-pStencilAttachment-06182";
324 dynamic_rendering_fsr = "VUID-vkCmdDrawIndirect-imageView-06183";
325 dynamic_rendering_fdm = "VUID-vkCmdDrawIndirect-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500326 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06185";
327 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndirect-pDepthAttachment-06186";
328 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndirect-pStencilAttachment-06187";
329 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndirect-colorAttachmentCount-06188";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700330 }
331};
332
333struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
334 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700335 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
336 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
337 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
338 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
339 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
340 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
341 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
342 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
343 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
344 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
345 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
346 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
347 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
348 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
349 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
350 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
351 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
352 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
353 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
354 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
355 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
356 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
357 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
358 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
359 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
360 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
361 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
362 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700363 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700364 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
365 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700366 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700367 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
368 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000369 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600370 patch_control_points = "VUID-vkCmdDrawIndexedIndirect-None-04875";
371 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirect-None-04876";
372 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirect-None-04877";
373 logic_op = "VUID-vkCmdDrawIndexedIndirect-logicOp-04878";
374 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirect-None-04879";
375 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirect-pStrides-04884";
376 vertex_input = kVUID_Core_CmdDrawIndexedIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200377 blend_enable = "VUID-vkCmdDrawIndexedIndirect-blendEnable-04727";
Aaron Hagan92a44f82021-11-19 09:34:56 -0500378 dynamic_rendering_view_mask = "VUID-vkCmdDrawIndexedIndirect-viewMask-06178";
379 dynamic_rendering_color_count = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06179";
380 dynamic_rendering_color_formats = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06180";
381 dynamic_rendering_depth_format = "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06181";
382 dynamic_rendering_stencil_format = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06182";
383 dynamic_rendering_fsr = "VUID-vkCmdDrawIndexedIndirect-imageView-06183";
384 dynamic_rendering_fdm = "VUID-vkCmdDrawIndexedIndirect-imageView-06184";
Aaron Hagan09a0e172021-11-19 21:18:33 -0500385 dynamic_rendering_color_sample = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06185";
386 dynamic_rendering_depth_sample = "VUID-vkCmdDrawIndexedIndirect-pDepthAttachment-06186";
387 dynamic_rendering_stencil_sample = "VUID-vkCmdDrawIndexedIndirect-pStencilAttachment-06187";
388 dynamic_rendering_multi_sample = "VUID-vkCmdDrawIndexedIndirect-colorAttachmentCount-06188";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700389 }
390};
391
392struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
393 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700394 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700395 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700396 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
397 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
398 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
399 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
400 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
401 push_constants_set = "VUID-vkCmdDispatch-None-02698";
402 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
403 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
404 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
405 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
406 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
407 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
408 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700409 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700410 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
411 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
412 }
413};
414
415struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
416 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700417 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700418 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700419 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
420 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
421 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
422 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
423 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
424 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
425 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
426 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
427 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
428 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
429 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
430 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
431 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
432 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
433 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700434 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700435 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
436 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
437 }
438};
439
440struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
441 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700442 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
443 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
444 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
445 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
446 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
447 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
448 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
449 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
450 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
451 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
452 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
453 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
454 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
455 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
456 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
457 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
458 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
459 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
460 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
461 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
462 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
463 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
464 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
465 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
466 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
467 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
468 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
469 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700470 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700471 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
472 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700473 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700474 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
475 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000476 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600477 patch_control_points = "VUID-vkCmdDrawIndirectCount-None-04875";
478 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectCount-None-04876";
479 depth_bias_enable = "VUID-vkCmdDrawIndirectCount-None-04877";
480 logic_op = "VUID-vkCmdDrawIndirectCount-logicOp-04878";
481 primitive_restart_enable = "VUID-vkCmdDrawIndirectCount-None-04879";
482 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectCount-pStrides-04884";
483 vertex_input = kVUID_Core_CmdDrawIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200484 blend_enable = "VUID-vkCmdDrawIndirectCount-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700485 }
486};
487
488struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
489 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700490 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
491 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
492 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
493 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
494 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
495 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
496 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
497 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
498 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
499 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
500 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
501 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
502 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
503 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
504 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
505 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
506 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
507 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
508 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
509 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
510 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
511 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
512 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
513 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
514 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
515 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
516 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
517 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700518 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700519 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
520 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700521 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700522 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
523 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000524 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600525 patch_control_points = "VUID-vkCmdDrawIndexedIndirectCount-None-04875";
526 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04876";
527 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04877";
528 logic_op = "VUID-vkCmdDrawIndexedIndirectCount-logicOp-04878";
529 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04879";
530 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirectCount-pStrides-04884";
531 vertex_input = kVUID_Core_CmdDrawIndexedIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200532 blend_enable = "VUID-vkCmdDrawIndexedIndirectCount-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700533 }
534};
535
536struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
537 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700538 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
539 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
540 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
541 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
542 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
543 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
544 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
545 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
546 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
547 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
548 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
549 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
550 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
551 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700552 ray_query_protected_cb = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700553 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700554 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
555 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
556 }
557};
558
559struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
560 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700561 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
562 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
563 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
564 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
565 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
566 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
567 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
568 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
569 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
570 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
571 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
572 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
573 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
574 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700575 ray_query_protected_cb = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700576 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700577 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
578 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
579 }
580};
581
582struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
583 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700584 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
585 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
586 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
587 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
588 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700589 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
590 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700591 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
592 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
593 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
594 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
595 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
596 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
597 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
598 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
599 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700600 ray_query_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700601 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700602 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
603 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
604 }
605};
606
607struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
608 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700609 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
610 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
611 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
612 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
613 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
614 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
615 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
616 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
617 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
618 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
619 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
620 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
621 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
622 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
623 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
624 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
625 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
626 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
627 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
628 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
629 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
630 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700631 rasterization_samples = "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700632 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
633 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700634 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700635 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
636 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000637 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600638 patch_control_points = "VUID-vkCmdDrawMeshTasksNV-None-04875";
639 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksNV-None-04876";
640 depth_bias_enable = "VUID-vkCmdDrawMeshTasksNV-None-04877";
641 logic_op = "VUID-vkCmdDrawMeshTasksNV-logicOp-04878";
642 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksNV-None-04879";
643 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksNV-pStrides-04884";
644 vertex_input = kVUID_Core_CmdDrawMeshTasksNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200645 blend_enable = "VUID-vkCmdDrawMeshTasksNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700646 }
647};
648
649struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
650 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700651 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
652 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
653 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
654 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
655 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
656 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
657 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
658 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
659 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
660 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
661 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
662 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
663 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
664 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
665 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
666 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
667 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
668 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
669 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
670 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
671 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
672 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
673 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
674 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
675 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700676 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700677 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
678 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700679 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700680 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
681 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000682 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600683 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04875";
684 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04876";
685 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04877";
686 logic_op = "VUID-vkCmdDrawMeshTasksIndirectNV-logicOp-04878";
687 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04879";
688 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectNV-pStrides-04884";
689 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200690 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700691 }
692};
693
694struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
695 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700696 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
697 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
698 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
699 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
700 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
701 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
702 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
703 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
704 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
705 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
706 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
707 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
708 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
709 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
710 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
711 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
712 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
713 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
714 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
715 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
716 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
717 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
718 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
719 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
720 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700721 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700722 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
723 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700724 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700725 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
726 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000727 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600728 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04875";
729 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04876";
730 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04877";
731 logic_op = "VUID-vkCmdDrawMeshTasksIndirectCountNV-logicOp-04878";
732 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04879";
733 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectCountNV-pStrides-04884";
734 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectCountNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200735 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700736 }
737};
738
739struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
740 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700741 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
742 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
743 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
744 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
745 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
746 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
747 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
748 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
749 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
750 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
751 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
sfricke-samsungb091d4e2021-04-18 23:15:59 -0700752 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567",
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700753 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
754 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
755 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
756 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
757 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
758 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
759 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
760 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
761 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
762 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
763 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
764 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
765 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
766 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
767 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
768 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700769 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700770 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
771 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700772 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700773 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
774 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000775 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600776 patch_control_points = "VUID-vkCmdDrawIndirectByteCountEXT-None-04875";
777 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04876";
778 depth_bias_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04877";
779 logic_op = "VUID-vkCmdDrawIndirectByteCountEXT-logicOp-04878";
780 primitive_restart_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04879";
781 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectByteCountEXT-pStrides-04884";
782 vertex_input = kVUID_Core_CmdDrawIndirectByteCountEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200783 blend_enable = "VUID-vkCmdDrawIndirectByteCountEXT-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700784 }
785};
786
787struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
788 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700789 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700790 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700791 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
792 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
793 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
794 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
795 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
796 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
797 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
798 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
799 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
800 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
801 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
802 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
sfricke-samsunge79d0892021-06-17 08:56:22 -0700803 protected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700804 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700805 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
806 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
807 }
808};
809
810// 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 -0700811static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700812 {CMD_DRAW, DispatchVuidsCmdDraw()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600813 {CMD_DRAWMULTIEXT, DispatchVuidsCmdDrawMultiEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700814 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600815 {CMD_DRAWMULTIINDEXEDEXT, DispatchVuidsCmdDrawMultiIndexedEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700816 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
817 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
818 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
819 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
820 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700821 {CMD_DRAWINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700822 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700823 {CMD_DRAWINDEXEDINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndexedIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700824 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
825 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
826 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
827 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
828 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
829 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
830 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
831 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700832 {CMD_DISPATCHBASEKHR, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700833 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700834 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700835};
836// clang-format on
837
838// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
839const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700840 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
841 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700842 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700843 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700844 }
845}
846
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700847// Generic function to handle validation for all CmdDraw* type functions
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700848bool CoreChecks::ValidateCmdDrawType(const CMD_BUFFER_STATE &cb_state, bool indexed, VkPipelineBindPoint bind_point,
sfricke-samsung85584a72021-09-30 21:43:38 -0700849 CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700850 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700851 skip |= ValidateCmd(&cb_state, cmd_type);
852 skip |= ValidateCmdBufDrawState(&cb_state, cmd_type, indexed, bind_point);
853 skip |= ValidateCmdRayQueryState(&cb_state, cmd_type, bind_point);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700854 return skip;
855}
856
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700857bool CoreChecks::ValidateCmdDrawInstance(const CMD_BUFFER_STATE &cb_node, uint32_t instanceCount, uint32_t firstInstance,
sfricke-samsung85584a72021-09-30 21:43:38 -0700858 CMD_TYPE cmd_type) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600859 bool skip = false;
860 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
sfricke-samsung85584a72021-09-30 21:43:38 -0700861 const char *caller = CommandTypeString(cmd_type);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600862
863 // Verify maxMultiviewInstanceIndex
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700864 if (cb_node.activeRenderPass && cb_node.activeRenderPass->renderPass() && enabled_features.multiview_features.multiview &&
locke-lunarg3fa463a2020-10-23 16:39:04 -0600865 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700866 LogObjectList objlist(cb_node.Handle());
867 objlist.add(cb_node.activeRenderPass->Handle());
locke-lunarg3fa463a2020-10-23 16:39:04 -0600868 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700869 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32
870 ", but instanceCount: %" PRIu32 "and firstInstance: %" PRIu32 ".",
871 caller, report_data->FormatHandle(cb_node.activeRenderPass->Handle()).c_str(),
locke-lunarg3fa463a2020-10-23 16:39:04 -0600872 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
873 }
874 return skip;
875}
876
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700877bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500878 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600879 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700880 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
881 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAW);
882 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600883 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700884}
885
Tony-LunarG4490de42021-06-21 15:49:19 -0600886bool CoreChecks::PreCallValidateCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
887 const VkMultiDrawInfoEXT *pVertexInfo, uint32_t instanceCount,
888 uint32_t firstInstance, uint32_t stride) const {
889 bool skip = false;
890 if (!enabled_features.multi_draw_features.multiDraw) {
891 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-None-04933",
892 "vkCmdDrawMultiEXT(): The multiDraw feature must be enabled to "
893 "call this command.");
894 }
895 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
896 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-drawCount-04934",
897 "vkCmdDrawMultiEXT(): parameter, uint32_t drawCount (%" PRIu32
898 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (%" PRIu32 ").",
899 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
900 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700901 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
902 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIEXT);
903 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIEXT);
Tony-LunarG4490de42021-06-21 15:49:19 -0600904 return skip;
905}
906
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700907bool CoreChecks::ValidateCmdDrawIndexedBufferSize(const CMD_BUFFER_STATE &cb_state, uint32_t indexCount, uint32_t firstIndex,
908 const char *caller, const char *first_index_vuid) const {
Tony-LunarG4490de42021-06-21 15:49:19 -0600909 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700910 if (cb_state.status & CBSTATUS_INDEX_BUFFER_BOUND) {
Tony-LunarG4490de42021-06-21 15:49:19 -0600911 unsigned int index_size = 0;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700912 const auto &index_buffer_binding = cb_state.index_buffer_binding;
Tony-LunarG4490de42021-06-21 15:49:19 -0600913 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
914 index_size = 2;
915 }
916 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
917 index_size = 4;
918 }
919 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
920 index_size = 1;
921 }
922 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
923 if (end_offset > index_buffer_binding.size) {
924 skip |= LogError(index_buffer_binding.buffer_state->buffer(), first_index_vuid,
925 "%s: index size (%u) * (firstIndex (%u) + indexCount (%u)) "
926 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
927 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
928 caller, index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset,
929 index_buffer_binding.size);
930 }
931 }
932 return skip;
933}
934
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700935bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500936 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600937 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700938 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
939 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDEXED);
940 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED);
941 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, indexCount, firstIndex, "vkCmdDrawIndexed()",
Tony-LunarG4490de42021-06-21 15:49:19 -0600942 "VUID-vkCmdDrawIndexed-firstIndex-04932");
943 return skip;
944}
945
946bool CoreChecks::PreCallValidateCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
947 const VkMultiDrawIndexedInfoEXT *pIndexInfo, uint32_t instanceCount,
948 uint32_t firstInstance, uint32_t stride,
949 const int32_t *pVertexOffset) const {
950 bool skip = false;
951 if (!enabled_features.multi_draw_features.multiDraw) {
952 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-None-04937",
953 "vkCmdDrawMultiIndexedEXT(): The multiDraw feature must be enabled to "
954 "call this command.");
955 }
956 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
957 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939",
958 "vkCmdDrawMultiIndexedEXT(): parameter, uint32_t drawCount (0x%" PRIu32
959 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (0x%" PRIu32 ").",
960 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
961 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700962 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
963 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIINDEXEDEXT);
964 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIINDEXEDEXT);
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200965 const auto info_bytes = reinterpret_cast<const char *>(pIndexInfo);
Tony-LunarG4490de42021-06-21 15:49:19 -0600966 for (uint32_t i = 0; i < drawCount; i++) {
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200967 const auto info_ptr = reinterpret_cast<const VkMultiDrawIndexedInfoEXT *>(info_bytes + i * stride);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700968 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, info_ptr->indexCount, info_ptr->firstIndex,
Tony-LunarG4490de42021-06-21 15:49:19 -0600969 "vkCmdDrawMultiIndexedEXT()", "VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700970 }
971 return skip;
972}
973
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700974bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
975 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700976 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
977 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -0600978 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700979 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700980 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600981 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
982 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700983 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
984 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
985 buffer_state);
986 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
987 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600988 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%" PRIu64 ") is not less than "
989 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700990 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600991 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700992 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
993 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
994 return skip;
995}
996
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700997bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700998 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700999 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1000 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001001 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001002 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDEXEDINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001003 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001004 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
1005 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
1006 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001007 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
1008 offset, buffer_state);
1009 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
1010 skip |= LogError(
1011 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -06001012 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%" PRIu64 ") is not less than "
1013 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -07001014 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -06001015 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001016 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
1017 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
1018 // 'buffer'.
1019 return skip;
1020}
1021
Jeff Bolz5c801d12019-10-09 10:38:45 -05001022bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -06001023 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001024 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1025 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH);
Lockef39c0772019-04-03 14:40:02 -06001026 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001027}
1028
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001029bool CoreChecks::ValidateBaseGroups(const CMD_BUFFER_STATE &cb_state, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001030 const char *apiName) const {
1031 bool skip = false;
1032 if (baseGroupX || baseGroupY || baseGroupZ) {
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001033 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001034 const auto *pipeline_state = cb_state.lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben11af9792021-08-20 10:20:09 -06001035 if (pipeline_state && !(pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001036 skip |= LogError(cb_state.Handle(), "VUID-vkCmdDispatchBase-baseGroupX-00427",
Tony-LunarGf825e6d2020-12-16 13:05:17 -07001037 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
1038 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
1039 apiName);
1040 }
1041 }
1042 return skip;
1043}
1044
locke-lunarg25b6c352020-08-06 17:44:18 -06001045bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
1046 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
1047 uint32_t groupCountZ) const {
1048 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001049 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1050 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE);
1051 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -06001052 return skip;
1053}
1054
1055bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
1056 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
1057 uint32_t groupCountZ) const {
1058 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001059 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1060 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASEKHR);
1061 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -06001062 return skip;
1063}
1064
Jeff Bolz5c801d12019-10-09 10:38:45 -05001065bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001066 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1067 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001068 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001069 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DISPATCHINDIRECT);
Tony-LunarGda555b52021-01-06 13:43:49 -07001070 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
1071 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
1072 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
1073 "size of the buffer");
1074 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001075 return skip;
1076}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001077bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1078 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001079 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001080 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001081 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001082 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1083 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001084 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001085 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1086 "call this command.",
1087 apiName);
1088 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001089 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride,
1090 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001091 if (maxDrawCount > 1) {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001092 const auto buffer_state = Get<BUFFER_STATE>(buffer);
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001093 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride,
1094 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), maxDrawCount, offset,
1095 buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001096 }
1097
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001098 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1099 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1100 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1101 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001102 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Tony-LunarG83544c72020-01-17 12:30:19 -07001103 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -07001104 skip |=
1105 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
1106 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001107 return skip;
1108}
1109
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001110bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1111 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1112 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001113 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001114 CMD_DRAWINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001115}
1116
1117bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1118 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1119 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001120 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001121 CMD_DRAWINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001122}
1123
1124bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1125 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001126 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001127 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001128 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001129 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1130 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001131 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001132 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1133 "call this command.",
1134 apiName);
1135 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001136 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride,
1137 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001138 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Lockee68ac652019-05-06 10:17:33 -06001139 if (maxDrawCount > 1) {
Mike Schuchardt65847d92019-12-20 13:50:47 -08001140 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001141 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), maxDrawCount,
1142 offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001143 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001144 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1145 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1146 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001147 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
sfricke-samsungf692b972020-05-02 08:00:45 -07001148 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001149 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001150 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -08001151 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001152 return skip;
1153}
1154
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001155bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1156 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1157 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001158 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001159 CMD_DRAWINDEXEDINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001160}
1161
1162bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1163 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1164 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001165 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001166 CMD_DRAWINDEXEDINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001167}
1168
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001169bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
1170 uint32_t firstInstance, VkBuffer counterBuffer,
1171 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
1172 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001173 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001174 if (!enabled_features.transform_feedback_features.transformFeedback) {
1175 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
1176 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
1177 }
sfricke-samsung45996a42021-09-16 13:45:27 -07001178 if (IsExtEnabled(device_extensions.vk_ext_transform_feedback) &&
1179 !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -08001180 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001181 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
1182 "vkCmdDrawIndirectByteCountEXT()");
1183 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001184 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1185 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT);
1186 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT);
1187 const auto counter_buffer_state = Get<BUFFER_STATE>(counterBuffer);
1188 skip |= ValidateIndirectCmd(*cb_state, *counter_buffer_state, CMD_DRAWINDIRECTBYTECOUNTEXT);
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001189 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001190}
1191
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001192bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1193 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1194 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1195 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1196 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1197 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1198 uint32_t width, uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001199 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001200 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001201 auto callable_shader_buffer_state = Get<BUFFER_STATE>(callableShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001202 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
1203 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
1204 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
1205 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
1206 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
1207 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001208 auto hit_shader_buffer_state = Get<BUFFER_STATE>(hitShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001209 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
1210 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
1211 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
1212 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
1213 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
1214 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001215 auto miss_shader_buffer_state = Get<BUFFER_STATE>(missShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001216 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
1217 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
1218 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001219 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001220 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
1221 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001222 auto raygen_shader_buffer_state = Get<BUFFER_STATE>(raygenShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001223 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
1224 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
1225 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001226 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001227 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
1228 }
sourav parmarcd5fb182020-07-17 12:58:44 -07001229
sourav parmar30e19392020-12-02 16:57:21 -08001230 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
1231 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001232 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmar30e19392020-12-02 16:57:21 -08001233 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
1234 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -07001235 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001236 return skip;
1237}
1238
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001239bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001240 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1241 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1242 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1243 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001244 uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001245 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001246 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001247 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1248 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001249 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001250 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1251 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1252 } else { // bound to valid RT pipeline
Jeremy Gebben11af9792021-08-20 10:20:09 -06001253 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001254 if (!pHitShaderBindingTable->deviceAddress) {
1255 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1256 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1257 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1258 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1259 }
1260 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1261 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1262 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1263 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1264 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1265 "execute an intersection shader must not be set to zero.");
1266 }
1267 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001268 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001269 if (!pHitShaderBindingTable->deviceAddress) {
1270 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1271 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1272 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1273 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1274 }
1275 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1276 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1277 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1278 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1279 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1280 "execute a closest hit shader must not be set to zero.");
1281 }
1282 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001283 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001284 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1285 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1286 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1287 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1288 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1289 "execute an any hit shader must not be set to zero.");
1290 }
1291 }
1292 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001293 return skip;
1294}
1295
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001296bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001297 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1298 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1299 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1300 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1301 VkDeviceAddress indirectDeviceAddress) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001302 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001303 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001304 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001305 const auto *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001306 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001307 skip |=
1308 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1309 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1310 } else { // valid bind point
Jeremy Gebben11af9792021-08-20 10:20:09 -06001311 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001312 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1313 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1314 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1315 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1316 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1317 }
1318 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1319 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1320 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1321 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1322 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1323 "execute an intersection shader must not be set to zero.");
1324 }
1325 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001326 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001327 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1328 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1329 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1330 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1331 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1332 }
1333 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1334 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1335 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1336 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1337 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1338 "execute a closest hit shader must not be set to zero.");
1339 }
1340 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001341 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001342 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1343 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1344 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1345 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1346 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1347 "execute an any hit shader must not be set to zero.");
1348 }
1349 }
1350 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001351 return skip;
1352}
1353
Jeff Bolz5c801d12019-10-09 10:38:45 -05001354bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001355 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1356 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001357 return skip;
1358}
1359
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001360bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001361 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001362 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1363 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001364 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001365 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTNV);
Lockee68ac652019-05-06 10:17:33 -06001366 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001367 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1368 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1369 drawCount, offset, buffer_state);
1370 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001371 return skip;
1372}
1373
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001374bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1375 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001376 uint32_t maxDrawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001377 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1378 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001379 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1380 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001381 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001382 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001383 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001384 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001385 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1386 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001387 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1388 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1389 if (maxDrawCount > 1) {
1390 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1391 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1392 maxDrawCount, offset, buffer_state);
1393 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001394 return skip;
1395}