blob: f431de50b2670603856de8a16f01cccfde47ac18 [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 inside_renderpass = "VUID-vkCmdDraw-renderpass";
49 pipeline_bound = "VUID-vkCmdDraw-None-02700";
50 dynamic_state = "VUID-vkCmdDraw-commandBuffer-02701";
51 vertex_binding = "VUID-vkCmdDraw-None-04007";
52 vertex_binding_null = "VUID-vkCmdDraw-None-04008";
53 compatible_pipeline = "VUID-vkCmdDraw-None-02697";
54 render_pass_compatible = "VUID-vkCmdDraw-renderPass-02684";
55 subpass_index = "VUID-vkCmdDraw-subpass-02685";
56 sample_location = "VUID-vkCmdDraw-sampleLocationsEnable-02689";
57 linear_sampler = "VUID-vkCmdDraw-magFilter-04553";
58 cubic_sampler = "VUID-vkCmdDraw-None-02692";
59 viewport_count = "VUID-vkCmdDraw-viewportCount-03417";
60 scissor_count = "VUID-vkCmdDraw-scissorCount-03418";
61 viewport_scissor_count = "VUID-vkCmdDraw-viewportCount-03419";
62 primitive_topology = "VUID-vkCmdDraw-primitiveTopology-03420";
63 corner_sampled_address_mode = "VUID-vkCmdDraw-flags-02696";
64 subpass_input = "VUID-vkCmdDraw-None-02686";
65 imageview_atomic = "VUID-vkCmdDraw-None-02691";
66 push_constants_set = "VUID-vkCmdDraw-None-02698";
67 image_subresources = "VUID-vkCmdDraw-None-04584";
68 descriptor_valid = "VUID-vkCmdDraw-None-02699";
69 sampler_imageview_type = "VUID-vkCmdDraw-None-02702";
70 sampler_implicitLod_dref_proj = "VUID-vkCmdDraw-None-02703";
71 sampler_bias_offset = "VUID-vkCmdDraw-None-02704";
72 vertex_binding_attribute = "VUID-vkCmdDraw-None-02721";
73 dynamic_state_setting_commands = "VUID-vkCmdDraw-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -070074 rasterization_samples = "VUID-vkCmdDraw-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070075 unprotected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02707";
76 protected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02712";
77 max_multiview_instance_index = "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -070078 img_filter_cubic = "VUID-vkCmdDraw-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070079 filter_cubic = "VUID-vkCmdDraw-filterCubic-02694";
80 filter_cubic_min_max = "VUID-vkCmdDraw-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +000081 viewport_count_primitive_shading_rate = "VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -070082 patch_control_points = "VUID-vkCmdDraw-None-04875";
83 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
84 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
85 logic_op = "VUID-vkCmdDraw-logicOp-04878";
86 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070087 }
88};
89
90struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
91 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070092 inside_renderpass = "VUID-vkCmdDrawIndexed-renderpass";
93 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";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700126 patch_control_points = "VUID-vkCmdDraw-None-04875";
127 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
128 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
129 logic_op = "VUID-vkCmdDraw-logicOp-04878";
130 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700131 }
132};
133
134struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
135 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700136 inside_renderpass = "VUID-vkCmdDrawIndirect-renderpass";
137 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
138 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
139 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
140 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
141 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
142 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
143 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
144 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
145 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
146 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
147 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
148 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
149 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
150 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
151 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
152 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
153 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
154 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
155 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
156 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
157 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
158 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
159 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
160 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
161 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
162 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
163 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
164 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700165 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700166 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
167 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700168 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700169 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
170 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000171 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700172 patch_control_points = "VUID-vkCmdDraw-None-04875";
173 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
174 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
175 logic_op = "VUID-vkCmdDraw-logicOp-04878";
176 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700177 }
178};
179
180struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
181 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700182 inside_renderpass = "VUID-vkCmdDrawIndexedIndirect-renderpass";
183 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
184 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
185 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
186 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
187 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
188 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
189 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
190 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
191 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
192 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
193 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
194 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
195 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
196 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
197 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
198 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
199 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
200 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
201 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
202 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
203 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
204 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
205 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
206 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
207 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
208 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
209 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
210 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700211 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700212 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
213 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700214 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700215 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
216 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000217 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700218 patch_control_points = "VUID-vkCmdDraw-None-04875";
219 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
220 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
221 logic_op = "VUID-vkCmdDraw-logicOp-04878";
222 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700223 }
224};
225
226struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
227 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700228 inside_renderpass = "VUID-vkCmdDispatch-renderpass";
229 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700230 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700231 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
232 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
233 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
234 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
235 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
236 push_constants_set = "VUID-vkCmdDispatch-None-02698";
237 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
238 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
239 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
240 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
241 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
242 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
243 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700244 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700245 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
246 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
247 }
248};
249
250struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
251 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700252 inside_renderpass = "VUID-vkCmdDispatchIndirect-renderpass";
253 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700254 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700255 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
256 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
257 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
258 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
259 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
260 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
261 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
262 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
263 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
264 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
265 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
266 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
267 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
268 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
269 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700270 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700271 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
272 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
273 }
274};
275
276struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
277 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700278 inside_renderpass = "VUID-vkCmdDrawIndirectCount-renderpass";
279 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
280 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
281 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
282 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
283 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
284 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
285 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
286 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
287 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
288 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
289 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
290 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
291 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
292 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
293 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
294 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
295 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
296 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
297 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
298 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
299 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
300 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
301 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
302 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
303 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
304 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
305 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
306 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700307 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700308 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
309 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700310 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700311 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
312 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000313 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700314 patch_control_points = "VUID-vkCmdDraw-None-04875";
315 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
316 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
317 logic_op = "VUID-vkCmdDraw-logicOp-04878";
318 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700319 }
320};
321
322struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
323 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700324 inside_renderpass = "VUID-vkCmdDrawIndexedIndirectCount-renderpass";
325 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
326 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
327 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
328 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
329 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
330 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
331 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
332 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
333 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
334 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
335 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
336 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
337 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
338 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
339 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
340 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
341 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
342 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
343 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
344 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
345 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
346 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
347 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
348 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
349 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
350 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
351 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
352 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700353 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700354 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
355 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700356 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700357 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
358 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000359 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700360 patch_control_points = "VUID-vkCmdDraw-None-04875";
361 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
362 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
363 logic_op = "VUID-vkCmdDraw-logicOp-04878";
364 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700365 }
366};
367
368struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
369 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700370 inside_renderpass = "VUID-vkCmdTraceRaysNV-renderpass";
371 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
372 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
373 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
374 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
375 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
376 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
377 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
378 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
379 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
380 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
381 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
382 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
383 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
384 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700385 protected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700386 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700387 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
388 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
389 }
390};
391
392struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
393 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700394 inside_renderpass = "VUID-vkCmdTraceRaysKHR-renderpass";
395 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
396 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
397 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
398 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
399 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
400 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
401 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
402 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
403 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
404 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
405 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
406 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
407 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
408 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
Shannon McPherson57255a62020-12-23 16:00:54 -0700409 protected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700410 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700411 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
412 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
413 }
414};
415
416struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
417 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700418 inside_renderpass = "VUID-vkCmdTraceRaysIndirectKHR-renderpass";
419 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
420 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
421 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
422 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
423 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700424 indirect_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
425 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
426 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700427 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
428 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
429 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
430 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
431 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
432 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
433 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
434 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
435 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700436 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700437 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
438 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
439 }
440};
441
442struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
443 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700444 inside_renderpass = "VUID-vkCmdDrawMeshTasksNV-renderpass";
445 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";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700474 patch_control_points = "VUID-vkCmdDraw-None-04875";
475 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
476 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
477 logic_op = "VUID-vkCmdDraw-logicOp-04878";
478 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700479 }
480};
481
482struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
483 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700484 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass";
485 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
486 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
487 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
488 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
489 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
490 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
491 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
492 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
493 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
494 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
495 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
496 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
497 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
498 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
499 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
500 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
501 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
502 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
503 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
504 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
505 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
506 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
507 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
508 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
509 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700510 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700511 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
512 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700513 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700514 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
515 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000516 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700517 patch_control_points = "VUID-vkCmdDraw-None-04875";
518 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
519 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
520 logic_op = "VUID-vkCmdDraw-logicOp-04878";
521 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700522 }
523};
524
525struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
526 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700527 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass";
528 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
529 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
530 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
531 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
532 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
533 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
534 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
535 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
536 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
537 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
538 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
539 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
540 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
541 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
542 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
543 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
544 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
545 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
546 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
547 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
548 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
549 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
550 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
551 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
552 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700553 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700554 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
555 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700556 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700557 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
558 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000559 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700560 patch_control_points = "VUID-vkCmdDraw-None-04875";
561 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
562 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
563 logic_op = "VUID-vkCmdDraw-logicOp-04878";
564 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700565 }
566};
567
568struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
569 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700570 inside_renderpass = "VUID-vkCmdDrawIndirectByteCountEXT-renderpass";
571 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
572 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
573 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
574 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
575 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
576 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
577 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
578 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
579 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
580 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
581 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
582 indirect_contiguous_memory = "UNASSIGNED-vkCmdDrawIndirectByteCountEXT-buffer", // TODO - Update when header are updated
583 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
584 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
585 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
586 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
587 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
588 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
589 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
590 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
591 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
592 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
593 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
594 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
595 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
596 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
597 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
598 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700599 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700600 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
601 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700602 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700603 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
604 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000605 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -0700606 patch_control_points = "VUID-vkCmdDraw-None-04875";
607 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
608 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
609 logic_op = "VUID-vkCmdDraw-logicOp-04878";
610 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700611 }
612};
613
614struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
615 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700616 inside_renderpass = "VUID-vkCmdDispatchBase-renderpass";
617 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700618 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700619 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
620 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
621 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
622 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
623 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
624 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
625 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
626 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
627 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
628 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
629 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
630 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700631 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700632 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
633 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
634 }
635};
636
637// 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 -0700638static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700639 {CMD_DRAW, DispatchVuidsCmdDraw()},
640 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
641 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
642 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
643 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
644 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
645 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
646 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
647 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
648 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
649 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
650 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
651 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
652 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
653 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
654 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700655 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700656 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700657};
658// clang-format on
659
660// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
661const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700662 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
663 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700664 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700665 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700666 }
667}
668
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700669// Generic function to handle validation for all CmdDraw* type functions
670bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700671 const char *caller) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700672 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700673 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600674 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700675 if (cb_state) {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700676 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700677 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
678 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
679 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700680 }
681 return skip;
682}
683
locke-lunarg3fa463a2020-10-23 16:39:04 -0600684bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
685 CMD_TYPE cmd_type, const char *caller) const {
686 bool skip = false;
687 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
688 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
689 if (!cb_node) return skip;
690
691 // Verify maxMultiviewInstanceIndex
692 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass && enabled_features.multiview_features.multiview &&
693 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
694 LogObjectList objlist(commandBuffer);
695 objlist.add(cb_node->activeRenderPass->renderPass);
696 skip |= LogError(objlist, vuid.max_multiview_instance_index,
697 "%s: multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
698 "and firstInstance: %" PRIu32 ".",
699 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass).c_str(),
700 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
701 }
702 return skip;
703}
704
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700705bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500706 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600707 bool skip = false;
708 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700709 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()");
locke-lunarg3fa463a2020-10-23 16:39:04 -0600710 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700711}
712
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700713bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500714 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600715 bool skip = false;
716 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700717 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500718 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700719 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
720 unsigned int index_size = 0;
721 const auto &index_buffer_binding = cb_state->index_buffer_binding;
722 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
723 index_size = 2;
724 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
725 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600726 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
727 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700728 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700729 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700730 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700731 skip |=
locke-lunarg1ae57d62020-11-18 10:49:19 -0700732 LogError(index_buffer_binding.buffer_state->buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700733 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
734 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
735 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
736 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700737 }
738 }
739 return skip;
740}
741
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700742bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
743 uint32_t drawCount, uint32_t stride) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700744 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600745 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700746 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700747 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600748 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
749 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700750 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
751 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
752 buffer_state);
753 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
754 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
755 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%u) is not less than "
756 "or equal to the size of buffer (%u).",
757 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600758 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700759 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
760 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
761 return skip;
762}
763
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700764bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700765 uint32_t drawCount, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700766 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700767 "vkCmdDrawIndexedIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600768 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700769 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700770 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600771 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
772 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
773 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700774 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
775 offset, buffer_state);
776 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
777 skip |= LogError(
778 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
779 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%u) is not less than "
780 "or equal to the size of buffer (%u).",
781 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600782 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700783 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
784 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
785 // 'buffer'.
786 return skip;
787}
788
Jeff Bolz5c801d12019-10-09 10:38:45 -0500789bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600790 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700791 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()");
Lockef39c0772019-04-03 14:40:02 -0600792 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700793}
794
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700795bool CoreChecks::ValidateBaseGroups(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
796 const char *apiName) const {
797 bool skip = false;
798 if (baseGroupX || baseGroupY || baseGroupZ) {
799 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
800 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
801 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
802 if (pipeline_state && !(pipeline_state->computePipelineCI.flags & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
803 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchBase-baseGroupX-00427",
804 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
805 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
806 apiName);
807 }
808 }
809 return skip;
810}
811
locke-lunarg25b6c352020-08-06 17:44:18 -0600812bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
813 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
814 uint32_t groupCountZ) const {
815 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700816 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700817 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600818 return skip;
819}
820
821bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
822 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
823 uint32_t groupCountZ) const {
824 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700825 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700826 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600827 return skip;
828}
829
Jeff Bolz5c801d12019-10-09 10:38:45 -0500830bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700831 bool skip =
832 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700833 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Tony-LunarGda555b52021-01-06 13:43:49 -0700834 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
835 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
836 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
837 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
838 "size of the buffer");
839 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700840 return skip;
841}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700842bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
843 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700844 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700845 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700846 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600847 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700848 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
849 "call this command.",
850 apiName);
851 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700852 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
853 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600854 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600855 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700856 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
857 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700858 }
859
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700860 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -0600861 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700862 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700863 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700864 skip |=
865 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
866 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700867 return skip;
868}
869
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700870bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
871 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
872 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700873 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700874 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700875}
876
877bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
878 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
879 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700880 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700881 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700882}
883
884bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
885 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700886 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700887 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700888 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600889 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700890 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
891 "call this command.",
892 apiName);
893 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700894 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
895 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600896 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600897 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800898 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700899 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700900 }
901
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700902 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -0600903 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700904 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700905 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700906 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700907 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800908 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700909 return skip;
910}
911
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700912bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
913 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
914 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700915 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
916 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700917}
918
919bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
920 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
921 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700922 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
923 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700924}
925
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600926bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
927 uint32_t firstInstance, VkBuffer counterBuffer,
928 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
929 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700930 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700931 if (!enabled_features.transform_feedback_features.transformFeedback) {
932 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
933 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
934 }
935 if (device_extensions.vk_ext_transform_feedback && !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -0800936 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700937 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
938 "vkCmdDrawIndirectByteCountEXT()");
939 }
locke-lunarg3fa463a2020-10-23 16:39:04 -0600940 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
941 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700942 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700943 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700944 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
945 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600946}
947
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500948bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
949 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
950 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
951 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
952 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
953 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
954 uint32_t width, uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700955 bool skip =
956 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV, "vkCmdTraceRaysNV()");
sourav parmard1521802020-06-07 21:49:02 -0700957 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
958 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700959 auto callable_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(callableShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700960 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
961 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
962 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
963 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
964 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
965 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700966 auto hit_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(hitShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700967 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
968 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
969 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
970 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
971 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
972 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700973 auto miss_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(missShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700974 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
975 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
976 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100977 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700978 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
979 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700980 auto raygen_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(raygenShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -0700981 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
982 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
983 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100984 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700985 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
986 }
sourav parmarcd5fb182020-07-17 12:58:44 -0700987
sourav parmar30e19392020-12-02 16:57:21 -0800988 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
989 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
990 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
991 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
992 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -0700993 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500994 return skip;
995}
996
Jason Macnak67407e72019-07-11 11:05:09 -0700997void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
998 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
999 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1000 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1001 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1002 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1003 uint32_t width, uint32_t height, uint32_t depth) {
1004 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001005 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -07001006 cb_state->hasTraceRaysCmd = true;
1007}
1008
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001009bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001010 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1011 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1012 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1013 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001014 uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001015 bool skip =
1016 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR, "vkCmdTraceRaysKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001017 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001018 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1019 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001020 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1021 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1022 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1023 } else { // bound to valid RT pipeline
1024 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1025 if (!pHitShaderBindingTable->deviceAddress) {
1026 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1027 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1028 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1029 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1030 }
1031 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1032 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1033 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1034 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1035 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1036 "execute an intersection shader must not be set to zero.");
1037 }
1038 }
1039 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1040 if (!pHitShaderBindingTable->deviceAddress) {
1041 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1042 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1043 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1044 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1045 }
1046 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1047 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1048 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1049 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1050 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1051 "execute a closest hit shader must not be set to zero.");
1052 }
1053 }
1054 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001055 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1056 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1057 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1058 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1059 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1060 "execute an any hit shader must not be set to zero.");
1061 }
1062 }
1063 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001064 return skip;
1065}
1066
1067void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001068 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1069 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1070 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1071 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001072 uint32_t height, uint32_t depth) {
1073 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001074 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001075 cb_state->hasTraceRaysCmd = true;
1076}
1077
1078bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001079 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1080 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1081 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1082 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1083 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001084 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001085 "vkCmdTraceRaysIndirectKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001086 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001087 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1088 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001089 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1090 skip |=
1091 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1092 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1093 } else { // valid bind point
1094 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1095 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1096 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1097 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1098 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1099 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1100 }
1101 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1102 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1103 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1104 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1105 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1106 "execute an intersection shader must not be set to zero.");
1107 }
1108 }
1109 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1110 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1111 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1112 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1113 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1114 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1115 }
1116 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1117 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1118 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1119 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1120 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1121 "execute a closest hit shader must not be set to zero.");
1122 }
1123 }
1124 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001125 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1126 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1127 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1128 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1129 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1130 "execute an any hit shader must not be set to zero.");
1131 }
1132 }
1133 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001134 return skip;
1135}
1136
1137void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001138 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1139 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1140 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1141 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -07001142 VkDeviceAddress indirectDeviceAddress) {
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001143 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001144 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
1145 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001146 cb_state->hasTraceRaysCmd = true;
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001147}
1148
Jeff Bolz5c801d12019-10-09 10:38:45 -05001149bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001150 bool skip =
1151 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV, "vkCmdDrawMeshTasksNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001152 return skip;
1153}
1154
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001155bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001156 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001157 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001158 "vkCmdDrawMeshTasksIndirectNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001159 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001160 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001161 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001162 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1163 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1164 drawCount, offset, buffer_state);
1165 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001166 return skip;
1167}
1168
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001169bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1170 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001171 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001172 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001173 "vkCmdDrawMeshTasksIndirectCountNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001174 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1175 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001176 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001177 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001178 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001179 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001180 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1181 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001182 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1183 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1184 if (maxDrawCount > 1) {
1185 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1186 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1187 maxDrawCount, offset, buffer_state);
1188 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001189 return skip;
1190}