blob: f7ac8932346c1e6330a6cb8b01605dd3aeb79649 [file] [log] [blame]
Shannon McPhersoncfb16b52021-01-04 14:24:40 -07001/* Copyright (c) 2015-2021 The Khronos Group Inc.
2 * Copyright (c) 2015-2021 Valve Corporation
3 * Copyright (c) 2015-2021 LunarG, Inc.
4 * Copyright (C) 2015-2021 Google Inc.
5 * Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved.
Jasper St. Pierre512613a2019-04-08 16:25:23 -07006 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * Author: Cody Northrop <cnorthrop@google.com>
20 * Author: Michael Lentine <mlentine@google.com>
21 * Author: Tobin Ehlis <tobine@google.com>
22 * Author: Chia-I Wu <olv@google.com>
23 * Author: Chris Forbes <chrisf@ijw.co.nz>
24 * Author: Mark Lobodzinski <mark@lunarg.com>
25 * Author: Ian Elliott <ianelliott@google.com>
26 * Author: Dave Houlton <daveh@lunarg.com>
27 * Author: Dustin Graves <dustin@lunarg.com>
28 * Author: Jeremy Hayes <jeremy@lunarg.com>
29 * Author: Jon Ashburn <jon@lunarg.com>
30 * Author: Karl Schultz <karl@lunarg.com>
31 * Author: Mark Young <marky@lunarg.com>
32 * Author: Mike Schuchardt <mikes@lunarg.com>
33 * Author: Mike Weiblen <mikew@lunarg.com>
34 * Author: Tony Barbour <tony@LunarG.com>
35 * Author: John Zulauf <jzulauf@lunarg.com>
36 * Author: Shannon McPherson <shannon@lunarg.com>
Jeremy Kniagere6827432020-04-01 09:05:56 -060037 * Author: Jeremy Kniager <jeremyk@lunarg.com>
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070038 * Author: Nathaniel Cesario <nathaniel@lunarg.com>
Tobias Hector6663c9b2020-11-05 10:18:02 +000039 * Author: Tobias Hector <tobias.hector@amd.com>
Jasper St. Pierre512613a2019-04-08 16:25:23 -070040 */
41
Jasper St. Pierre512613a2019-04-08 16:25:23 -070042#include "chassis.h"
43#include "core_validation.h"
44
Spencer Fricke507600b2020-03-22 13:23:06 -070045// clang-format off
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070046struct DispatchVuidsCmdDraw : DrawDispatchVuid {
47 DispatchVuidsCmdDraw() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070048 pipeline_bound = "VUID-vkCmdDraw-None-02700";
49 dynamic_state = "VUID-vkCmdDraw-commandBuffer-02701";
50 vertex_binding = "VUID-vkCmdDraw-None-04007";
51 vertex_binding_null = "VUID-vkCmdDraw-None-04008";
52 compatible_pipeline = "VUID-vkCmdDraw-None-02697";
53 render_pass_compatible = "VUID-vkCmdDraw-renderPass-02684";
54 subpass_index = "VUID-vkCmdDraw-subpass-02685";
55 sample_location = "VUID-vkCmdDraw-sampleLocationsEnable-02689";
56 linear_sampler = "VUID-vkCmdDraw-magFilter-04553";
57 cubic_sampler = "VUID-vkCmdDraw-None-02692";
58 viewport_count = "VUID-vkCmdDraw-viewportCount-03417";
59 scissor_count = "VUID-vkCmdDraw-scissorCount-03418";
60 viewport_scissor_count = "VUID-vkCmdDraw-viewportCount-03419";
61 primitive_topology = "VUID-vkCmdDraw-primitiveTopology-03420";
62 corner_sampled_address_mode = "VUID-vkCmdDraw-flags-02696";
63 subpass_input = "VUID-vkCmdDraw-None-02686";
64 imageview_atomic = "VUID-vkCmdDraw-None-02691";
65 push_constants_set = "VUID-vkCmdDraw-None-02698";
66 image_subresources = "VUID-vkCmdDraw-None-04584";
67 descriptor_valid = "VUID-vkCmdDraw-None-02699";
68 sampler_imageview_type = "VUID-vkCmdDraw-None-02702";
69 sampler_implicitLod_dref_proj = "VUID-vkCmdDraw-None-02703";
70 sampler_bias_offset = "VUID-vkCmdDraw-None-02704";
71 vertex_binding_attribute = "VUID-vkCmdDraw-None-02721";
72 dynamic_state_setting_commands = "VUID-vkCmdDraw-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -070073 rasterization_samples = "VUID-vkCmdDraw-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070074 unprotected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02707";
75 protected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02712";
76 max_multiview_instance_index = "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -070077 img_filter_cubic = "VUID-vkCmdDraw-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070078 filter_cubic = "VUID-vkCmdDraw-filterCubic-02694";
79 filter_cubic_min_max = "VUID-vkCmdDraw-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +000080 viewport_count_primitive_shading_rate = "VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552";
Vikram Kushwahaa57b0c32021-04-19 12:21:46 -070081 patch_control_points = "VUID-vkCmdDraw-None-04875";
82 rasterizer_discard_enable = "VUID-vkCmdDraw-None-04876";
83 depth_bias_enable = "VUID-vkCmdDraw-None-04877";
84 logic_op = "VUID-vkCmdDraw-logicOp-04878";
85 primitive_restart_enable = "VUID-vkCmdDraw-None-04879";
Piers Daniell924cd832021-05-18 13:48:47 -060086 vertex_input_binding_stride = "VUID-vkCmdDraw-pStrides-04884";
87 vertex_input = kVUID_Core_CmdDraw_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +020088 blend_enable = "VUID-vkCmdDraw-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070089 }
90};
91
Tony-LunarG4490de42021-06-21 15:49:19 -060092struct DispatchVuidsCmdDrawMultiEXT : DrawDispatchVuid {
93 DispatchVuidsCmdDrawMultiEXT() : DrawDispatchVuid() {
94 pipeline_bound = "VUID-vkCmdDrawMultiEXT-None-02700";
95 dynamic_state = "VUID-vkCmdDrawMultiEXT-commandBuffer-02701";
96 vertex_binding = "VUID-vkCmdDrawMultiEXT-None-04007";
97 vertex_binding_null = "VUID-vkCmdDrawMultiEXT-None-04008";
98 compatible_pipeline = "VUID-vkCmdDrawMultiEXT-None-02697";
99 render_pass_compatible = "VUID-vkCmdDrawMultiEXT-renderPass-02684";
100 subpass_index = "VUID-vkCmdDrawMultiEXT-subpass-02685";
101 sample_location = "VUID-vkCmdDrawMultiEXT-sampleLocationsEnable-02689";
102 linear_sampler = "VUID-vkCmdDrawMultiEXT-magFilter-04553";
103 cubic_sampler = "VUID-vkCmdDrawMultiEXT-None-02692";
104 viewport_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03417";
105 scissor_count = "VUID-vkCmdDrawMultiEXT-scissorCount-03418";
106 viewport_scissor_count = "VUID-vkCmdDrawMultiEXT-viewportCount-03419";
107 primitive_topology = "VUID-vkCmdDrawMultiEXT-primitiveTopology-03420";
108 corner_sampled_address_mode = "VUID-vkCmdDrawMultiEXT-flags-02696";
109 subpass_input = "VUID-vkCmdDrawMultiEXT-None-02686";
110 imageview_atomic = "VUID-vkCmdDrawMultiEXT-None-02691";
111 push_constants_set = "VUID-vkCmdDrawMultiEXT-None-02698";
112 image_subresources = "VUID-vkCmdDrawMultiEXT-None-04584";
113 descriptor_valid = "VUID-vkCmdDrawMultiEXT-None-02699";
114 sampler_imageview_type = "VUID-vkCmdDrawMultiEXT-None-02702";
115 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiEXT-None-02703";
116 sampler_bias_offset = "VUID-vkCmdDrawMultiEXT-None-02704";
117 vertex_binding_attribute = "VUID-vkCmdDrawMultiEXT-None-02721";
118 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiEXT-None-02859";
119 rasterization_samples = "VUID-vkCmdDrawMultiEXT-rasterizationSamples-04740";
120 unprotected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02707";
121 protected_command_buffer = "VUID-vkCmdDrawMultiEXT-commandBuffer-02712";
122 max_multiview_instance_index = "VUID-vkCmdDrawMultiEXT-maxMultiviewInstanceIndex-02688";
123 img_filter_cubic = "VUID-vkCmdDrawMultiEXT-None-02693";
124 filter_cubic = "VUID-vkCmdDrawMultiEXT-filterCubic-02694";
125 filter_cubic_min_max = "VUID-vkCmdDrawMultiEXT-filterCubicMinmax-02695";
126 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
127 patch_control_points = "VUID-vkCmdDrawMultiEXT-None-04875";
128 rasterizer_discard_enable = "VUID-vkCmdDrawMultiEXT-None-04876";
129 depth_bias_enable = "VUID-vkCmdDrawMultiEXT-None-04877";
130 logic_op = "VUID-vkCmdDrawMultiEXT-logicOp-04878";
131 primitive_restart_enable = "VUID-vkCmdDrawMultiEXT-None-04879";
132 vertex_input_binding_stride = "VUID-vkCmdDrawMultiEXT-pStrides-04884";
133 vertex_input = kVUID_Core_CmdDrawMultiEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200134 blend_enable = "VUID-vkCmdDrawMultiEXT-blendEnable-04727";
Tony-LunarG4490de42021-06-21 15:49:19 -0600135 }
136};
137
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700138struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
139 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700140 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
141 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
142 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
143 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
144 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
145 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
146 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
147 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
148 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
149 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
150 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
151 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
152 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
153 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
154 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
155 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
156 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
157 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
158 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
159 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
160 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
161 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
162 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
163 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
164 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700165 rasterization_samples = "VUID-vkCmdDrawIndexed-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700166 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
167 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
168 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700169 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700170 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
171 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000172 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600173 patch_control_points = "VUID-vkCmdDrawIndexed-None-04875";
174 rasterizer_discard_enable = "VUID-vkCmdDrawIndexed-None-04876";
175 depth_bias_enable = "VUID-vkCmdDrawIndexed-None-04877";
176 logic_op = "VUID-vkCmdDrawIndexed-logicOp-04878";
177 primitive_restart_enable = "VUID-vkCmdDrawIndexed-None-04879";
178 vertex_input_binding_stride = "VUID-vkCmdDrawIndexed-pStrides-04884";
179 vertex_input = kVUID_Core_CmdDrawIndexed_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200180 blend_enable = "VUID-vkCmdDrawIndexed-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700181 }
182};
183
Tony-LunarG4490de42021-06-21 15:49:19 -0600184struct DispatchVuidsCmdDrawMultiIndexedEXT : DrawDispatchVuid {
185 DispatchVuidsCmdDrawMultiIndexedEXT() : DrawDispatchVuid() {
186 pipeline_bound = "VUID-vkCmdDrawMultiIndexedEXT-None-02700";
187 dynamic_state = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02701";
188 vertex_binding = "VUID-vkCmdDrawMultiIndexedEXT-None-04007";
189 vertex_binding_null = "VUID-vkCmdDrawMultiIndexedEXT-None-04008";
190 compatible_pipeline = "VUID-vkCmdDrawMultiIndexedEXT-None-02697";
191 render_pass_compatible = "VUID-vkCmdDrawMultiIndexedEXT-renderPass-02684";
192 subpass_index = "VUID-vkCmdDrawMultiIndexedEXT-subpass-02685";
193 sample_location = "VUID-vkCmdDrawMultiIndexedEXT-sampleLocationsEnable-02689";
194 linear_sampler = "VUID-vkCmdDrawMultiIndexedEXT-magFilter-04553";
195 cubic_sampler = "VUID-vkCmdDrawMultiIndexedEXT-None-02692";
196 viewport_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03417";
197 scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-scissorCount-03418";
198 viewport_scissor_count = "VUID-vkCmdDrawMultiIndexedEXT-viewportCount-03419";
199 primitive_topology = "VUID-vkCmdDrawMultiIndexedEXT-primitiveTopology-03420";
200 corner_sampled_address_mode = "VUID-vkCmdDrawMultiIndexedEXT-flags-02696";
201 subpass_input = "VUID-vkCmdDrawMultiIndexedEXT-None-02686";
202 imageview_atomic = "VUID-vkCmdDrawMultiIndexedEXT-None-02691";
203 push_constants_set = "VUID-vkCmdDrawMultiIndexedEXT-None-02698";
204 image_subresources = "VUID-vkCmdDrawMultiIndexedEXT-None-04584";
205 descriptor_valid = "VUID-vkCmdDrawMultiIndexedEXT-None-02699";
206 sampler_imageview_type = "VUID-vkCmdDrawMultiIndexedEXT-None-02702";
207 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMultiIndexedEXT-None-02703";
208 sampler_bias_offset = "VUID-vkCmdDrawMultiIndexedEXT-None-02704";
209 vertex_binding_attribute = "VUID-vkCmdDrawMultiIndexedEXT-None-02721";
210 dynamic_state_setting_commands = "VUID-vkCmdDrawMultiIndexedEXT-None-02859";
211 rasterization_samples = "VUID-vkCmdDrawMultiIndexedEXT-rasterizationSamples-04740";
212 unprotected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02707";
213 protected_command_buffer = "VUID-vkCmdDrawMultiIndexedEXT-commandBuffer-02712";
214 max_multiview_instance_index = "VUID-vkCmdDrawMultiIndexedEXT-maxMultiviewInstanceIndex-02688";
215 img_filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-None-02693";
216 filter_cubic = "VUID-vkCmdDrawMultiIndexedEXT-filterCubic-02694";
217 filter_cubic_min_max = "VUID-vkCmdDrawMultiIndexedEXT-filterCubicMinmax-02695";
218 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMultiIndexedEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
219 patch_control_points = "VUID-vkCmdDrawMultiIndexedEXT-None-04875";
220 rasterizer_discard_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04876";
221 depth_bias_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04877";
222 logic_op = "VUID-vkCmdDrawMultiIndexedEXT-logicOp-04878";
223 primitive_restart_enable = "VUID-vkCmdDrawMultiIndexedEXT-None-04879";
224 vertex_input_binding_stride = "VUID-vkCmdDrawMultiIndexedEXT-pStrides-04884";
225 vertex_input = kVUID_Core_CmdDrawMultiIndexedEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200226 blend_enable = "VUID-vkCmdDrawMultiIndexedEXT-blendEnable-04727";
Tony-LunarG4490de42021-06-21 15:49:19 -0600227 }
228};
229
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700230struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
231 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700232 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
233 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
234 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
235 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
236 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
237 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
238 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
239 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
240 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
241 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
242 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
243 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
244 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
245 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
246 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
247 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
248 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
249 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
250 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
251 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
252 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
253 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
254 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
255 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
256 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
257 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
258 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
259 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700260 rasterization_samples = "VUID-vkCmdDrawIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700261 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
262 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700263 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700264 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
265 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000266 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600267 patch_control_points = "VUID-vkCmdDrawIndirect-None-04875";
268 rasterizer_discard_enable = "VUID-vkCmdDrawIndirect-None-04876";
269 depth_bias_enable = "VUID-vkCmdDrawIndirect-None-04877";
270 logic_op = "VUID-vkCmdDrawIndirect-logicOp-04878";
271 primitive_restart_enable = "VUID-vkCmdDrawIndirect-None-04879";
272 vertex_input_binding_stride = "VUID-vkCmdDrawIndirect-pStrides-04884";
273 vertex_input = kVUID_Core_CmdDrawIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200274 blend_enable = "VUID-vkCmdDrawIndirect-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700275 }
276};
277
278struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
279 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700280 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
281 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
282 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
283 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
284 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
285 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
286 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
287 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
288 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
289 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
290 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
291 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
292 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
293 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
294 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
295 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
296 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
297 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
298 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
299 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
300 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
301 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
302 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
303 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
304 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
305 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
306 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
307 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700308 rasterization_samples = "VUID-vkCmdDrawIndexedIndirect-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700309 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
310 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700311 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700312 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
313 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000314 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600315 patch_control_points = "VUID-vkCmdDrawIndexedIndirect-None-04875";
316 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirect-None-04876";
317 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirect-None-04877";
318 logic_op = "VUID-vkCmdDrawIndexedIndirect-logicOp-04878";
319 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirect-None-04879";
320 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirect-pStrides-04884";
321 vertex_input = kVUID_Core_CmdDrawIndexedIndirect_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200322 blend_enable = "VUID-vkCmdDrawIndexedIndirect-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700323 }
324};
325
326struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
327 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700328 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700329 dynamic_state = "VUID-vkCmdDispatch-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700330 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
331 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
332 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
333 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
334 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
335 push_constants_set = "VUID-vkCmdDispatch-None-02698";
336 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
337 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
338 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
339 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
340 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
341 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
342 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700343 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700344 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
345 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
346 }
347};
348
349struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
350 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700351 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700352 dynamic_state = "VUID-vkCmdDispatchIndirect-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700353 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
354 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
355 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
356 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
357 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
358 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
359 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
360 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
361 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
362 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
363 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
364 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
365 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
366 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
367 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700368 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700369 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
370 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
371 }
372};
373
374struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
375 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700376 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
377 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
378 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
379 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
380 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
381 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
382 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
383 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
384 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
385 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
386 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
387 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
388 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
389 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
390 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
391 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
392 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
393 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
394 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
395 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
396 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
397 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
398 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
399 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
400 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
401 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
402 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
403 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700404 rasterization_samples = "VUID-vkCmdDrawIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700405 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
406 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700407 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700408 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
409 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000410 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600411 patch_control_points = "VUID-vkCmdDrawIndirectCount-None-04875";
412 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectCount-None-04876";
413 depth_bias_enable = "VUID-vkCmdDrawIndirectCount-None-04877";
414 logic_op = "VUID-vkCmdDrawIndirectCount-logicOp-04878";
415 primitive_restart_enable = "VUID-vkCmdDrawIndirectCount-None-04879";
416 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectCount-pStrides-04884";
417 vertex_input = kVUID_Core_CmdDrawIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200418 blend_enable = "VUID-vkCmdDrawIndirectCount-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700419 }
420};
421
422struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
423 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700424 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
425 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
426 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
427 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
428 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
429 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
430 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
431 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
432 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
433 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
434 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
435 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
436 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
437 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
438 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
439 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
440 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
441 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
442 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
443 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
444 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
445 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
446 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
447 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
448 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
449 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
450 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
451 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700452 rasterization_samples = "VUID-vkCmdDrawIndexedIndirectCount-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700453 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
454 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700455 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700456 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
457 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000458 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600459 patch_control_points = "VUID-vkCmdDrawIndexedIndirectCount-None-04875";
460 rasterizer_discard_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04876";
461 depth_bias_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04877";
462 logic_op = "VUID-vkCmdDrawIndexedIndirectCount-logicOp-04878";
463 primitive_restart_enable = "VUID-vkCmdDrawIndexedIndirectCount-None-04879";
464 vertex_input_binding_stride = "VUID-vkCmdDrawIndexedIndirectCount-pStrides-04884";
465 vertex_input = kVUID_Core_CmdDrawIndexedIndirectCount_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200466 blend_enable = "VUID-vkCmdDrawIndexedIndirectCount-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700467 }
468};
469
470struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
471 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700472 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
473 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
474 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
475 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
476 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
477 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
478 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
479 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
480 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
481 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
482 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
483 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
484 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
485 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700486 ray_query_protected_cb = "VUID-vkCmdTraceRaysNV-commandBuffer-04624";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700487 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700488 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
489 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
490 }
491};
492
493struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
494 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700495 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
496 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
497 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
498 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
499 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
500 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
501 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
502 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
503 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
504 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
505 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
506 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
507 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
508 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700509 ray_query_protected_cb = "VUID-vkCmdTraceRaysKHR-commandBuffer-04625";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700510 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700511 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
512 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
513 }
514};
515
516struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
517 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700518 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
519 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
520 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
521 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
522 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
Shannon McPherson57255a62020-12-23 16:00:54 -0700523 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03632";
524 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-indirectDeviceAddress-03633";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700525 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
526 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
527 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
528 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
529 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
530 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
531 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
532 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
533 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700534 ray_query_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-03635";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700535 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700536 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
537 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
538 }
539};
540
541struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
542 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700543 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
544 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
545 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
546 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
547 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
548 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
549 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
550 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
551 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
552 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
553 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
554 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
555 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
556 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
557 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
558 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
559 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
560 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
561 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
562 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
563 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
564 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700565 rasterization_samples = "VUID-vkCmdDrawMeshTasksNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700566 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
567 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700568 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700569 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
570 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000571 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600572 patch_control_points = "VUID-vkCmdDrawMeshTasksNV-None-04875";
573 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksNV-None-04876";
574 depth_bias_enable = "VUID-vkCmdDrawMeshTasksNV-None-04877";
575 logic_op = "VUID-vkCmdDrawMeshTasksNV-logicOp-04878";
576 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksNV-None-04879";
577 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksNV-pStrides-04884";
578 vertex_input = kVUID_Core_CmdDrawMeshTasksNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200579 blend_enable = "VUID-vkCmdDrawMeshTasksNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700580 }
581};
582
583struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
584 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700585 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
586 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
587 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
588 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
589 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
590 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
591 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
592 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
593 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
594 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
595 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
596 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
597 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
598 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
599 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
600 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
601 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
602 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
603 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
604 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
605 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
606 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
607 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
608 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
609 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700610 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700611 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
612 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700613 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700614 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
615 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000616 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600617 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04875";
618 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04876";
619 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04877";
620 logic_op = "VUID-vkCmdDrawMeshTasksIndirectNV-logicOp-04878";
621 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04879";
622 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectNV-pStrides-04884";
623 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200624 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700625 }
626};
627
628struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
629 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700630 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
631 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
632 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
633 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
634 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
635 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
636 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
637 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
638 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
639 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
640 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
641 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
642 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
643 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
644 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
645 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
646 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
647 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
648 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
649 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
650 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
651 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
652 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
653 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
654 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700655 rasterization_samples = "VUID-vkCmdDrawMeshTasksIndirectCountNV-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700656 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
657 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700658 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700659 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
660 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000661 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600662 patch_control_points = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04875";
663 rasterizer_discard_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04876";
664 depth_bias_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04877";
665 logic_op = "VUID-vkCmdDrawMeshTasksIndirectCountNV-logicOp-04878";
666 primitive_restart_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04879";
667 vertex_input_binding_stride = "VUID-vkCmdDrawMeshTasksIndirectCountNV-pStrides-04884";
668 vertex_input = kVUID_Core_CmdDrawMeshTasksIndirectCountNV_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200669 blend_enable = "VUID-vkCmdDrawMeshTasksIndirectCountNV-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700670 }
671};
672
673struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
674 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700675 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
676 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
677 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
678 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
679 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
680 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
681 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
682 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
683 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
684 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
685 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
sfricke-samsungb091d4e2021-04-18 23:15:59 -0700686 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-04567",
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700687 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
688 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
689 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
690 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
691 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
692 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
693 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
694 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
695 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
696 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
697 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
698 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
699 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
700 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
701 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
702 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
sfricke-samsung962d6f02021-04-03 20:28:59 -0700703 rasterization_samples = "VUID-vkCmdDrawIndirectByteCountEXT-rasterizationSamples-04740";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700704 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
705 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700706 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700707 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
708 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000709 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Piers Daniell924cd832021-05-18 13:48:47 -0600710 patch_control_points = "VUID-vkCmdDrawIndirectByteCountEXT-None-04875";
711 rasterizer_discard_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04876";
712 depth_bias_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04877";
713 logic_op = "VUID-vkCmdDrawIndirectByteCountEXT-logicOp-04878";
714 primitive_restart_enable = "VUID-vkCmdDrawIndirectByteCountEXT-None-04879";
715 vertex_input_binding_stride = "VUID-vkCmdDrawIndirectByteCountEXT-pStrides-04884";
716 vertex_input = kVUID_Core_CmdDrawIndirectByteCountEXT_VertexInput;
ziga-lunarg8d62f952021-08-30 16:47:25 +0200717 blend_enable = "VUID-vkCmdDrawIndirectByteCountEXT-blendEnable-04727";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700718 }
719};
720
721struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
722 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700723 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
Mark Lobodzinski02d37552020-12-28 13:29:46 -0700724 dynamic_state = "VUID-vkCmdDispatchBase-commandBuffer-02701";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700725 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
726 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
727 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
728 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
729 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
730 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
731 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
732 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
733 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
734 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
735 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
736 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
sfricke-samsunge79d0892021-06-17 08:56:22 -0700737 protected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700738 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700739 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
740 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
741 }
742};
743
744// 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 -0700745static const std::map<CMD_TYPE, DrawDispatchVuid> kDrawdispatchVuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700746 {CMD_DRAW, DispatchVuidsCmdDraw()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600747 {CMD_DRAWMULTIEXT, DispatchVuidsCmdDrawMultiEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700748 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
Tony-LunarG4490de42021-06-21 15:49:19 -0600749 {CMD_DRAWMULTIINDEXEDEXT, DispatchVuidsCmdDrawMultiIndexedEXT()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700750 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
751 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
752 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
753 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
754 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
755 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
756 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
757 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
758 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
759 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
760 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
761 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
762 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
763 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700764 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700765 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700766};
767// clang-format on
768
769// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
770const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700771 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
772 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700773 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700774 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700775 }
776}
777
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700778// Generic function to handle validation for all CmdDraw* type functions
779bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700780 const char *caller) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700781 bool skip = false;
John Zulauffbf3c202019-07-17 14:57:14 -0600782 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700783 if (cb_state) {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700784 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700785 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700786 skip |= ValidateCmdRayQueryState(cb_state, cmd_type, bind_point);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700787 }
788 return skip;
789}
790
locke-lunarg3fa463a2020-10-23 16:39:04 -0600791bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
792 CMD_TYPE cmd_type, const char *caller) const {
793 bool skip = false;
794 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
795 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
796 if (!cb_node) return skip;
797
798 // Verify maxMultiviewInstanceIndex
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600799 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass() && enabled_features.multiview_features.multiview &&
locke-lunarg3fa463a2020-10-23 16:39:04 -0600800 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
801 LogObjectList objlist(commandBuffer);
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600802 objlist.add(cb_node->activeRenderPass->renderPass());
locke-lunarg3fa463a2020-10-23 16:39:04 -0600803 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600804 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
locke-lunarg3fa463a2020-10-23 16:39:04 -0600805 "and firstInstance: %" PRIu32 ".",
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600806 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass()).c_str(),
locke-lunarg3fa463a2020-10-23 16:39:04 -0600807 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
808 }
809 return skip;
810}
811
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700812bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500813 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600814 bool skip = false;
815 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700816 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()");
locke-lunarg3fa463a2020-10-23 16:39:04 -0600817 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700818}
819
Tony-LunarG4490de42021-06-21 15:49:19 -0600820bool CoreChecks::PreCallValidateCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
821 const VkMultiDrawInfoEXT *pVertexInfo, uint32_t instanceCount,
822 uint32_t firstInstance, uint32_t stride) const {
823 bool skip = false;
824 if (!enabled_features.multi_draw_features.multiDraw) {
825 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-None-04933",
826 "vkCmdDrawMultiEXT(): The multiDraw feature must be enabled to "
827 "call this command.");
828 }
829 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
830 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-drawCount-04934",
831 "vkCmdDrawMultiEXT(): parameter, uint32_t drawCount (%" PRIu32
832 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (%" PRIu32 ").",
833 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
834 }
835
836 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWMULTIEXT, "vkCmdDrawMultiEXT()");
837 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIEXT, "vkCmdDrawMultiEXT()");
838 return skip;
839}
840
841bool CoreChecks::ValidateCmdDrawIndexedBufferSize(VkCommandBuffer commandBuffer, uint32_t indexCount,
842 uint32_t firstIndex, const char *caller, const char *first_index_vuid) const {
843 bool skip = false;
844 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
845 if (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND) {
846 unsigned int index_size = 0;
847 const auto &index_buffer_binding = cb_state->index_buffer_binding;
848 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
849 index_size = 2;
850 }
851 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
852 index_size = 4;
853 }
854 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
855 index_size = 1;
856 }
857 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
858 if (end_offset > index_buffer_binding.size) {
859 skip |= LogError(index_buffer_binding.buffer_state->buffer(), first_index_vuid,
860 "%s: index size (%u) * (firstIndex (%u) + indexCount (%u)) "
861 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
862 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
863 caller, index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset,
864 index_buffer_binding.size);
865 }
866 }
867 return skip;
868}
869
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700870bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500871 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600872 bool skip = false;
873 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700874 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
Tony-LunarG4490de42021-06-21 15:49:19 -0600875 skip |= ValidateCmdDrawIndexedBufferSize(commandBuffer, indexCount, firstIndex, "vkCmdDrawIndexed()",
876 "VUID-vkCmdDrawIndexed-firstIndex-04932");
877 return skip;
878}
879
880bool CoreChecks::PreCallValidateCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
881 const VkMultiDrawIndexedInfoEXT *pIndexInfo, uint32_t instanceCount,
882 uint32_t firstInstance, uint32_t stride,
883 const int32_t *pVertexOffset) const {
884 bool skip = false;
885 if (!enabled_features.multi_draw_features.multiDraw) {
886 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-None-04937",
887 "vkCmdDrawMultiIndexedEXT(): The multiDraw feature must be enabled to "
888 "call this command.");
889 }
890 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
891 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939",
892 "vkCmdDrawMultiIndexedEXT(): parameter, uint32_t drawCount (0x%" PRIu32
893 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (0x%" PRIu32 ").",
894 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
895 }
896 skip |=
897 ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWMULTIINDEXEDEXT, "vkCmdDrawMultiIndexedEXT()");
898 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIINDEXEDEXT,
899 "vkCmdDrawMultiIndexedEXT()");
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200900 const auto info_bytes = reinterpret_cast<const char *>(pIndexInfo);
Tony-LunarG4490de42021-06-21 15:49:19 -0600901 for (uint32_t i = 0; i < drawCount; i++) {
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200902 const auto info_ptr = reinterpret_cast<const VkMultiDrawIndexedInfoEXT *>(info_bytes + i * stride);
903 skip |= ValidateCmdDrawIndexedBufferSize(commandBuffer, info_ptr->indexCount, info_ptr->firstIndex,
Tony-LunarG4490de42021-06-21 15:49:19 -0600904 "vkCmdDrawMultiIndexedEXT()", "VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700905 }
906 return skip;
907}
908
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700909bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
910 uint32_t drawCount, uint32_t stride) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700911 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600912 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700913 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700914 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600915 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
916 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700917 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
918 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
919 buffer_state);
920 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
921 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600922 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%" PRIu64 ") is not less than "
923 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700924 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600925 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700926 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
927 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
928 return skip;
929}
930
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700931bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700932 uint32_t drawCount, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700933 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700934 "vkCmdDrawIndexedIndirect()");
John Zulauffbf3c202019-07-17 14:57:14 -0600935 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700936 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700937 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600938 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
939 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
940 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700941 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
942 offset, buffer_state);
943 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
944 skip |= LogError(
945 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600946 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%" PRIu64 ") is not less than "
947 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700948 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600949 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700950 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
951 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
952 // 'buffer'.
953 return skip;
954}
955
Jeff Bolz5c801d12019-10-09 10:38:45 -0500956bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600957 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700958 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()");
Lockef39c0772019-04-03 14:40:02 -0600959 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700960}
961
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700962bool CoreChecks::ValidateBaseGroups(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
963 const char *apiName) const {
964 bool skip = false;
965 if (baseGroupX || baseGroupY || baseGroupZ) {
966 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
967 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
968 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben11af9792021-08-20 10:20:09 -0600969 if (pipeline_state && !(pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700970 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchBase-baseGroupX-00427",
971 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
972 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
973 apiName);
974 }
975 }
976 return skip;
977}
978
locke-lunarg25b6c352020-08-06 17:44:18 -0600979bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
980 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
981 uint32_t groupCountZ) const {
982 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700983 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700984 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600985 return skip;
986}
987
988bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
989 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
990 uint32_t groupCountZ) const {
991 bool skip = false;
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700992 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()");
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700993 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600994 return skip;
995}
996
Jeff Bolz5c801d12019-10-09 10:38:45 -0500997bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -0700998 bool skip =
999 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001000 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Tony-LunarGda555b52021-01-06 13:43:49 -07001001 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1002 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
1003 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
1004 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
1005 "size of the buffer");
1006 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001007 return skip;
1008}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001009bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1010 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -07001011 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001012 bool skip = false;
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001013 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1014 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001015 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001016 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1017 "call this command.",
1018 apiName);
1019 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001020 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride,
1021 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001022 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -06001023 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001024 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride,
1025 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), maxDrawCount, offset,
1026 buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001027 }
1028
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001029 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -06001030 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001031 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -07001032 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -07001033 skip |=
1034 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
1035 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001036 return skip;
1037}
1038
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001039bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1040 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1041 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001042 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -07001043 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001044}
1045
1046bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1047 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1048 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001049 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -07001050 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001051}
1052
1053bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1054 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -07001055 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001056 bool skip = false;
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001057 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1058 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001059 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001060 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1061 "call this command.",
1062 apiName);
1063 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001064 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride,
1065 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001066 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -06001067 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -08001068 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001069 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), maxDrawCount,
1070 offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001071 }
1072
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001073 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
John Zulauffbf3c202019-07-17 14:57:14 -06001074 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001075 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -07001076 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001077 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001078 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -08001079 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001080 return skip;
1081}
1082
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001083bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1084 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1085 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001086 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
1087 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001088}
1089
1090bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1091 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1092 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001093 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
1094 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001095}
1096
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001097bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
1098 uint32_t firstInstance, VkBuffer counterBuffer,
1099 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
1100 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001101 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001102 if (!enabled_features.transform_feedback_features.transformFeedback) {
1103 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
1104 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
1105 }
sfricke-samsung45996a42021-09-16 13:45:27 -07001106 if (IsExtEnabled(device_extensions.vk_ext_transform_feedback) &&
1107 !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -08001108 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001109 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
1110 "vkCmdDrawIndirectByteCountEXT()");
1111 }
locke-lunarg3fa463a2020-10-23 16:39:04 -06001112 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
1113 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001114 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001115 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001116 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
1117 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001118}
1119
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001120bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1121 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1122 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1123 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1124 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1125 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1126 uint32_t width, uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001127 bool skip =
1128 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV, "vkCmdTraceRaysNV()");
sourav parmard1521802020-06-07 21:49:02 -07001129 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001130 auto callable_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(callableShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001131 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
1132 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
1133 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
1134 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
1135 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
1136 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001137 auto hit_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(hitShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001138 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
1139 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
1140 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
1141 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
1142 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
1143 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001144 auto miss_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(missShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001145 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
1146 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
1147 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001148 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001149 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
1150 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001151 auto raygen_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(raygenShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001152 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
1153 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
1154 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001155 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001156 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
1157 }
sourav parmarcd5fb182020-07-17 12:58:44 -07001158
sourav parmar30e19392020-12-02 16:57:21 -08001159 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
1160 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001161 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmar30e19392020-12-02 16:57:21 -08001162 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
1163 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -07001164 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001165 return skip;
1166}
1167
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001168bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001169 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1170 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1171 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1172 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001173 uint32_t height, uint32_t depth) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001174 bool skip =
1175 ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR, "vkCmdTraceRaysKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001176 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001177 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1178 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001179 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001180 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1181 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1182 } else { // bound to valid RT pipeline
Jeremy Gebben11af9792021-08-20 10:20:09 -06001183 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001184 if (!pHitShaderBindingTable->deviceAddress) {
1185 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1186 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1187 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1188 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1189 }
1190 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1191 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1192 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1193 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1194 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1195 "execute an intersection shader must not be set to zero.");
1196 }
1197 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001198 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001199 if (!pHitShaderBindingTable->deviceAddress) {
1200 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1201 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1202 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1203 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1204 }
1205 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1206 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1207 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1208 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1209 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1210 "execute a closest hit shader must not be set to zero.");
1211 }
1212 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001213 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001214 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1215 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1216 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1217 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1218 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1219 "execute an any hit shader must not be set to zero.");
1220 }
1221 }
1222 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001223 return skip;
1224}
1225
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001226bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001227 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1228 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1229 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1230 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1231 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001232 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001233 "vkCmdTraceRaysIndirectKHR()");
sourav parmarcd5fb182020-07-17 12:58:44 -07001234 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001235 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1236 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001237 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001238 skip |=
1239 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1240 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1241 } else { // valid bind point
Jeremy Gebben11af9792021-08-20 10:20:09 -06001242 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001243 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1244 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1245 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1246 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1247 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1248 }
1249 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1250 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1251 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1252 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1253 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1254 "execute an intersection shader must not be set to zero.");
1255 }
1256 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001257 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001258 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1259 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1260 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1261 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1262 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1263 }
1264 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1265 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1266 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1267 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1268 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1269 "execute a closest hit shader must not be set to zero.");
1270 }
1271 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001272 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001273 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1274 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1275 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1276 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1277 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1278 "execute an any hit shader must not be set to zero.");
1279 }
1280 }
1281 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001282 return skip;
1283}
1284
Jeff Bolz5c801d12019-10-09 10:38:45 -05001285bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001286 bool skip =
1287 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV, "vkCmdDrawMeshTasksNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001288 return skip;
1289}
1290
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001291bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001292 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001293 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001294 "vkCmdDrawMeshTasksIndirectNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001295 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001296 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001297 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001298 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1299 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1300 drawCount, offset, buffer_state);
1301 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001302 return skip;
1303}
1304
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001305bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1306 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001307 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001308 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
sfricke-samsung6cb1e792021-04-21 23:20:05 -07001309 "vkCmdDrawMeshTasksIndirectCountNV()");
John Zulauffbf3c202019-07-17 14:57:14 -06001310 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1311 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001312 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001313 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001314 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001315 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001316 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1317 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001318 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1319 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1320 if (maxDrawCount > 1) {
1321 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1322 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1323 maxDrawCount, offset, buffer_state);
1324 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001325 return skip;
1326}