blob: d2a16b5322eee3932b882d6e07d084acc51d6d95 [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";
sfricke-samsunge79d0892021-06-17 08:56:22 -0700635 protected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700636 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700637 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
638 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
639 }
640};
641
642// 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 -0700643static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700644 {CMD_DRAW, DispatchVuidsCmdDraw()},
645 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
646 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
647 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
648 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
649 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
650 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
651 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
652 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
653 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
654 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
655 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
656 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
657 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
658 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
659 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700660 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700661 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700662};
663// clang-format on
664
665// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
666const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700667 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
668 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700669 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700670 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700671 }
672}
673
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700674// Generic function to handle validation for all CmdDraw* type functions
675bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700676 const char *caller) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700677 bool skip = false;
John Zulauffbf3c202019-07-17 14:57:14 -0600678 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700679 if (cb_state) {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700680 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700681 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700682 }
683 return skip;
684}
685
locke-lunarg3fa463a2020-10-23 16:39:04 -0600686bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
687 CMD_TYPE cmd_type, const char *caller) const {
688 bool skip = false;
689 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
690 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
691 if (!cb_node) return skip;
692
693 // Verify maxMultiviewInstanceIndex
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600694 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass() && enabled_features.multiview_features.multiview &&
locke-lunarg3fa463a2020-10-23 16:39:04 -0600695 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
696 LogObjectList objlist(commandBuffer);
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600697 objlist.add(cb_node->activeRenderPass->renderPass());
locke-lunarg3fa463a2020-10-23 16:39:04 -0600698 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600699 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
locke-lunarg3fa463a2020-10-23 16:39:04 -0600700 "and firstInstance: %" PRIu32 ".",
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600701 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass()).c_str(),
locke-lunarg3fa463a2020-10-23 16:39:04 -0600702 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
703 }
704 return skip;
705}
706
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700707bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500708 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600709 bool skip = false;
710 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700711 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()");
locke-lunarg3fa463a2020-10-23 16:39:04 -0600712 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700713}
714
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700715bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500716 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600717 bool skip = false;
718 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700719 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500720 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700721 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
722 unsigned int index_size = 0;
723 const auto &index_buffer_binding = cb_state->index_buffer_binding;
724 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
725 index_size = 2;
726 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
727 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600728 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
729 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700730 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700731 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700732 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700733 skip |=
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600734 LogError(index_buffer_binding.buffer_state->buffer(), "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700735 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
736 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
737 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
738 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700739 }
740 }
741 return skip;
742}
743
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700744bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
745 uint32_t drawCount, uint32_t stride) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700746 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600747 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700748 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700749 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600750 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
751 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700752 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
753 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
754 buffer_state);
755 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
756 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600757 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%" PRIu64 ") is not less than "
758 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700759 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600760 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700761 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
762 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
763 return skip;
764}
765
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700766bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700767 uint32_t drawCount, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700768 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700769 "vkCmdDrawIndexedIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600770 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700771 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700772 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600773 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
774 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
775 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700776 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
777 offset, buffer_state);
778 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
779 skip |= LogError(
780 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600781 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%" PRIu64 ") is not less than "
782 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700783 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600784 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700785 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
786 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
787 // 'buffer'.
788 return skip;
789}
790
Jeff Bolz5c801d12019-10-09 10:38:45 -0500791bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600792 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700793 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()");
Lockef39c0772019-04-03 14:40:02 -0600794 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700795}
796
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700797bool CoreChecks::ValidateBaseGroups(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
798 const char *apiName) const {
799 bool skip = false;
800 if (baseGroupX || baseGroupY || baseGroupZ) {
801 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
802 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
803 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
804 if (pipeline_state && !(pipeline_state->computePipelineCI.flags & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
805 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchBase-baseGroupX-00427",
806 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
807 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
808 apiName);
809 }
810 }
811 return skip;
812}
813
locke-lunarg25b6c352020-08-06 17:44:18 -0600814bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
815 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
816 uint32_t groupCountZ) const {
817 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700818 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700819 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600820 return skip;
821}
822
823bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
824 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
825 uint32_t groupCountZ) const {
826 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700827 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700828 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600829 return skip;
830}
831
Jeff Bolz5c801d12019-10-09 10:38:45 -0500832bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700833 bool skip =
834 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700835 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Tony-LunarGda555b52021-01-06 13:43:49 -0700836 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
837 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
838 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
839 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
840 "size of the buffer");
841 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700842 return skip;
843}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700844bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
845 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700846 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700847 bool skip = false;
Nathaniel Cesario7f231f12021-03-25 12:10:58 -0600848 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
849 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600850 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700851 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
852 "call this command.",
853 apiName);
854 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700855 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
856 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600857 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600858 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700859 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
860 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700861 }
862
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700863 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -0600864 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700865 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700866 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700867 skip |=
868 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
869 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700870 return skip;
871}
872
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700873bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
874 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
875 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700876 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700877 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700878}
879
880bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
881 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
882 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700883 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700884 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700885}
886
887bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
888 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700889 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700890 bool skip = false;
Nathaniel Cesario7f231f12021-03-25 12:10:58 -0600891 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
892 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600893 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700894 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
895 "call this command.",
896 apiName);
897 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700898 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
899 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600900 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600901 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800902 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700903 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700904 }
905
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700906 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -0600907 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700908 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700909 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700910 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700911 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800912 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700913 return skip;
914}
915
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700916bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
917 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
918 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700919 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
920 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700921}
922
923bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
924 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
925 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700926 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
927 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700928}
929
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600930bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
931 uint32_t firstInstance, VkBuffer counterBuffer,
932 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
933 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700934 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700935 if (!enabled_features.transform_feedback_features.transformFeedback) {
936 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
937 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
938 }
939 if (device_extensions.vk_ext_transform_feedback && !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -0800940 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700941 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
942 "vkCmdDrawIndirectByteCountEXT()");
943 }
locke-lunarg3fa463a2020-10-23 16:39:04 -0600944 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
945 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700946 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700947 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700948 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
949 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600950}
951
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500952bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
953 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
954 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
955 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
956 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
957 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
958 uint32_t width, uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700959 bool skip =
960 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV, "vkCmdTraceRaysNV()");
sourav parmard1521802020-06-07 21:49:02 -0700961 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700962 auto callable_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(callableShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700963 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
964 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
965 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
966 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
967 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
968 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700969 auto hit_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(hitShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700970 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
971 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
972 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
973 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
974 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
975 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700976 auto miss_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(missShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700977 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
978 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
979 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100980 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700981 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
982 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700983 auto raygen_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(raygenShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700984 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
985 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
986 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100987 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700988 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
989 }
sourav parmarcd5fb182020-07-17 12:58:44 -0700990
sourav parmar30e19392020-12-02 16:57:21 -0800991 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
992 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600993 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmar30e19392020-12-02 16:57:21 -0800994 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
995 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -0700996 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500997 return skip;
998}
999
Jason Macnak67407e72019-07-11 11:05:09 -07001000void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1001 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1002 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1003 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1004 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1005 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1006 uint32_t width, uint32_t height, uint32_t depth) {
1007 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001008 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -07001009 cb_state->hasTraceRaysCmd = true;
1010}
1011
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001012bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001013 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1014 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1015 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1016 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001017 uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001018 bool skip =
1019 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR, "vkCmdTraceRaysKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001020 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001021 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1022 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001023 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001024 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1025 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1026 } else { // bound to valid RT pipeline
1027 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1028 if (!pHitShaderBindingTable->deviceAddress) {
1029 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1030 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1031 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1032 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1033 }
1034 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1035 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1036 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1037 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1038 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1039 "execute an intersection shader must not be set to zero.");
1040 }
1041 }
1042 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1043 if (!pHitShaderBindingTable->deviceAddress) {
1044 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1045 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1046 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1047 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1048 }
1049 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1050 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1051 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1052 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1053 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1054 "execute a closest hit shader must not be set to zero.");
1055 }
1056 }
1057 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001058 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1059 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1060 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1061 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1062 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1063 "execute an any hit shader must not be set to zero.");
1064 }
1065 }
1066 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001067 return skip;
1068}
1069
1070void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001071 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1072 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1073 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1074 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001075 uint32_t height, uint32_t depth) {
1076 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001077 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001078 cb_state->hasTraceRaysCmd = true;
1079}
1080
1081bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001082 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1083 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1084 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1085 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1086 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001087 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001088 "vkCmdTraceRaysIndirectKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001089 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001090 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1091 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001092 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001093 skip |=
1094 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1095 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1096 } else { // valid bind point
1097 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1098 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1099 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1100 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1101 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1102 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1103 }
1104 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1105 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1106 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1107 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1108 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1109 "execute an intersection shader must not be set to zero.");
1110 }
1111 }
1112 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1113 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1114 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1115 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1116 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1117 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1118 }
1119 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1120 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1121 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1122 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1123 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1124 "execute a closest hit shader must not be set to zero.");
1125 }
1126 }
1127 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001128 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1129 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1130 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1131 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1132 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1133 "execute an any hit shader must not be set to zero.");
1134 }
1135 }
1136 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001137 return skip;
1138}
1139
1140void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001141 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1142 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1143 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1144 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -07001145 VkDeviceAddress indirectDeviceAddress) {
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001146 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001147 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
1148 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001149 cb_state->hasTraceRaysCmd = true;
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001150}
1151
Jeff Bolz5c801d12019-10-09 10:38:45 -05001152bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001153 bool skip =
1154 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV, "vkCmdDrawMeshTasksNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001155 return skip;
1156}
1157
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001158bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001159 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001160 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001161 "vkCmdDrawMeshTasksIndirectNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001162 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001163 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001164 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001165 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1166 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1167 drawCount, offset, buffer_state);
1168 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001169 return skip;
1170}
1171
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001172bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1173 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001174 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001175 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001176 "vkCmdDrawMeshTasksIndirectCountNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001177 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1178 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001179 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001180 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001181 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001182 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001183 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1184 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001185 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1186 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1187 if (maxDrawCount > 1) {
1188 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1189 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1190 maxDrawCount, offset, buffer_state);
1191 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001192 return skip;
1193}