blob: c78d08b5e8eb0e4a065e34b8b0c8e99cb4d05158 [file] [log] [blame]
Shannon McPhersoncfb16b52021-01-04 14:24:40 -07001/* Copyright (c) 2015-2021 The Khronos Group Inc.
2 * Copyright (c) 2015-2021 Valve Corporation
3 * Copyright (c) 2015-2021 LunarG, Inc.
4 * Copyright (C) 2015-2021 Google Inc.
5 * Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved.
Jasper St. Pierre512613a2019-04-08 16:25:23 -07006 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * Author: Cody Northrop <cnorthrop@google.com>
20 * Author: Michael Lentine <mlentine@google.com>
21 * Author: Tobin Ehlis <tobine@google.com>
22 * Author: Chia-I Wu <olv@google.com>
23 * Author: Chris Forbes <chrisf@ijw.co.nz>
24 * Author: Mark Lobodzinski <mark@lunarg.com>
25 * Author: Ian Elliott <ianelliott@google.com>
26 * Author: Dave Houlton <daveh@lunarg.com>
27 * Author: Dustin Graves <dustin@lunarg.com>
28 * Author: Jeremy Hayes <jeremy@lunarg.com>
29 * Author: Jon Ashburn <jon@lunarg.com>
30 * Author: Karl Schultz <karl@lunarg.com>
31 * Author: Mark Young <marky@lunarg.com>
32 * Author: Mike Schuchardt <mikes@lunarg.com>
33 * Author: Mike Weiblen <mikew@lunarg.com>
34 * Author: Tony Barbour <tony@LunarG.com>
35 * Author: John Zulauf <jzulauf@lunarg.com>
36 * Author: Shannon McPherson <shannon@lunarg.com>
Jeremy Kniagere6827432020-04-01 09:05:56 -060037 * Author: Jeremy Kniager <jeremyk@lunarg.com>
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070038 * Author: Nathaniel Cesario <nathaniel@lunarg.com>
Tobias Hector6663c9b2020-11-05 10:18:02 +000039 * Author: Tobias Hector <tobias.hector@amd.com>
Jasper St. Pierre512613a2019-04-08 16:25:23 -070040 */
41
Jasper St. Pierre512613a2019-04-08 16:25:23 -070042#include "chassis.h"
43#include "core_validation.h"
44
Spencer Fricke507600b2020-03-22 13:23:06 -070045// clang-format off
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070046struct DispatchVuidsCmdDraw : DrawDispatchVuid {
47 DispatchVuidsCmdDraw() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070048 pipeline_bound = "VUID-vkCmdDraw-None-02700";
49 dynamic_state = "VUID-vkCmdDraw-commandBuffer-02701";
50 vertex_binding = "VUID-vkCmdDraw-None-04007";
51 vertex_binding_null = "VUID-vkCmdDraw-None-04008";
52 compatible_pipeline = "VUID-vkCmdDraw-None-02697";
53 render_pass_compatible = "VUID-vkCmdDraw-renderPass-02684";
54 subpass_index = "VUID-vkCmdDraw-subpass-02685";
55 sample_location = "VUID-vkCmdDraw-sampleLocationsEnable-02689";
56 linear_sampler = "VUID-vkCmdDraw-magFilter-04553";
57 cubic_sampler = "VUID-vkCmdDraw-None-02692";
58 viewport_count = "VUID-vkCmdDraw-viewportCount-03417";
59 scissor_count = "VUID-vkCmdDraw-scissorCount-03418";
60 viewport_scissor_count = "VUID-vkCmdDraw-viewportCount-03419";
61 primitive_topology = "VUID-vkCmdDraw-primitiveTopology-03420";
62 corner_sampled_address_mode = "VUID-vkCmdDraw-flags-02696";
63 subpass_input = "VUID-vkCmdDraw-None-02686";
64 imageview_atomic = "VUID-vkCmdDraw-None-02691";
65 push_constants_set = "VUID-vkCmdDraw-None-02698";
66 image_subresources = "VUID-vkCmdDraw-None-04584";
67 descriptor_valid = "VUID-vkCmdDraw-None-02699";
68 sampler_imageview_type = "VUID-vkCmdDraw-None-02702";
69 sampler_implicitLod_dref_proj = "VUID-vkCmdDraw-None-02703";
70 sampler_bias_offset = "VUID-vkCmdDraw-None-02704";
71 vertex_binding_attribute = "VUID-vkCmdDraw-None-02721";
72 dynamic_state_setting_commands = "VUID-vkCmdDraw-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -070073 rasterization_samples = "VUID-vkCmdDraw-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070074 unprotected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02707";
75 protected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02712";
76 max_multiview_instance_index = "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -070077 img_filter_cubic = "VUID-vkCmdDraw-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070078 filter_cubic = "VUID-vkCmdDraw-filterCubic-02694";
79 filter_cubic_min_max = "VUID-vkCmdDraw-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +000080 viewport_count_primitive_shading_rate = "VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -070081 patch_control_points = "VUID-vkCmdDraw-None-04875";
82 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
83 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
84 logic_op = "VUID-vkCmdDraw-logicOp-04878";
85 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Piers Daniell924cd832021-05-18 13:48:47 -060086 vertex_input_binding_stride = "VUID-vkCmdDraw-pStrides-04884";
87 vertex_input = kVUID_Core_CmdDraw_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070088 }
89};
90
91struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
92 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070093 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
94 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
95 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
96 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
97 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
98 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
99 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
100 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
101 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
102 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
103 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
104 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
105 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
106 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
107 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
108 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
109 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
110 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
111 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
112 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
113 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
114 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
115 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
116 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
117 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700118 rasterization_samples = "VUID-vkCmdDrawIndexed-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700119 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
120 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
121 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700122 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700123 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
124 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000125 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600126 patch_control_points = "VUID-vkCmdDrawIndexed-None-04875";
127 rasterizer_discard_enable = "VUID-vkCmdDrawIndexed-None-04876";
128 depth_bias_enable = "VUID-vkCmdDrawIndexed-None-04877";
129 logic_op = "VUID-vkCmdDrawIndexed-logicOp-04878";
130 primitive_restart_enable = "VUID-vkCmdDrawIndexed-None-04879";
131 vertex_input_binding_stride = "VUID-vkCmdDrawIndexed-pStrides-04884";
132 vertex_input = kVUID_Core_CmdDrawIndexed_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700133 }
134};
135
136struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
137 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700138 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
139 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
140 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
141 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
142 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
143 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
144 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
145 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
146 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
147 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
148 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
149 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
150 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
151 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
152 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
153 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
154 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
155 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
156 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
157 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
158 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
159 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
160 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
161 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
162 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
163 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
164 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
165 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700166 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700167 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
168 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700169 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700170 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
171 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000172 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600173 patch_control_points = "VUID-vkCmdDrawIndirect-None-04875";
174 rasterizer_discard_enable = "VUID-vkCmdDrawIndirect-None-04876";
175 depth_bias_enable = "VUID-vkCmdDrawIndirect-None-04877";
176 logic_op = "VUID-vkCmdDrawIndirect-logicOp-04878";
177 primitive_restart_enable = "VUID-vkCmdDrawIndirect-None-04879";
178 vertex_input_binding_stride = "VUID-vkCmdDrawIndirect-pStrides-04884";
179 vertex_input = kVUID_Core_CmdDrawIndirect_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700180 }
181};
182
183struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
184 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700185 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
186 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
187 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
188 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
189 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
190 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
191 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
192 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
193 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
194 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
195 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
196 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
197 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
198 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
199 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
200 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
201 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
202 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
203 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
204 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
205 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
206 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
207 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
208 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
209 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
210 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
211 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
212 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700213 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700214 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
215 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700216 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700217 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
218 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000219 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600220 patch_control_points = "VUID-vkCmdDrawIndexedIndirect-None-04875";
221 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirect-None-04876";
222 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirect-None-04877";
223 logic_op = "VUID-vkCmdDrawIndexedIndirect-logicOp-04878";
224 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirect-None-04879";
225 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirect-pStrides-04884";
226 vertex_input = kVUID_Core_CmdDrawIndexedIndirect_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700227 }
228};
229
230struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
231 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700232 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700233 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700234 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
235 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
236 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
237 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
238 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
239 push_constants_set = "VUID-vkCmdDispatch-None-02698";
240 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
241 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
242 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
243 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
244 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
245 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
246 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700247 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700248 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
249 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
250 }
251};
252
253struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
254 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700255 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700256 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700257 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
258 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
259 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
260 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
261 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
262 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
263 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
264 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
265 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
266 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
267 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
268 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
269 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
270 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
271 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700272 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700273 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
274 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
275 }
276};
277
278struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
279 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700280 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
281 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
282 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
283 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
284 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
285 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
286 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
287 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
288 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
289 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
290 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
291 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
292 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
293 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
294 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
295 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
296 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
297 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
298 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
299 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
300 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
301 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
302 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
303 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
304 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
305 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
306 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
307 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700308 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700309 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
310 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700311 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700312 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
313 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000314 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600315 patch_control_points = "VUID-vkCmdDrawIndirectCount-None-04875";
316 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectCount-None-04876";
317 depth_bias_enable = "VUID-vkCmdDrawIndirectCount-None-04877";
318 logic_op = "VUID-vkCmdDrawIndirectCount-logicOp-04878";
319 primitive_restart_enable = "VUID-vkCmdDrawIndirectCount-None-04879";
320 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectCount-pStrides-04884";
321 vertex_input = kVUID_Core_CmdDrawIndirectCount_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700322 }
323};
324
325struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
326 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700327 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
328 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
329 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
330 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
331 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
332 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
333 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
334 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
335 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
336 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
337 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
338 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
339 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
340 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
341 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
342 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
343 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
344 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
345 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
346 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
347 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
348 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
349 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
350 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
351 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
352 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
353 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
354 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700355 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700356 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
357 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700358 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700359 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
360 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000361 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600362 patch_control_points = "VUID-vkCmdDrawIndexedIndirectCount-None-04875";
363 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04876";
364 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04877";
365 logic_op = "VUID-vkCmdDrawIndexedIndirectCount-logicOp-04878";
366 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04879";
367 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirectCount-pStrides-04884";
368 vertex_input = kVUID_Core_CmdDrawIndexedIndirectCount_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700369 }
370};
371
372struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
373 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700374 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
375 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
376 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
377 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
378 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
379 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
380 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
381 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
382 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
383 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
384 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
385 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
386 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
387 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700388 protected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700389 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700390 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
391 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
392 }
393};
394
395struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
396 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700397 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
398 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
399 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
400 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
401 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
402 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
403 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
404 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
405 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
406 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
407 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
408 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
409 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
410 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700411 protected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700412 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700413 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
414 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
415 }
416};
417
418struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
419 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700420 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
421 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
422 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
423 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
424 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700425 indirect_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
426 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
427 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700428 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
429 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
430 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
431 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
432 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
433 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
434 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
435 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
436 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700437 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700438 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
439 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
440 }
441};
442
443struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
444 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700445 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
446 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
447 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
448 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
449 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
450 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
451 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
452 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
453 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
454 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
455 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
456 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
457 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
458 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
459 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
460 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
461 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
462 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
463 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
464 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
465 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
466 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700467 rasterization_samples = "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700468 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
469 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700470 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700471 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
472 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000473 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600474 patch_control_points = "VUID-vkCmdDrawMeshTasksNV-None-04875";
475 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksNV-None-04876";
476 depth_bias_enable = "VUID-vkCmdDrawMeshTasksNV-None-04877";
477 logic_op = "VUID-vkCmdDrawMeshTasksNV-logicOp-04878";
478 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksNV-None-04879";
479 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksNV-pStrides-04884";
480 vertex_input = kVUID_Core_CmdDrawMeshTasksNV_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700481 }
482};
483
484struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
485 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700486 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
487 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
488 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
489 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
490 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
491 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
492 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
493 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
494 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
495 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
496 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
497 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
498 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
499 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
500 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
501 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
502 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
503 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
504 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
505 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
506 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
507 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
508 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
509 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
510 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700511 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700512 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
513 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700514 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700515 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
516 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000517 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600518 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04875";
519 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04876";
520 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04877";
521 logic_op = "VUID-vkCmdDrawMeshTasksIndirectNV-logicOp-04878";
522 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04879";
523 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectNV-pStrides-04884";
524 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectNV_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700525 }
526};
527
528struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
529 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700530 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
531 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
532 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
533 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
534 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
535 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
536 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
537 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
538 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
539 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
540 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
541 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
542 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
543 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
544 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
545 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
546 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
547 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
548 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
549 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
550 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
551 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
552 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
553 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
554 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700555 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700556 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
557 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700558 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700559 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
560 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000561 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600562 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04875";
563 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04876";
564 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04877";
565 logic_op = "VUID-vkCmdDrawMeshTasksIndirectCountNV-logicOp-04878";
566 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04879";
567 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectCountNV-pStrides-04884";
568 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectCountNV_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700569 }
570};
571
572struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
573 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700574 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
575 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
576 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
577 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
578 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
579 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
580 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
581 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
582 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
583 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
584 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
sfricke-samsungb091d4e2021-04-18 23:15:59 -0700585 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567",
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700586 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
587 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
588 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
589 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
590 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
591 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
592 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
593 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
594 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
595 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
596 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
597 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
598 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
599 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
600 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
601 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700602 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700603 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
604 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700605 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700606 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
607 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000608 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600609 patch_control_points = "VUID-vkCmdDrawIndirectByteCountEXT-None-04875";
610 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04876";
611 depth_bias_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04877";
612 logic_op = "VUID-vkCmdDrawIndirectByteCountEXT-logicOp-04878";
613 primitive_restart_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04879";
614 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectByteCountEXT-pStrides-04884";
615 vertex_input = kVUID_Core_CmdDrawIndirectByteCountEXT_VertexInput;
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700616 }
617};
618
619struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
620 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700621 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700622 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700623 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
624 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
625 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
626 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
627 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
628 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
629 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
630 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
631 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
632 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
633 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
634 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700635 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700636 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
637 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
638 }
639};
640
641// 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 -0700642static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700643 {CMD_DRAW, DispatchVuidsCmdDraw()},
644 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
645 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
646 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
647 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
648 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
649 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
650 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
651 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
652 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
653 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
654 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
655 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
656 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
657 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
658 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700659 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700660 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700661};
662// clang-format on
663
664// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
665const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700666 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
667 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700668 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700669 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700670 }
671}
672
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700673// Generic function to handle validation for all CmdDraw* type functions
674bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700675 const char *caller) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700676 bool skip = false;
John Zulauffbf3c202019-07-17 14:57:14 -0600677 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700678 if (cb_state) {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700679 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700680 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700681 }
682 return skip;
683}
684
locke-lunarg3fa463a2020-10-23 16:39:04 -0600685bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
686 CMD_TYPE cmd_type, const char *caller) const {
687 bool skip = false;
688 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
689 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
690 if (!cb_node) return skip;
691
692 // Verify maxMultiviewInstanceIndex
693 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass && enabled_features.multiview_features.multiview &&
694 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
695 LogObjectList objlist(commandBuffer);
696 objlist.add(cb_node->activeRenderPass->renderPass);
697 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600698 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
locke-lunarg3fa463a2020-10-23 16:39:04 -0600699 "and firstInstance: %" PRIu32 ".",
700 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass).c_str(),
701 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
702 }
703 return skip;
704}
705
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700706bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500707 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600708 bool skip = false;
709 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700710 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()");
locke-lunarg3fa463a2020-10-23 16:39:04 -0600711 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700712}
713
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700714bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500715 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600716 bool skip = false;
717 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700718 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500719 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700720 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
721 unsigned int index_size = 0;
722 const auto &index_buffer_binding = cb_state->index_buffer_binding;
723 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
724 index_size = 2;
725 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
726 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600727 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
728 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700729 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700730 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700731 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700732 skip |=
locke-lunarg1ae57d62020-11-18 10:49:19 -0700733 LogError(index_buffer_binding.buffer_state->buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700734 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
735 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
736 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
737 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700738 }
739 }
740 return skip;
741}
742
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700743bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
744 uint32_t drawCount, uint32_t stride) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700745 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600746 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700747 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700748 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600749 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
750 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700751 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
752 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
753 buffer_state);
754 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
755 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600756 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%" PRIu64 ") is not less than "
757 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700758 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600759 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700760 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
761 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
762 return skip;
763}
764
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700765bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700766 uint32_t drawCount, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700767 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700768 "vkCmdDrawIndexedIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600769 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700770 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700771 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600772 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
773 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
774 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700775 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
776 offset, buffer_state);
777 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
778 skip |= LogError(
779 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600780 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%" PRIu64 ") is not less than "
781 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700782 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600783 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700784 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
785 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
786 // 'buffer'.
787 return skip;
788}
789
Jeff Bolz5c801d12019-10-09 10:38:45 -0500790bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600791 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700792 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()");
Lockef39c0772019-04-03 14:40:02 -0600793 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700794}
795
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700796bool CoreChecks::ValidateBaseGroups(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
797 const char *apiName) const {
798 bool skip = false;
799 if (baseGroupX || baseGroupY || baseGroupZ) {
800 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
801 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
802 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
803 if (pipeline_state && !(pipeline_state->computePipelineCI.flags & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
804 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchBase-baseGroupX-00427",
805 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
806 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
807 apiName);
808 }
809 }
810 return skip;
811}
812
locke-lunarg25b6c352020-08-06 17:44:18 -0600813bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
814 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
815 uint32_t groupCountZ) const {
816 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700817 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700818 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600819 return skip;
820}
821
822bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
823 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
824 uint32_t groupCountZ) const {
825 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700826 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700827 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600828 return skip;
829}
830
Jeff Bolz5c801d12019-10-09 10:38:45 -0500831bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700832 bool skip =
833 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700834 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Tony-LunarGda555b52021-01-06 13:43:49 -0700835 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
836 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
837 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
838 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
839 "size of the buffer");
840 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700841 return skip;
842}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700843bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
844 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700845 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700846 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700847 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600848 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700849 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
850 "call this command.",
851 apiName);
852 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700853 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
854 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600855 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600856 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700857 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
858 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700859 }
860
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700861 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -0600862 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700863 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700864 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700865 skip |=
866 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
867 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700868 return skip;
869}
870
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700871bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
872 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
873 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700874 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700875 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700876}
877
878bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
879 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
880 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700881 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700882 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700883}
884
885bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
886 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700887 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700888 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700889 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600890 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700891 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
892 "call this command.",
893 apiName);
894 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700895 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
896 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600897 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600898 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800899 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700900 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700901 }
902
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700903 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -0600904 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700905 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700906 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700907 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700908 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800909 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700910 return skip;
911}
912
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700913bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
914 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
915 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700916 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
917 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700918}
919
920bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
921 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
922 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700923 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
924 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700925}
926
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600927bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
928 uint32_t firstInstance, VkBuffer counterBuffer,
929 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
930 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700931 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700932 if (!enabled_features.transform_feedback_features.transformFeedback) {
933 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
934 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
935 }
936 if (device_extensions.vk_ext_transform_feedback && !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -0800937 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700938 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
939 "vkCmdDrawIndirectByteCountEXT()");
940 }
locke-lunarg3fa463a2020-10-23 16:39:04 -0600941 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
942 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700943 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700944 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700945 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
946 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600947}
948
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500949bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
950 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
951 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
952 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
953 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
954 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
955 uint32_t width, uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700956 bool skip =
957 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV, "vkCmdTraceRaysNV()");
sourav parmard1521802020-06-07 21:49:02 -0700958 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700959 auto callable_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(callableShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700960 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
961 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
962 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
963 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
964 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
965 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700966 auto hit_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(hitShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700967 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
968 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
969 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
970 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
971 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
972 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700973 auto miss_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(missShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700974 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
975 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
976 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100977 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700978 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
979 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700980 auto raygen_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(raygenShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700981 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
982 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
983 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100984 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700985 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
986 }
sourav parmarcd5fb182020-07-17 12:58:44 -0700987
sourav parmar30e19392020-12-02 16:57:21 -0800988 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
989 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
990 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
991 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
992 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -0700993 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500994 return skip;
995}
996
Jason Macnak67407e72019-07-11 11:05:09 -0700997void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
998 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
999 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1000 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1001 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1002 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1003 uint32_t width, uint32_t height, uint32_t depth) {
1004 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001005 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -07001006 cb_state->hasTraceRaysCmd = true;
1007}
1008
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001009bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001010 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1011 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1012 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1013 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001014 uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001015 bool skip =
1016 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR, "vkCmdTraceRaysKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001017 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001018 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1019 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001020 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1021 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1022 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1023 } else { // bound to valid RT pipeline
1024 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1025 if (!pHitShaderBindingTable->deviceAddress) {
1026 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1027 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1028 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1029 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1030 }
1031 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1032 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1033 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1034 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1035 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1036 "execute an intersection shader must not be set to zero.");
1037 }
1038 }
1039 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1040 if (!pHitShaderBindingTable->deviceAddress) {
1041 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1042 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1043 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1044 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1045 }
1046 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1047 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1048 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1049 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1050 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1051 "execute a closest hit shader must not be set to zero.");
1052 }
1053 }
1054 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001055 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1056 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1057 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1058 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1059 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1060 "execute an any hit shader must not be set to zero.");
1061 }
1062 }
1063 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001064 return skip;
1065}
1066
1067void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001068 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1069 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1070 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1071 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001072 uint32_t height, uint32_t depth) {
1073 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001074 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001075 cb_state->hasTraceRaysCmd = true;
1076}
1077
1078bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001079 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1080 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1081 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1082 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1083 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001084 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001085 "vkCmdTraceRaysIndirectKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001086 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001087 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1088 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001089 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1090 skip |=
1091 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1092 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1093 } else { // valid bind point
1094 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1095 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1096 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1097 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1098 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1099 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1100 }
1101 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1102 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1103 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1104 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1105 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1106 "execute an intersection shader must not be set to zero.");
1107 }
1108 }
1109 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1110 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1111 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1112 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1113 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1114 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1115 }
1116 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1117 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1118 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1119 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1120 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1121 "execute a closest hit shader must not be set to zero.");
1122 }
1123 }
1124 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001125 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1126 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1127 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1128 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1129 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1130 "execute an any hit shader must not be set to zero.");
1131 }
1132 }
1133 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001134 return skip;
1135}
1136
1137void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001138 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1139 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1140 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1141 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -07001142 VkDeviceAddress indirectDeviceAddress) {
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001143 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001144 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
1145 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001146 cb_state->hasTraceRaysCmd = true;
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001147}
1148
Jeff Bolz5c801d12019-10-09 10:38:45 -05001149bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001150 bool skip =
1151 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV, "vkCmdDrawMeshTasksNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001152 return skip;
1153}
1154
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001155bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001156 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001157 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001158 "vkCmdDrawMeshTasksIndirectNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001159 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001160 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001161 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001162 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1163 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1164 drawCount, offset, buffer_state);
1165 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001166 return skip;
1167}
1168
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001169bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1170 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001171 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001172 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001173 "vkCmdDrawMeshTasksIndirectCountNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001174 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1175 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001176 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001177 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001178 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001179 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001180 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1181 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001182 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1183 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1184 if (maxDrawCount > 1) {
1185 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1186 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1187 maxDrawCount, offset, buffer_state);
1188 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001189 return skip;
1190}