blob: fd6a2e405157f60a63841550d284fad3749d4d74 [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()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700755 {CMD_DRAWINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700756 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700757 {CMD_DRAWINDEXEDINDIRECTCOUNTKHR, DispatchVuidsCmdDrawIndexedIndirectCount()},
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700758 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
759 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
760 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
761 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
762 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
763 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
764 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
765 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
sfricke-samsung85584a72021-09-30 21:43:38 -0700766 {CMD_DISPATCHBASEKHR, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700767 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700768 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700769};
770// clang-format on
771
772// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
773const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700774 if (kDrawdispatchVuid.find(cmd_type) != kDrawdispatchVuid.cend()) {
775 return kDrawdispatchVuid.at(cmd_type);
Spencer Fricke507600b2020-03-22 13:23:06 -0700776 } else {
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -0700777 return kDrawdispatchVuid.at(CMD_NONE);
Spencer Fricke507600b2020-03-22 13:23:06 -0700778 }
779}
780
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700781// Generic function to handle validation for all CmdDraw* type functions
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700782bool CoreChecks::ValidateCmdDrawType(const CMD_BUFFER_STATE &cb_state, bool indexed, VkPipelineBindPoint bind_point,
sfricke-samsung85584a72021-09-30 21:43:38 -0700783 CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700784 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700785 skip |= ValidateCmd(&cb_state, cmd_type);
786 skip |= ValidateCmdBufDrawState(&cb_state, cmd_type, indexed, bind_point);
787 skip |= ValidateCmdRayQueryState(&cb_state, cmd_type, bind_point);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700788 return skip;
789}
790
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700791bool CoreChecks::ValidateCmdDrawInstance(const CMD_BUFFER_STATE &cb_node, uint32_t instanceCount, uint32_t firstInstance,
sfricke-samsung85584a72021-09-30 21:43:38 -0700792 CMD_TYPE cmd_type) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600793 bool skip = false;
794 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
sfricke-samsung85584a72021-09-30 21:43:38 -0700795 const char *caller = CommandTypeString(cmd_type);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600796
797 // Verify maxMultiviewInstanceIndex
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700798 if (cb_node.activeRenderPass && cb_node.activeRenderPass->renderPass() && enabled_features.multiview_features.multiview &&
locke-lunarg3fa463a2020-10-23 16:39:04 -0600799 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700800 LogObjectList objlist(cb_node.Handle());
801 objlist.add(cb_node.activeRenderPass->Handle());
locke-lunarg3fa463a2020-10-23 16:39:04 -0600802 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700803 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32
804 ", but instanceCount: %" PRIu32 "and firstInstance: %" PRIu32 ".",
805 caller, report_data->FormatHandle(cb_node.activeRenderPass->Handle()).c_str(),
locke-lunarg3fa463a2020-10-23 16:39:04 -0600806 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
807 }
808 return skip;
809}
810
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700811bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500812 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600813 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700814 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
815 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAW);
816 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW);
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 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700835 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
836 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIEXT);
837 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIEXT);
Tony-LunarG4490de42021-06-21 15:49:19 -0600838 return skip;
839}
840
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700841bool CoreChecks::ValidateCmdDrawIndexedBufferSize(const CMD_BUFFER_STATE &cb_state, uint32_t indexCount, uint32_t firstIndex,
842 const char *caller, const char *first_index_vuid) const {
Tony-LunarG4490de42021-06-21 15:49:19 -0600843 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700844 if (cb_state.status & CBSTATUS_INDEX_BUFFER_BOUND) {
Tony-LunarG4490de42021-06-21 15:49:19 -0600845 unsigned int index_size = 0;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700846 const auto &index_buffer_binding = cb_state.index_buffer_binding;
Tony-LunarG4490de42021-06-21 15:49:19 -0600847 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
848 index_size = 2;
849 }
850 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
851 index_size = 4;
852 }
853 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
854 index_size = 1;
855 }
856 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
857 if (end_offset > index_buffer_binding.size) {
858 skip |= LogError(index_buffer_binding.buffer_state->buffer(), first_index_vuid,
859 "%s: index size (%u) * (firstIndex (%u) + indexCount (%u)) "
860 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
861 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
862 caller, index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset,
863 index_buffer_binding.size);
864 }
865 }
866 return skip;
867}
868
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700869bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500870 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600871 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700872 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
873 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDEXED);
874 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED);
875 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, indexCount, firstIndex, "vkCmdDrawIndexed()",
Tony-LunarG4490de42021-06-21 15:49:19 -0600876 "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 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700896 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
897 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWMULTIINDEXEDEXT);
898 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIINDEXEDEXT);
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200899 const auto info_bytes = reinterpret_cast<const char *>(pIndexInfo);
Tony-LunarG4490de42021-06-21 15:49:19 -0600900 for (uint32_t i = 0; i < drawCount; i++) {
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200901 const auto info_ptr = reinterpret_cast<const VkMultiDrawIndexedInfoEXT *>(info_bytes + i * stride);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700902 skip |= ValidateCmdDrawIndexedBufferSize(*cb_state, info_ptr->indexCount, info_ptr->firstIndex,
Tony-LunarG4490de42021-06-21 15:49:19 -0600903 "vkCmdDrawMultiIndexedEXT()", "VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700904 }
905 return skip;
906}
907
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700908bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
909 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700910 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
911 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -0600912 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700913 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDIRECT);
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 {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700933 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
934 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -0600935 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700936 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWINDEXEDINDIRECT);
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;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700958 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
959 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH);
Lockef39c0772019-04-03 14:40:02 -0600960 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700961}
962
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700963bool CoreChecks::ValidateBaseGroups(const CMD_BUFFER_STATE &cb_state, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700964 const char *apiName) const {
965 bool skip = false;
966 if (baseGroupX || baseGroupY || baseGroupZ) {
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700967 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700968 const auto *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)) {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700970 skip |= LogError(cb_state.Handle(), "VUID-vkCmdDispatchBase-baseGroupX-00427",
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700971 "%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;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700983 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
984 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE);
985 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBase()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600986 return skip;
987}
988
989bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
990 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
991 uint32_t groupCountZ) const {
992 bool skip = false;
Jeremy Gebbene5361dd2021-11-18 14:23:56 -0700993 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
994 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASEKHR);
995 skip |= ValidateBaseGroups(*cb_state, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600996 return skip;
997}
998
Jeff Bolz5c801d12019-10-09 10:38:45 -0500999bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001000 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1001 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001002 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001003 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DISPATCHINDIRECT);
Tony-LunarGda555b52021-01-06 13:43:49 -07001004 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
1005 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
1006 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
1007 "size of the buffer");
1008 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001009 return skip;
1010}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001011bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1012 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001013 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001014 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001015 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001016 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1017 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001018 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001019 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1020 "call this command.",
1021 apiName);
1022 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001023 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride,
1024 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001025 if (maxDrawCount > 1) {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001026 const auto buffer_state = Get<BUFFER_STATE>(buffer);
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001027 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride,
1028 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), maxDrawCount, offset,
1029 buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001030 }
1031
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001032 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1033 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1034 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1035 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001036 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Tony-LunarG83544c72020-01-17 12:30:19 -07001037 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -07001038 skip |=
1039 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
1040 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001041 return skip;
1042}
1043
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001044bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1045 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1046 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001047 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001048 CMD_DRAWINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001049}
1050
1051bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1052 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1053 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001054 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001055 CMD_DRAWINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001056}
1057
1058bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1059 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001060 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001061 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001062 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001063 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1064 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001065 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001066 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1067 "call this command.",
1068 apiName);
1069 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001070 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride,
1071 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001072 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Lockee68ac652019-05-06 10:17:33 -06001073 if (maxDrawCount > 1) {
Mike Schuchardt65847d92019-12-20 13:50:47 -08001074 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001075 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), maxDrawCount,
1076 offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001077 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001078 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1079 skip |= ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
1080 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, cmd_type);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001081 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
sfricke-samsungf692b972020-05-02 08:00:45 -07001082 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001083 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001084 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -08001085 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001086 return skip;
1087}
1088
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001089bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1090 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1091 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001092 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001093 CMD_DRAWINDEXEDINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001094}
1095
1096bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1097 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1098 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001099 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001100 CMD_DRAWINDEXEDINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001101}
1102
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001103bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
1104 uint32_t firstInstance, VkBuffer counterBuffer,
1105 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
1106 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001107 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001108 if (!enabled_features.transform_feedback_features.transformFeedback) {
1109 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
1110 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
1111 }
sfricke-samsung45996a42021-09-16 13:45:27 -07001112 if (IsExtEnabled(device_extensions.vk_ext_transform_feedback) &&
1113 !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -08001114 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001115 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
1116 "vkCmdDrawIndirectByteCountEXT()");
1117 }
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001118 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1119 skip |= ValidateCmdDrawInstance(*cb_state, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT);
1120 skip |= ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT);
1121 const auto counter_buffer_state = Get<BUFFER_STATE>(counterBuffer);
1122 skip |= ValidateIndirectCmd(*cb_state, *counter_buffer_state, CMD_DRAWINDIRECTBYTECOUNTEXT);
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001123 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001124}
1125
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001126bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1127 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1128 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1129 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1130 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1131 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1132 uint32_t width, uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001133 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001134 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001135 auto callable_shader_buffer_state = Get<BUFFER_STATE>(callableShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001136 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
1137 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
1138 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
1139 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
1140 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
1141 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001142 auto hit_shader_buffer_state = Get<BUFFER_STATE>(hitShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001143 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
1144 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
1145 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
1146 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
1147 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
1148 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001149 auto miss_shader_buffer_state = Get<BUFFER_STATE>(missShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001150 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
1151 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
1152 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001153 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001154 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
1155 }
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001156 auto raygen_shader_buffer_state = Get<BUFFER_STATE>(raygenShaderBindingTableBuffer);
sourav parmard1521802020-06-07 21:49:02 -07001157 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
1158 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
1159 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001160 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001161 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
1162 }
sourav parmarcd5fb182020-07-17 12:58:44 -07001163
sourav parmar30e19392020-12-02 16:57:21 -08001164 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
1165 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001166 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmar30e19392020-12-02 16:57:21 -08001167 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
1168 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -07001169 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001170 return skip;
1171}
1172
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001173bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001174 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1175 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1176 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1177 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001178 uint32_t height, uint32_t depth) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001179 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001180 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001181 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1182 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001183 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001184 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1185 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1186 } else { // bound to valid RT pipeline
Jeremy Gebben11af9792021-08-20 10:20:09 -06001187 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001188 if (!pHitShaderBindingTable->deviceAddress) {
1189 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1190 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1191 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1192 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1193 }
1194 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1195 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1196 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1197 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1198 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1199 "execute an intersection shader must not be set to zero.");
1200 }
1201 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001202 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001203 if (!pHitShaderBindingTable->deviceAddress) {
1204 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1205 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1206 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1207 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1208 }
1209 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1210 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1211 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1212 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1213 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1214 "execute a closest hit shader must not be set to zero.");
1215 }
1216 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001217 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001218 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1219 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1220 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1221 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1222 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1223 "execute an any hit shader must not be set to zero.");
1224 }
1225 }
1226 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001227 return skip;
1228}
1229
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001230bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001231 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1232 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1233 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1234 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1235 VkDeviceAddress indirectDeviceAddress) const {
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001236 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001237 bool skip = ValidateCmdDrawType(*cb_state, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR);
Shannon McPherson9caca052020-11-25 11:34:38 -07001238 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001239 const auto *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001240 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001241 skip |=
1242 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1243 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1244 } else { // valid bind point
Jeremy Gebben11af9792021-08-20 10:20:09 -06001245 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001246 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1247 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1248 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1249 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1250 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1251 }
1252 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1253 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1254 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1255 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1256 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1257 "execute an intersection shader must not be set to zero.");
1258 }
1259 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001260 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001261 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1262 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1263 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1264 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1265 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1266 }
1267 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1268 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1269 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1270 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1271 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1272 "execute a closest hit shader must not be set to zero.");
1273 }
1274 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001275 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001276 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1277 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1278 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1279 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1280 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1281 "execute an any hit shader must not be set to zero.");
1282 }
1283 }
1284 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001285 return skip;
1286}
1287
Jeff Bolz5c801d12019-10-09 10:38:45 -05001288bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001289 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1290 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001291 return skip;
1292}
1293
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001294bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001295 uint32_t drawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001296 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1297 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001298 const auto buffer_state = Get<BUFFER_STATE>(buffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001299 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTNV);
Lockee68ac652019-05-06 10:17:33 -06001300 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001301 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1302 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1303 drawCount, offset, buffer_state);
1304 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001305 return skip;
1306}
1307
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001308bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1309 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001310 uint32_t maxDrawCount, uint32_t stride) const {
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001311 const auto cb_state = Get<CMD_BUFFER_STATE>(commandBuffer);
1312 bool skip = ValidateCmdDrawType(*cb_state, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jeremy Gebbenb20a8242021-11-05 15:14:43 -06001313 const auto buffer_state = Get<BUFFER_STATE>(buffer);
1314 const auto count_buffer_state = Get<BUFFER_STATE>(countBuffer);
Jeremy Gebbene5361dd2021-11-18 14:23:56 -07001315 skip |= ValidateIndirectCmd(*cb_state, *buffer_state, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001316 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001317 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001318 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001319 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1320 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001321 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1322 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1323 if (maxDrawCount > 1) {
1324 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1325 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1326 maxDrawCount, offset, buffer_state);
1327 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001328 return skip;
1329}