blob: d5e714261961d4e9c7f079bcbff69d070d1344b5 [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
sfricke-samsung85584a72021-09-30 21:43:38 -0700782bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point,
783 CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700784 bool skip = false;
John Zulauffbf3c202019-07-17 14:57:14 -0600785 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700786 if (cb_state) {
sfricke-samsung85584a72021-09-30 21:43:38 -0700787 skip |= ValidateCmd(cb_state, cmd_type);
788 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point);
sfricke-samsunga3c47d12021-09-30 13:34:54 -0700789 skip |= ValidateCmdRayQueryState(cb_state, cmd_type, bind_point);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700790 }
791 return skip;
792}
793
locke-lunarg3fa463a2020-10-23 16:39:04 -0600794bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
sfricke-samsung85584a72021-09-30 21:43:38 -0700795 CMD_TYPE cmd_type) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600796 bool skip = false;
797 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
sfricke-samsung85584a72021-09-30 21:43:38 -0700798 const char *caller = CommandTypeString(cmd_type);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600799 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
800 if (!cb_node) return skip;
801
802 // Verify maxMultiviewInstanceIndex
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600803 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass() && enabled_features.multiview_features.multiview &&
locke-lunarg3fa463a2020-10-23 16:39:04 -0600804 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
805 LogObjectList objlist(commandBuffer);
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600806 objlist.add(cb_node->activeRenderPass->renderPass());
locke-lunarg3fa463a2020-10-23 16:39:04 -0600807 skip |= LogError(objlist, vuid.max_multiview_instance_index,
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600808 "%s: renderpass %s multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
locke-lunarg3fa463a2020-10-23 16:39:04 -0600809 "and firstInstance: %" PRIu32 ".",
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -0600810 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass()).c_str(),
locke-lunarg3fa463a2020-10-23 16:39:04 -0600811 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
812 }
813 return skip;
814}
815
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700816bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500817 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600818 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -0700819 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW);
820 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW);
locke-lunarg3fa463a2020-10-23 16:39:04 -0600821 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700822}
823
Tony-LunarG4490de42021-06-21 15:49:19 -0600824bool CoreChecks::PreCallValidateCmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
825 const VkMultiDrawInfoEXT *pVertexInfo, uint32_t instanceCount,
826 uint32_t firstInstance, uint32_t stride) const {
827 bool skip = false;
828 if (!enabled_features.multi_draw_features.multiDraw) {
829 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-None-04933",
830 "vkCmdDrawMultiEXT(): The multiDraw feature must be enabled to "
831 "call this command.");
832 }
833 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
834 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiEXT-drawCount-04934",
835 "vkCmdDrawMultiEXT(): parameter, uint32_t drawCount (%" PRIu32
836 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (%" PRIu32 ").",
837 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
838 }
839
sfricke-samsung85584a72021-09-30 21:43:38 -0700840 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWMULTIEXT);
841 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIEXT);
Tony-LunarG4490de42021-06-21 15:49:19 -0600842 return skip;
843}
844
845bool CoreChecks::ValidateCmdDrawIndexedBufferSize(VkCommandBuffer commandBuffer, uint32_t indexCount,
846 uint32_t firstIndex, const char *caller, const char *first_index_vuid) const {
847 bool skip = false;
848 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
849 if (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND) {
850 unsigned int index_size = 0;
851 const auto &index_buffer_binding = cb_state->index_buffer_binding;
852 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
853 index_size = 2;
854 }
855 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
856 index_size = 4;
857 }
858 else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
859 index_size = 1;
860 }
861 VkDeviceSize end_offset = (index_size * (static_cast<VkDeviceSize>(firstIndex) + indexCount)) + index_buffer_binding.offset;
862 if (end_offset > index_buffer_binding.size) {
863 skip |= LogError(index_buffer_binding.buffer_state->buffer(), first_index_vuid,
864 "%s: index size (%u) * (firstIndex (%u) + indexCount (%u)) "
865 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
866 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
867 caller, index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset,
868 index_buffer_binding.size);
869 }
870 }
871 return skip;
872}
873
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700874bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500875 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600876 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -0700877 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED);
878 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED);
Tony-LunarG4490de42021-06-21 15:49:19 -0600879 skip |= ValidateCmdDrawIndexedBufferSize(commandBuffer, indexCount, firstIndex, "vkCmdDrawIndexed()",
880 "VUID-vkCmdDrawIndexed-firstIndex-04932");
881 return skip;
882}
883
884bool CoreChecks::PreCallValidateCmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount,
885 const VkMultiDrawIndexedInfoEXT *pIndexInfo, uint32_t instanceCount,
886 uint32_t firstInstance, uint32_t stride,
887 const int32_t *pVertexOffset) const {
888 bool skip = false;
889 if (!enabled_features.multi_draw_features.multiDraw) {
890 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-None-04937",
891 "vkCmdDrawMultiIndexedEXT(): The multiDraw feature must be enabled to "
892 "call this command.");
893 }
894 if (drawCount > phys_dev_ext_props.multi_draw_props.maxMultiDrawCount) {
895 skip |= LogError(commandBuffer, "VUID-vkCmdDrawMultiIndexedEXT-drawCount-04939",
896 "vkCmdDrawMultiIndexedEXT(): parameter, uint32_t drawCount (0x%" PRIu32
897 ") must be less than VkPhysicalDeviceMultiDrawPropertiesEXT::maxMultiDrawCount (0x%" PRIu32 ").",
898 drawCount, phys_dev_ext_props.multi_draw_props.maxMultiDrawCount);
899 }
sfricke-samsung85584a72021-09-30 21:43:38 -0700900 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWMULTIINDEXEDEXT);
901 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMULTIINDEXEDEXT);
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200902 const auto info_bytes = reinterpret_cast<const char *>(pIndexInfo);
Tony-LunarG4490de42021-06-21 15:49:19 -0600903 for (uint32_t i = 0; i < drawCount; i++) {
Ricardo Garcia27a26f52021-07-13 15:52:14 +0200904 const auto info_ptr = reinterpret_cast<const VkMultiDrawIndexedInfoEXT *>(info_bytes + i * stride);
905 skip |= ValidateCmdDrawIndexedBufferSize(commandBuffer, info_ptr->indexCount, info_ptr->firstIndex,
Tony-LunarG4490de42021-06-21 15:49:19 -0600906 "vkCmdDrawMultiIndexedEXT()", "VUID-vkCmdDrawMultiIndexedEXT-firstIndex-04938");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700907 }
908 return skip;
909}
910
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700911bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
912 uint32_t drawCount, uint32_t stride) const {
sfricke-samsung85584a72021-09-30 21:43:38 -0700913 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT);
John Zulauffbf3c202019-07-17 14:57:14 -0600914 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung85584a72021-09-30 21:43:38 -0700915 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700916 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600917 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
918 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700919 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
920 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
921 buffer_state);
922 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
923 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600924 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%" PRIu64 ") is not less than "
925 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700926 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600927 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700928 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
929 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
930 return skip;
931}
932
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700933bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700934 uint32_t drawCount, uint32_t stride) const {
sfricke-samsung85584a72021-09-30 21:43:38 -0700935 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT);
John Zulauffbf3c202019-07-17 14:57:14 -0600936 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung85584a72021-09-30 21:43:38 -0700937 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT);
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700938 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600939 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
940 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
941 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700942 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
943 offset, buffer_state);
944 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
945 skip |= LogError(
946 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
Jeremy Gebbenda6b48f2021-05-13 10:46:18 -0600947 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%" PRIu64 ") is not less than "
948 "or equal to the size of buffer (%" PRIu64 ").",
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700949 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600950 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700951 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
952 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
953 // 'buffer'.
954 return skip;
955}
956
Jeff Bolz5c801d12019-10-09 10:38:45 -0500957bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600958 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -0700959 skip |= ValidateCmdDrawType(commandBuffer, 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
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700963bool CoreChecks::ValidateBaseGroups(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
964 const char *apiName) const {
965 bool skip = false;
966 if (baseGroupX || baseGroupY || baseGroupZ) {
967 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
968 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_COMPUTE);
969 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben11af9792021-08-20 10:20:09 -0600970 if (pipeline_state && !(pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_DISPATCH_BASE)) {
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700971 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchBase-baseGroupX-00427",
972 "%s(): If any of baseGroupX, baseGroupY, or baseGroupZ are not zero, then the bound compute pipeline "
973 "must have been created with the VK_PIPELINE_CREATE_DISPATCH_BASE flag",
974 apiName);
975 }
976 }
977 return skip;
978}
979
locke-lunarg25b6c352020-08-06 17:44:18 -0600980bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
981 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
982 uint32_t groupCountZ) const {
983 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -0700984 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE);
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700985 skip |= ValidateBaseGroups(commandBuffer, 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;
sfricke-samsung85584a72021-09-30 21:43:38 -0700993 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASEKHR);
Tony-LunarGf825e6d2020-12-16 13:05:17 -0700994 skip |= ValidateBaseGroups(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, "vkCmdDispatchBaseKHR()");
locke-lunarg25b6c352020-08-06 17:44:18 -0600995 return skip;
996}
997
Jeff Bolz5c801d12019-10-09 10:38:45 -0500998bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung85584a72021-09-30 21:43:38 -0700999 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT);
1000 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT);
Tony-LunarGda555b52021-01-06 13:43:49 -07001001 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1002 if ((offset + sizeof(VkDispatchIndirectCommand)) > buffer_state->createInfo.size) {
1003 skip |= LogError(commandBuffer, "VUID-vkCmdDispatchIndirect-offset-00407",
1004 "vkCmdDispatchIndirect(): The sum of offset and the size of VkDispatchIndirectCommand is greater than the "
1005 "size of the buffer");
1006 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001007 return skip;
1008}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001009bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1010 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001011 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001012 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001013 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001014 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1015 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001016 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001017 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1018 "call this command.",
1019 apiName);
1020 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001021 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride,
1022 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001023 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -06001024 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001025 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride,
1026 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), maxDrawCount, offset,
1027 buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001028 }
1029
sfricke-samsung85584a72021-09-30 21:43:38 -07001030 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -06001031 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung85584a72021-09-30 21:43:38 -07001032 skip |= ValidateIndirectCmd(commandBuffer, buffer, cmd_type);
Tony-LunarG83544c72020-01-17 12:30:19 -07001033 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -07001034 skip |=
1035 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
1036 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001037 return skip;
1038}
1039
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001040bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1041 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1042 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001043 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001044 CMD_DRAWINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001045}
1046
1047bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1048 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
1049 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -07001050 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001051 CMD_DRAWINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001052}
1053
1054bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1055 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsung85584a72021-09-30 21:43:38 -07001056 uint32_t stride, CMD_TYPE cmd_type) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001057 bool skip = false;
sfricke-samsung85584a72021-09-30 21:43:38 -07001058 const char *apiName = CommandTypeString(cmd_type);
Nathaniel Cesario7f231f12021-03-25 12:10:58 -06001059 if ((device_extensions.vk_khr_draw_indirect_count != kEnabledByCreateinfo) &&
1060 ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE))) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -06001061 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -07001062 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
1063 "call this command.",
1064 apiName);
1065 }
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001066 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride,
1067 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -06001068 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -06001069 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -08001070 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
AndreyVK_D3Db2753e12021-07-21 12:24:03 +03001071 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), maxDrawCount,
1072 offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001073 }
1074
sfricke-samsung85584a72021-09-30 21:43:38 -07001075 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -06001076 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung85584a72021-09-30 21:43:38 -07001077 skip |= ValidateIndirectCmd(commandBuffer, buffer, cmd_type);
sfricke-samsungf692b972020-05-02 08:00:45 -07001078 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001079 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001080 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -08001081 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001082 return skip;
1083}
1084
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001085bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1086 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1087 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001088 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001089 CMD_DRAWINDEXEDINDIRECTCOUNTKHR);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001090}
1091
1092bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1093 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
1094 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -07001095 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsung85584a72021-09-30 21:43:38 -07001096 CMD_DRAWINDEXEDINDIRECTCOUNT);
Tony-LunarGa74d3fe2019-11-22 15:43:20 -07001097}
1098
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001099bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
1100 uint32_t firstInstance, VkBuffer counterBuffer,
1101 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
1102 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001103 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001104 if (!enabled_features.transform_feedback_features.transformFeedback) {
1105 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
1106 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
1107 }
sfricke-samsung45996a42021-09-16 13:45:27 -07001108 if (IsExtEnabled(device_extensions.vk_ext_transform_feedback) &&
1109 !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
sfricke-samsungba459bd2020-12-06 23:20:04 -08001110 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedbackDraw-02288",
Tony-LunarG2c94ba82020-11-05 14:21:40 -07001111 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
1112 "vkCmdDrawIndirectByteCountEXT()");
1113 }
sfricke-samsung85584a72021-09-30 21:43:38 -07001114 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT);
1115 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT);
1116 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT);
sfricke-samsungd5e9adb2020-10-26 03:59:29 -07001117 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -06001118}
1119
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001120bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
1121 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
1122 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
1123 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
1124 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
1125 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
1126 uint32_t width, uint32_t height, uint32_t depth) const {
sfricke-samsung85584a72021-09-30 21:43:38 -07001127 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV);
sourav parmard1521802020-06-07 21:49:02 -07001128 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001129 auto callable_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(callableShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001130 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
1131 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
1132 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
1133 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
1134 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
1135 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001136 auto hit_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(hitShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001137 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
1138 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
1139 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
1140 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
1141 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
1142 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001143 auto miss_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(missShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001144 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
1145 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
1146 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001147 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001148 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
1149 }
Nathaniel Cesarioce9b4812020-12-17 08:55:28 -07001150 auto raygen_shader_buffer_state = const_cast<BUFFER_STATE *>(GetBufferState(raygenShaderBindingTableBuffer));
sourav parmard1521802020-06-07 21:49:02 -07001151 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
1152 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
1153 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +01001154 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -07001155 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
1156 }
sourav parmarcd5fb182020-07-17 12:58:44 -07001157
sourav parmar30e19392020-12-02 16:57:21 -08001158 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
1159 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001160 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmar30e19392020-12-02 16:57:21 -08001161 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
1162 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -07001163 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -05001164 return skip;
1165}
1166
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001167bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001168 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1169 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1170 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1171 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001172 uint32_t height, uint32_t depth) const {
sfricke-samsung85584a72021-09-30 21:43:38 -07001173 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR);
sourav parmarcd5fb182020-07-17 12:58:44 -07001174 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001175 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1176 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001177 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001178 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
1179 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1180 } else { // bound to valid RT pipeline
Jeremy Gebben11af9792021-08-20 10:20:09 -06001181 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001182 if (!pHitShaderBindingTable->deviceAddress) {
1183 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
1184 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1185 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1186 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1187 }
1188 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1189 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
1190 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1191 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1192 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1193 "execute an intersection shader must not be set to zero.");
1194 }
1195 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001196 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001197 if (!pHitShaderBindingTable->deviceAddress) {
1198 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
1199 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
1200 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
1201 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1202 }
1203 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1204 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
1205 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1206 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1207 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1208 "execute a closest hit shader must not be set to zero.");
1209 }
1210 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001211 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001212 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1213 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1214 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1215 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1216 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1217 "execute an any hit shader must not be set to zero.");
1218 }
1219 }
1220 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001221 return skip;
1222}
1223
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001224bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001225 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1226 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1227 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1228 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1229 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung85584a72021-09-30 21:43:38 -07001230 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR);
sourav parmarcd5fb182020-07-17 12:58:44 -07001231 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001232 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1233 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
Jeremy Gebben14b0d1a2021-05-15 20:15:41 -06001234 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline())) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001235 skip |=
1236 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1237 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1238 } else { // valid bind point
Jeremy Gebben11af9792021-08-20 10:20:09 -06001239 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001240 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1241 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1242 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1243 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1244 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1245 }
1246 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1247 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
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, "
1250 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1251 "execute an intersection shader must not be set to zero.");
1252 }
1253 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001254 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001255 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1256 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1257 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1258 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1259 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1260 }
1261 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1262 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
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 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1266 "execute a closest hit shader must not be set to zero.");
1267 }
1268 }
Jeremy Gebben11af9792021-08-20 10:20:09 -06001269 if (pipeline_state->GetPipelineCreateFlags() & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
sourav parmarcd5fb182020-07-17 12:58:44 -07001270 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1271 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1272 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1273 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1274 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1275 "execute an any hit shader must not be set to zero.");
1276 }
1277 }
1278 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001279 return skip;
1280}
1281
Jeff Bolz5c801d12019-10-09 10:38:45 -05001282bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
sfricke-samsung85584a72021-09-30 21:43:38 -07001283 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001284 return skip;
1285}
1286
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001287bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001288 uint32_t drawCount, uint32_t stride) const {
sfricke-samsung85584a72021-09-30 21:43:38 -07001289 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV);
John Zulauffbf3c202019-07-17 14:57:14 -06001290 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung85584a72021-09-30 21:43:38 -07001291 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV);
Lockee68ac652019-05-06 10:17:33 -06001292 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001293 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1294 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1295 drawCount, offset, buffer_state);
1296 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001297 return skip;
1298}
1299
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001300bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1301 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001302 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsung85584a72021-09-30 21:43:38 -07001303 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
John Zulauffbf3c202019-07-17 14:57:14 -06001304 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1305 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung85584a72021-09-30 21:43:38 -07001306 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001307 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001308 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001309 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001310 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1311 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001312 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1313 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1314 if (maxDrawCount > 1) {
1315 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1316 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1317 maxDrawCount, offset, buffer_state);
1318 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001319 return skip;
1320}