blob: 4d90be6824bb2b86e1dc68c5cfc8ff32e17d341f [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";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070086 }
87};
88
89struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
90 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070091 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
92 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
93 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
94 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
95 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
96 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
97 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
98 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
99 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
100 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
101 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
102 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
103 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
104 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
105 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
106 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
107 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
108 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
109 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
110 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
111 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
112 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
113 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
114 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
115 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700116 rasterization_samples = "VUID-vkCmdDrawIndexed-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700117 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
118 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
119 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700120 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700121 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
122 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000123 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700124 patch_control_points = "VUID-vkCmdDraw-None-04875";
125 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
126 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
127 logic_op = "VUID-vkCmdDraw-logicOp-04878";
128 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700129 }
130};
131
132struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
133 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700134 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
135 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
136 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
137 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
138 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
139 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
140 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
141 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
142 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
143 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
144 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
145 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
146 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
147 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
148 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
149 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
150 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
151 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
152 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
153 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
154 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
155 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
156 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
157 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
158 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
159 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
160 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
161 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700162 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700163 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
164 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700165 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700166 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
167 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000168 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700169 patch_control_points = "VUID-vkCmdDraw-None-04875";
170 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
171 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
172 logic_op = "VUID-vkCmdDraw-logicOp-04878";
173 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700174 }
175};
176
177struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
178 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700179 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
180 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
181 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
182 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
183 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
184 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
185 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
186 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
187 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
188 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
189 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
190 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
191 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
192 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
193 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
194 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
195 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
196 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
197 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
198 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
199 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
200 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
201 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
202 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
203 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
204 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
205 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
206 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700207 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700208 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
209 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700210 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700211 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
212 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000213 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700214 patch_control_points = "VUID-vkCmdDraw-None-04875";
215 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
216 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
217 logic_op = "VUID-vkCmdDraw-logicOp-04878";
218 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700219 }
220};
221
222struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
223 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700224 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700225 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700226 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
227 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
228 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
229 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
230 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
231 push_constants_set = "VUID-vkCmdDispatch-None-02698";
232 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
233 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
234 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
235 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
236 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
237 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
238 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700239 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700240 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
241 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
242 }
243};
244
245struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
246 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700247 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700248 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700249 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
250 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
251 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
252 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
253 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
254 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
255 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
256 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
257 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
258 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
259 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
260 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
261 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
262 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
263 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700264 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700265 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
266 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
267 }
268};
269
270struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
271 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700272 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
273 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
274 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
275 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
276 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
277 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
278 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
279 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
280 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
281 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
282 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
283 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
284 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
285 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
286 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
287 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
288 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
289 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
290 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
291 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
292 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
293 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
294 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
295 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
296 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
297 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
298 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
299 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700300 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700301 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
302 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700303 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700304 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
305 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000306 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700307 patch_control_points = "VUID-vkCmdDraw-None-04875";
308 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
309 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
310 logic_op = "VUID-vkCmdDraw-logicOp-04878";
311 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700312 }
313};
314
315struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
316 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700317 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
318 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
319 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
320 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
321 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
322 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
323 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
324 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
325 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
326 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
327 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
328 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
329 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
330 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
331 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
332 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
333 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
334 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
335 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
336 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
337 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
338 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
339 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
340 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
341 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
342 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
343 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
344 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700345 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700346 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
347 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700348 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700349 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
350 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000351 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700352 patch_control_points = "VUID-vkCmdDraw-None-04875";
353 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
354 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
355 logic_op = "VUID-vkCmdDraw-logicOp-04878";
356 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700357 }
358};
359
360struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
361 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700362 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
363 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
364 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
365 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
366 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
367 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
368 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
369 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
370 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
371 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
372 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
373 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
374 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
375 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700376 protected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700377 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700378 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
379 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
380 }
381};
382
383struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
384 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700385 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
386 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
387 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
388 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
389 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
390 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
391 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
392 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
393 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
394 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
395 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
396 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
397 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
398 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700399 protected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700400 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700401 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
402 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
403 }
404};
405
406struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
407 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700408 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
409 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
410 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
411 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
412 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700413 indirect_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
414 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
415 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700416 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
417 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
418 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
419 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
420 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
421 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
422 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
423 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
424 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700425 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700426 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
427 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
428 }
429};
430
431struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
432 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700433 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
434 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
435 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
436 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
437 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
438 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
439 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
440 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
441 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
442 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
443 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
444 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
445 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
446 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
447 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
448 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
449 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
450 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
451 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
452 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
453 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
454 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700455 rasterization_samples = "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700456 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
457 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700458 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700459 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
460 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000461 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700462 patch_control_points = "VUID-vkCmdDraw-None-04875";
463 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
464 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
465 logic_op = "VUID-vkCmdDraw-logicOp-04878";
466 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700467 }
468};
469
470struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
471 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700472 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
473 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
474 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
475 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
476 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
477 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
478 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
479 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
480 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
481 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
482 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
483 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
484 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
485 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
486 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
487 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
488 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
489 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
490 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
491 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
492 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
493 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
494 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
495 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
496 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700497 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700498 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
499 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700500 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700501 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
502 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000503 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700504 patch_control_points = "VUID-vkCmdDraw-None-04875";
505 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
506 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
507 logic_op = "VUID-vkCmdDraw-logicOp-04878";
508 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700509 }
510};
511
512struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
513 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700514 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
515 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
516 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
517 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
518 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
519 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
520 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
521 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
522 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
523 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
524 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
525 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
526 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
527 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
528 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
529 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
530 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
531 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
532 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
533 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
534 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
535 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
536 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
537 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
538 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700539 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700540 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
541 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700542 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700543 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
544 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000545 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700546 patch_control_points = "VUID-vkCmdDraw-None-04875";
547 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
548 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
549 logic_op = "VUID-vkCmdDraw-logicOp-04878";
550 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700551 }
552};
553
554struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
555 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700556 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
557 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
558 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
559 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
560 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
561 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
562 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
563 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
564 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
565 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
566 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
sfricke-samsungb091d4e2021-04-18 23:15:59 -0700567 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567",
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700568 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
569 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
570 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
571 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
572 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
573 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
574 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
575 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
576 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
577 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
578 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
579 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
580 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
581 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
582 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
583 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700584 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700585 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
586 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700587 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700588 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
589 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000590 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700591 patch_control_points = "VUID-vkCmdDraw-None-04875";
592 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
593 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
594 logic_op = "VUID-vkCmdDraw-logicOp-04878";
595 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700596 }
597};
598
599struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
600 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700601 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700602 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700603 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
604 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
605 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
606 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
607 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
608 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
609 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
610 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
611 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
612 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
613 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
614 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700615 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700616 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
617 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
618 }
619};
620
621// 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 -0700622static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700623 {CMD_DRAW, DispatchVuidsCmdDraw()},
624 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
625 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
626 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
627 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
628 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
629 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
630 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
631 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
632 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
633 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
634 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
635 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
636 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
637 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
638 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700639 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700640 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700641};
642// clang-format on
643
644// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
645const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700646 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
647 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700648 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700649 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700650 }
651}
652
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700653// Generic function to handle validation for all CmdDraw* type functions
654bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700655 const char *caller) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700656 bool skip = false;
John Zulauffbf3c202019-07-17 14:57:14 -0600657 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700658 if (cb_state) {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700659 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700660 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700661 }
662 return skip;
663}
664
locke-lunarg3fa463a2020-10-23 16:39:04 -0600665bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
666 CMD_TYPE cmd_type, const char *caller) const {
667 bool skip = false;
668 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
669 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
670 if (!cb_node) return skip;
671
672 // Verify maxMultiviewInstanceIndex
673 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass && enabled_features.multiview_features.multiview &&
674 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
675 LogObjectList objlist(commandBuffer);
676 objlist.add(cb_node->activeRenderPass->renderPass);
677 skip |= LogError(objlist, vuid.max_multiview_instance_index,
678 "%s: multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
679 "and firstInstance: %" PRIu32 ".",
680 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass).c_str(),
681 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
682 }
683 return skip;
684}
685
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700686bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500687 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600688 bool skip = false;
689 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700690 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()");
locke-lunarg3fa463a2020-10-23 16:39:04 -0600691 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700692}
693
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700694bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500695 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600696 bool skip = false;
697 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700698 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500699 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700700 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
701 unsigned int index_size = 0;
702 const auto &index_buffer_binding = cb_state->index_buffer_binding;
703 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
704 index_size = 2;
705 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
706 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600707 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
708 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700709 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700710 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700711 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700712 skip |=
locke-lunarg1ae57d62020-11-18 10:49:19 -0700713 LogError(index_buffer_binding.buffer_state->buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700714 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
715 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
716 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
717 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700718 }
719 }
720 return skip;
721}
722
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700723bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
724 uint32_t drawCount, uint32_t stride) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700725 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600726 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700727 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700728 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600729 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
730 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700731 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
732 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
733 buffer_state);
734 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
735 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
736 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%u) is not less than "
737 "or equal to the size of buffer (%u).",
738 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600739 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700740 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
741 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
742 return skip;
743}
744
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700745bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700746 uint32_t drawCount, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700747 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700748 "vkCmdDrawIndexedIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600749 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700750 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700751 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600752 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
753 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
754 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700755 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
756 offset, buffer_state);
757 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
758 skip |= LogError(
759 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
760 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%u) is not less than "
761 "or equal to the size of buffer (%u).",
762 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600763 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700764 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
765 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
766 // 'buffer'.
767 return skip;
768}
769
Jeff Bolz5c801d12019-10-09 10:38:45 -0500770bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600771 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700772 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()");
Lockef39c0772019-04-03 14:40:02 -0600773 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700774}
775
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700776bool CoreChecks::ValidateBaseGroups(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
777 const char *apiName) const {
778 bool skip = false;
779 if (baseGroupX || baseGroupY || baseGroupZ) {
780 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
781 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
782 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
783 if (pipeline_state && !(pipeline_state->computePipelineCI.flags & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
784 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchBase-baseGroupX-00427",
785 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
786 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
787 apiName);
788 }
789 }
790 return skip;
791}
792
locke-lunarg25b6c352020-08-06 17:44:18 -0600793bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
794 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
795 uint32_t groupCountZ) const {
796 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700797 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700798 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600799 return skip;
800}
801
802bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
803 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
804 uint32_t groupCountZ) const {
805 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700806 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700807 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600808 return skip;
809}
810
Jeff Bolz5c801d12019-10-09 10:38:45 -0500811bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700812 bool skip =
813 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700814 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Tony-LunarGda555b52021-01-06 13:43:49 -0700815 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
816 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
817 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
818 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
819 "size of the buffer");
820 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700821 return skip;
822}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700823bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
824 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700825 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700826 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700827 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600828 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700829 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
830 "call this command.",
831 apiName);
832 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700833 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
834 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600835 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600836 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700837 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
838 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700839 }
840
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700841 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -0600842 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700843 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700844 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700845 skip |=
846 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
847 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700848 return skip;
849}
850
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700851bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
852 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
853 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700854 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700855 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700856}
857
858bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
859 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
860 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700861 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700862 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700863}
864
865bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
866 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700867 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700868 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700869 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600870 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700871 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
872 "call this command.",
873 apiName);
874 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700875 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
876 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600877 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600878 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800879 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700880 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700881 }
882
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700883 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -0600884 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700885 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700886 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700887 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700888 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800889 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700890 return skip;
891}
892
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700893bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
894 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
895 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700896 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
897 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700898}
899
900bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
901 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
902 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700903 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
904 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700905}
906
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600907bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
908 uint32_t firstInstance, VkBuffer counterBuffer,
909 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
910 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700911 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700912 if (!enabled_features.transform_feedback_features.transformFeedback) {
913 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
914 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
915 }
916 if (device_extensions.vk_ext_transform_feedback && !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -0800917 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700918 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
919 "vkCmdDrawIndirectByteCountEXT()");
920 }
locke-lunarg3fa463a2020-10-23 16:39:04 -0600921 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
922 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700923 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700924 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700925 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
926 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600927}
928
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500929bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
930 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
931 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
932 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
933 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
934 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
935 uint32_t width, uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700936 bool skip =
937 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV, "vkCmdTraceRaysNV()");
sourav parmard1521802020-06-07 21:49:02 -0700938 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700939 auto callable_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(callableShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700940 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
941 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
942 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
943 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
944 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
945 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700946 auto hit_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(hitShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700947 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
948 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
949 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
950 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
951 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
952 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700953 auto miss_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(missShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700954 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
955 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
956 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100957 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700958 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
959 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700960 auto raygen_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(raygenShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700961 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
962 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
963 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100964 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700965 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
966 }
sourav parmarcd5fb182020-07-17 12:58:44 -0700967
sourav parmar30e19392020-12-02 16:57:21 -0800968 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
969 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
970 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
971 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
972 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -0700973 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500974 return skip;
975}
976
Jason Macnak67407e72019-07-11 11:05:09 -0700977void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
978 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
979 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
980 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
981 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
982 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
983 uint32_t width, uint32_t height, uint32_t depth) {
984 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600985 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -0700986 cb_state->hasTraceRaysCmd = true;
987}
988
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500989bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700990 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
991 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
992 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
993 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500994 uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700995 bool skip =
996 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR, "vkCmdTraceRaysKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -0700997 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -0700998 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
999 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001000 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1001 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1002 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1003 } else { // bound to valid RT pipeline
1004 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1005 if (!pHitShaderBindingTable->deviceAddress) {
1006 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1007 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1008 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1009 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1010 }
1011 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1012 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1013 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1014 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1015 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1016 "execute an intersection shader must not be set to zero.");
1017 }
1018 }
1019 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1020 if (!pHitShaderBindingTable->deviceAddress) {
1021 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1022 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1023 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1024 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1025 }
1026 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1027 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1028 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1029 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1030 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1031 "execute a closest hit shader must not be set to zero.");
1032 }
1033 }
1034 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001035 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1036 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1037 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1038 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1039 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1040 "execute an any hit shader must not be set to zero.");
1041 }
1042 }
1043 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001044 return skip;
1045}
1046
1047void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001048 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1049 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1050 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1051 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001052 uint32_t height, uint32_t depth) {
1053 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001054 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001055 cb_state->hasTraceRaysCmd = true;
1056}
1057
1058bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001059 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1060 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1061 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1062 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1063 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001064 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001065 "vkCmdTraceRaysIndirectKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001066 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001067 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1068 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001069 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1070 skip |=
1071 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1072 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1073 } else { // valid bind point
1074 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1075 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1076 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1077 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1078 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1079 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1080 }
1081 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1082 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1083 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1084 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1085 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1086 "execute an intersection shader must not be set to zero.");
1087 }
1088 }
1089 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1090 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1091 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1092 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1093 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1094 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1095 }
1096 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1097 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1098 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1099 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1100 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1101 "execute a closest hit shader must not be set to zero.");
1102 }
1103 }
1104 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001105 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1106 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1107 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1108 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1109 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1110 "execute an any hit shader must not be set to zero.");
1111 }
1112 }
1113 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001114 return skip;
1115}
1116
1117void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001118 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1119 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1120 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1121 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -07001122 VkDeviceAddress indirectDeviceAddress) {
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001123 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001124 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
1125 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001126 cb_state->hasTraceRaysCmd = true;
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001127}
1128
Jeff Bolz5c801d12019-10-09 10:38:45 -05001129bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001130 bool skip =
1131 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV, "vkCmdDrawMeshTasksNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001132 return skip;
1133}
1134
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001135bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001136 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001137 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001138 "vkCmdDrawMeshTasksIndirectNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001139 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001140 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001141 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001142 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1143 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1144 drawCount, offset, buffer_state);
1145 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001146 return skip;
1147}
1148
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001149bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1150 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001151 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001152 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001153 "vkCmdDrawMeshTasksIndirectCountNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001154 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1155 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001156 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001157 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001158 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001159 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001160 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1161 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001162 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1163 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1164 if (maxDrawCount > 1) {
1165 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1166 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1167 maxDrawCount, offset, buffer_state);
1168 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001169 return skip;
1170}