blob: 64ba1e7aefb50c7b7de46fbc11e0b53a897dd305 [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() {
48 queue_flag = "VUID-vkCmdDraw-commandBuffer-cmdpool";
49 inside_renderpass = "VUID-vkCmdDraw-renderpass";
50 pipeline_bound = "VUID-vkCmdDraw-None-02700";
51 dynamic_state = "VUID-vkCmdDraw-commandBuffer-02701";
52 vertex_binding = "VUID-vkCmdDraw-None-04007";
53 vertex_binding_null = "VUID-vkCmdDraw-None-04008";
54 compatible_pipeline = "VUID-vkCmdDraw-None-02697";
55 render_pass_compatible = "VUID-vkCmdDraw-renderPass-02684";
56 subpass_index = "VUID-vkCmdDraw-subpass-02685";
57 sample_location = "VUID-vkCmdDraw-sampleLocationsEnable-02689";
58 linear_sampler = "VUID-vkCmdDraw-magFilter-04553";
59 cubic_sampler = "VUID-vkCmdDraw-None-02692";
60 viewport_count = "VUID-vkCmdDraw-viewportCount-03417";
61 scissor_count = "VUID-vkCmdDraw-scissorCount-03418";
62 viewport_scissor_count = "VUID-vkCmdDraw-viewportCount-03419";
63 primitive_topology = "VUID-vkCmdDraw-primitiveTopology-03420";
64 corner_sampled_address_mode = "VUID-vkCmdDraw-flags-02696";
65 subpass_input = "VUID-vkCmdDraw-None-02686";
66 imageview_atomic = "VUID-vkCmdDraw-None-02691";
67 push_constants_set = "VUID-vkCmdDraw-None-02698";
68 image_subresources = "VUID-vkCmdDraw-None-04584";
69 descriptor_valid = "VUID-vkCmdDraw-None-02699";
70 sampler_imageview_type = "VUID-vkCmdDraw-None-02702";
71 sampler_implicitLod_dref_proj = "VUID-vkCmdDraw-None-02703";
72 sampler_bias_offset = "VUID-vkCmdDraw-None-02704";
73 vertex_binding_attribute = "VUID-vkCmdDraw-None-02721";
74 dynamic_state_setting_commands = "VUID-vkCmdDraw-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -070075 rasterization_samples = "VUID-vkCmdDraw-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070076 unprotected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02707";
77 protected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02712";
78 max_multiview_instance_index = "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -070079 img_filter_cubic = "VUID-vkCmdDraw-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070080 filter_cubic = "VUID-vkCmdDraw-filterCubic-02694";
81 filter_cubic_min_max = "VUID-vkCmdDraw-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +000082 viewport_count_primitive_shading_rate = "VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -070083 patch_control_points = "VUID-vkCmdDraw-None-04875";
84 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
85 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
86 logic_op = "VUID-vkCmdDraw-logicOp-04878";
87 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070088 }
89};
90
91struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
92 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
93 queue_flag = "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool";
94 inside_renderpass = "VUID-vkCmdDrawIndexed-renderpass";
95 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
96 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
97 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
98 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
99 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
100 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
101 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
102 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
103 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
104 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
105 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
106 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
107 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
108 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
109 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
110 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
111 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
112 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
113 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
114 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
115 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
116 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
117 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
118 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
119 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700120 rasterization_samples = "VUID-vkCmdDrawIndexed-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700121 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
122 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
123 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700124 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700125 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
126 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000127 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700128 patch_control_points = "VUID-vkCmdDraw-None-04875";
129 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
130 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
131 logic_op = "VUID-vkCmdDraw-logicOp-04878";
132 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700133 }
134};
135
136struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
137 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
138 queue_flag = "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool";
139 inside_renderpass = "VUID-vkCmdDrawIndirect-renderpass";
140 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
141 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
142 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
143 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
144 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
145 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
146 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
147 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
148 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
149 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
150 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
151 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
152 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
153 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
154 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
155 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
156 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
157 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
158 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
159 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
160 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
161 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
162 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
163 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
164 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
165 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
166 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
167 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700168 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700169 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
170 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700171 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700172 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
173 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000174 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700175 patch_control_points = "VUID-vkCmdDraw-None-04875";
176 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
177 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
178 logic_op = "VUID-vkCmdDraw-logicOp-04878";
179 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700180 }
181};
182
183struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
184 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
185 queue_flag = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool";
186 inside_renderpass = "VUID-vkCmdDrawIndexedIndirect-renderpass";
187 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
188 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
189 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
190 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
191 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
192 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
193 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
194 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
195 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
196 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
197 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
198 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
199 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
200 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
201 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
202 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
203 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
204 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
205 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
206 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
207 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
208 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
209 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
210 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
211 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
212 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
213 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
214 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700215 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700216 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
217 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700218 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700219 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
220 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000221 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700222 patch_control_points = "VUID-vkCmdDraw-None-04875";
223 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
224 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
225 logic_op = "VUID-vkCmdDraw-logicOp-04878";
226 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700227 }
228};
229
230struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
231 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
232 queue_flag = "VUID-vkCmdDispatch-commandBuffer-cmdpool";
233 inside_renderpass = "VUID-vkCmdDispatch-renderpass";
234 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700235 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700236 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
237 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
238 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
239 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
240 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
241 push_constants_set = "VUID-vkCmdDispatch-None-02698";
242 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
243 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
244 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
245 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
246 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
247 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
248 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700249 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700250 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
251 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
252 }
253};
254
255struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
256 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
257 queue_flag = "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool";
258 inside_renderpass = "VUID-vkCmdDispatchIndirect-renderpass";
259 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700260 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700261 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
262 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
263 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
264 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
265 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
266 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
267 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
268 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
269 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
270 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
271 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
272 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
273 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
274 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
275 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700276 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700277 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
278 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
279 }
280};
281
282struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
283 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
284 queue_flag = "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool";
285 inside_renderpass = "VUID-vkCmdDrawIndirectCount-renderpass";
286 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
287 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
288 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
289 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
290 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
291 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
292 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
293 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
294 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
295 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
296 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
297 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
298 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
299 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
300 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
301 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
302 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
303 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
304 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
305 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
306 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
307 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
308 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
309 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
310 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
311 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
312 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
313 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700314 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700315 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
316 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700317 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700318 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
319 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000320 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700321 patch_control_points = "VUID-vkCmdDraw-None-04875";
322 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
323 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
324 logic_op = "VUID-vkCmdDraw-logicOp-04878";
325 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700326 }
327};
328
329struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
330 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
331 queue_flag = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool";
332 inside_renderpass = "VUID-vkCmdDrawIndexedIndirectCount-renderpass";
333 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
334 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
335 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
336 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
337 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
338 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
339 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
340 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
341 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
342 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
343 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
344 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
345 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
346 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
347 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
348 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
349 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
350 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
351 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
352 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
353 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
354 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
355 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
356 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
357 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
358 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
359 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
360 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700361 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700362 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
363 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700364 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700365 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
366 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000367 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700368 patch_control_points = "VUID-vkCmdDraw-None-04875";
369 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
370 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
371 logic_op = "VUID-vkCmdDraw-logicOp-04878";
372 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700373 }
374};
375
376struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
377 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
378 queue_flag = "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool";
379 inside_renderpass = "VUID-vkCmdTraceRaysNV-renderpass";
380 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
381 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
382 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
383 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
384 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
385 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
386 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
387 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
388 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
389 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
390 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
391 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
392 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
393 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700394 protected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700395 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700396 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
397 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
398 }
399};
400
401struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
402 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
403 queue_flag = "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool";
404 inside_renderpass = "VUID-vkCmdTraceRaysKHR-renderpass";
405 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
406 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
407 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
408 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
409 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
410 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
411 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
412 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
413 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
414 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
415 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
416 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
417 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
418 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700419 protected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700420 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700421 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
422 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
423 }
424};
425
426struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
427 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
428 queue_flag = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool";
429 inside_renderpass = "VUID-vkCmdTraceRaysIndirectKHR-renderpass";
430 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
431 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
432 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
433 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
434 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700435 indirect_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
436 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
437 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700438 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
439 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
440 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
441 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
442 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
443 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
444 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
445 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
446 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700447 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700448 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
449 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
450 }
451};
452
453struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
454 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
455 queue_flag = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool";
456 inside_renderpass = "VUID-vkCmdDrawMeshTasksNV-renderpass";
457 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
458 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
459 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
460 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
461 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
462 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
463 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
464 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
465 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
466 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
467 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
468 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
469 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
470 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
471 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
472 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
473 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
474 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
475 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
476 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
477 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
478 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700479 rasterization_samples = "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700480 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
481 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700482 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700483 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
484 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000485 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700486 patch_control_points = "VUID-vkCmdDraw-None-04875";
487 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
488 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
489 logic_op = "VUID-vkCmdDraw-logicOp-04878";
490 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700491 }
492};
493
494struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
495 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
496 queue_flag = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool";
497 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass";
498 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
499 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
500 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
501 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
502 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
503 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
504 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
505 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
506 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
507 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
508 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
509 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
510 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
511 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
512 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
513 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
514 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
515 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
516 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
517 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
518 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
519 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
520 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
521 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
522 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700523 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700524 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
525 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700526 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700527 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
528 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000529 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700530 patch_control_points = "VUID-vkCmdDraw-None-04875";
531 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
532 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
533 logic_op = "VUID-vkCmdDraw-logicOp-04878";
534 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700535 }
536};
537
538struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
539 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
540 queue_flag = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool";
541 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass";
542 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
543 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
544 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
545 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
546 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
547 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
548 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
549 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
550 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
551 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
552 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
553 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
554 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
555 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
556 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
557 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
558 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
559 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
560 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
561 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
562 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
563 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
564 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
565 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
566 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700567 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700568 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
569 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700570 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700571 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
572 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000573 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700574 patch_control_points = "VUID-vkCmdDraw-None-04875";
575 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
576 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
577 logic_op = "VUID-vkCmdDraw-logicOp-04878";
578 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700579 }
580};
581
582struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
583 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
584 queue_flag = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool";
585 inside_renderpass = "VUID-vkCmdDrawIndirectByteCountEXT-renderpass";
586 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
587 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
588 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
589 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
590 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
591 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
592 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
593 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
594 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
595 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
596 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
597 indirect_contiguous_memory = "UNASSIGNED-vkCmdDrawIndirectByteCountEXT-buffer", // TODO - Update when header are updated
598 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
599 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
600 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
601 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
602 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
603 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
604 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
605 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
606 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
607 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
608 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
609 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
610 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
611 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
612 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
613 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700614 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700615 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
616 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700617 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700618 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
619 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000620 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700621 patch_control_points = "VUID-vkCmdDraw-None-04875";
622 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
623 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
624 logic_op = "VUID-vkCmdDraw-logicOp-04878";
625 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700626 }
627};
628
629struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
630 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
631 queue_flag = "VUID-vkCmdDispatchBase-commandBuffer-cmdpool";
632 inside_renderpass = "VUID-vkCmdDispatchBase-renderpass";
633 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700634 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700635 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
636 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
637 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
638 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
639 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
640 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
641 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
642 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
643 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
644 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
645 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
646 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700647 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700648 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
649 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
650 }
651};
652
653// 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 -0700654static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700655 {CMD_DRAW, DispatchVuidsCmdDraw()},
656 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
657 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
658 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
659 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
660 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
661 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
662 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
663 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
664 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
665 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
666 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
667 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
668 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
669 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
670 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700671 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700672 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700673};
674// clang-format on
675
676// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
677const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700678 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
679 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700680 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700681 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700682 }
683}
684
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700685// Generic function to handle validation for all CmdDraw* type functions
686bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700687 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700688 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700689 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600690 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700691 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700692 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700693 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700694 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
695 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
696 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700697 }
698 return skip;
699}
700
locke-lunarg3fa463a2020-10-23 16:39:04 -0600701bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
702 CMD_TYPE cmd_type, const char *caller) const {
703 bool skip = false;
704 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
705 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
706 if (!cb_node) return skip;
707
708 // Verify maxMultiviewInstanceIndex
709 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass && enabled_features.multiview_features.multiview &&
710 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
711 LogObjectList objlist(commandBuffer);
712 objlist.add(cb_node->activeRenderPass->renderPass);
713 skip |= LogError(objlist, vuid.max_multiview_instance_index,
714 "%s: multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
715 "and firstInstance: %" PRIu32 ".",
716 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass).c_str(),
717 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
718 }
719 return skip;
720}
721
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700722bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500723 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600724 bool skip = false;
725 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
726 skip |=
727 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()", VK_QUEUE_GRAPHICS_BIT);
728 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700729}
730
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700731bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500732 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600733 bool skip = false;
734 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
735 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
736 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500737 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700738 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
739 unsigned int index_size = 0;
740 const auto &index_buffer_binding = cb_state->index_buffer_binding;
741 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
742 index_size = 2;
743 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
744 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600745 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
746 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700747 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700748 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700749 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700750 skip |=
locke-lunarg1ae57d62020-11-18 10:49:19 -0700751 LogError(index_buffer_binding.buffer_state->buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700752 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
753 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
754 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
755 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700756 }
757 }
758 return skip;
759}
760
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700761bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
762 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700763 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700764 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600765 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700766 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700767 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600768 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
769 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700770 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
771 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
772 buffer_state);
773 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
774 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
775 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%u) is not less than "
776 "or equal to the size of buffer (%u).",
777 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600778 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700779 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
780 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
781 return skip;
782}
783
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700784bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700785 uint32_t drawCount, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700786 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
787 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600788 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700789 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700790 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600791 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
792 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
793 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700794 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
795 offset, buffer_state);
796 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
797 skip |= LogError(
798 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
799 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%u) is not less than "
800 "or equal to the size of buffer (%u).",
801 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600802 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700803 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
804 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
805 // 'buffer'.
806 return skip;
807}
808
Jeff Bolz5c801d12019-10-09 10:38:45 -0500809bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600810 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600811 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700812 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600813 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700814}
815
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700816bool CoreChecks::ValidateBaseGroups(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
817 const char *apiName) const {
818 bool skip = false;
819 if (baseGroupX || baseGroupY || baseGroupZ) {
820 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
821 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
822 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
823 if (pipeline_state && !(pipeline_state->computePipelineCI.flags & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
824 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchBase-baseGroupX-00427",
825 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
826 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
827 apiName);
828 }
829 }
830 return skip;
831}
832
locke-lunarg25b6c352020-08-06 17:44:18 -0600833bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
834 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
835 uint32_t groupCountZ) const {
836 bool skip = false;
837 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
838 VK_QUEUE_COMPUTE_BIT);
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700839 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600840 return skip;
841}
842
843bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
844 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
845 uint32_t groupCountZ) const {
846 bool skip = false;
847 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
848 VK_QUEUE_COMPUTE_BIT);
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700849 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600850 return skip;
851}
852
Jeff Bolz5c801d12019-10-09 10:38:45 -0500853bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700854 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700855 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700856 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Tony-LunarGda555b52021-01-06 13:43:49 -0700857 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
858 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
859 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
860 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
861 "size of the buffer");
862 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700863 return skip;
864}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700865bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
866 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700867 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700868 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700869 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600870 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700871 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
872 "call this command.",
873 apiName);
874 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700875 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
876 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600877 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600878 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700879 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
880 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700881 }
882
Tony-LunarG83544c72020-01-17 12:30:19 -0700883 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700884 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600885 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700886 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700887 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700888 skip |=
889 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
890 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700891 return skip;
892}
893
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700894bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
895 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
896 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700897 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700898 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700899}
900
901bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
902 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
903 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700904 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700905 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700906}
907
908bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
909 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700910 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700911 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700912 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600913 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700914 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
915 "call this command.",
916 apiName);
917 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700918 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
919 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600920 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600921 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800922 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700923 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700924 }
925
sfricke-samsungf692b972020-05-02 08:00:45 -0700926 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
927 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600928 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700929 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700930 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700931 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700932 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800933 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700934 return skip;
935}
936
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700937bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
938 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
939 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700940 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
941 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700942}
943
944bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
945 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
946 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700947 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
948 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700949}
950
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600951bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
952 uint32_t firstInstance, VkBuffer counterBuffer,
953 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
954 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700955 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700956 if (!enabled_features.transform_feedback_features.transformFeedback) {
957 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
958 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
959 }
960 if (device_extensions.vk_ext_transform_feedback && !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -0800961 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700962 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
963 "vkCmdDrawIndirectByteCountEXT()");
964 }
locke-lunarg3fa463a2020-10-23 16:39:04 -0600965 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
966 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700967 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
968 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
969 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
970 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600971}
972
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500973bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
974 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
975 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
976 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
977 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
978 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
979 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700980 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
981 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700982 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
983 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700984 auto callable_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(callableShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700985 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
986 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
987 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
988 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
989 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
990 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700991 auto hit_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(hitShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700992 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
993 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
994 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
995 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
996 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
997 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700998 auto miss_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(missShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700999 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
1000 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
1001 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001002 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001003 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
1004 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001005 auto raygen_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(raygenShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001006 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
1007 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
1008 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001009 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001010 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
1011 }
sourav parmarcd5fb182020-07-17 12:58:44 -07001012
sourav parmar30e19392020-12-02 16:57:21 -08001013 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
1014 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
1015 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1016 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
1017 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -07001018 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001019 return skip;
1020}
1021
Jason Macnak67407e72019-07-11 11:05:09 -07001022void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1023 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1024 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1025 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1026 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1027 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1028 uint32_t width, uint32_t height, uint32_t depth) {
1029 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001030 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -07001031 cb_state->hasTraceRaysCmd = true;
1032}
1033
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001034bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001035 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1036 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1037 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1038 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001039 uint32_t height, uint32_t depth) const {
1040 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
1041 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
sourav parmarcd5fb182020-07-17 12:58:44 -07001042 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001043 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1044 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001045 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1046 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1047 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1048 } else { // bound to valid RT pipeline
1049 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1050 if (!pHitShaderBindingTable->deviceAddress) {
1051 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1052 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1053 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1054 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1055 }
1056 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1057 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1058 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1059 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1060 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1061 "execute an intersection shader must not be set to zero.");
1062 }
1063 }
1064 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1065 if (!pHitShaderBindingTable->deviceAddress) {
1066 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1067 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1068 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1069 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1070 }
1071 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1072 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1073 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1074 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1075 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1076 "execute a closest hit shader must not be set to zero.");
1077 }
1078 }
1079 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001080 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1081 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1082 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1083 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1084 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1085 "execute an any hit shader must not be set to zero.");
1086 }
1087 }
1088 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001089 return skip;
1090}
1091
1092void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001093 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1094 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1095 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1096 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001097 uint32_t height, uint32_t depth) {
1098 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001099 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001100 cb_state->hasTraceRaysCmd = true;
1101}
1102
1103bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001104 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1105 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1106 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1107 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1108 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001109 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001110 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sourav parmarcd5fb182020-07-17 12:58:44 -07001111 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001112 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1113 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001114 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1115 skip |=
1116 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1117 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1118 } else { // valid bind point
1119 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1120 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1121 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1122 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1123 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1124 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1125 }
1126 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1127 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1128 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1129 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1130 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1131 "execute an intersection shader must not be set to zero.");
1132 }
1133 }
1134 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1135 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1136 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1137 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1138 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1139 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1140 }
1141 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1142 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1143 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1144 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1145 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1146 "execute a closest hit shader must not be set to zero.");
1147 }
1148 }
1149 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001150 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1151 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1152 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1153 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1154 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1155 "execute an any hit shader must not be set to zero.");
1156 }
1157 }
1158 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001159 return skip;
1160}
1161
1162void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001163 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1164 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1165 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1166 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -07001167 VkDeviceAddress indirectDeviceAddress) {
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001168 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001169 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
1170 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001171 cb_state->hasTraceRaysCmd = true;
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001172}
1173
Jeff Bolz5c801d12019-10-09 10:38:45 -05001174bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -07001175 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
1176 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001177 return skip;
1178}
1179
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001180bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001181 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001182 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001183 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001184 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001185 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001186 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001187 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1188 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1189 drawCount, offset, buffer_state);
1190 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001191 return skip;
1192}
1193
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001194bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1195 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001196 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001197 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001198 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001199 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1200 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001201 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001202 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001203 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001204 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001205 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1206 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001207 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1208 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1209 if (maxDrawCount > 1) {
1210 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1211 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1212 maxDrawCount, offset, buffer_state);
1213 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001214 return skip;
1215}