blob: 87c1333da546c4855126334a75777794382557dc [file] [log] [blame]
Tony-LunarG73719992020-01-15 10:20:28 -07001/* Copyright (c) 2015-2020 The Khronos Group Inc.
2 * Copyright (c) 2015-2020 Valve Corporation
3 * Copyright (c) 2015-2020 LunarG, Inc.
4 * Copyright (C) 2015-2020 Google Inc.
Tobias Hector6663c9b2020-11-05 10:18:02 +00005 * Modifications Copyright (C) 2020 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() {
48 queue_flag = "VUID-vkCmdDraw-commandBuffer-cmdpool";
49 inside_renderpass = "VUID-vkCmdDraw-renderpass";
50 pipeline_bound = "VUID-vkCmdDraw-None-02700";
51 dynamic_state = "VUID-vkCmdDraw-commandBuffer-02701";
52 vertex_binding = "VUID-vkCmdDraw-None-04007";
53 vertex_binding_null = "VUID-vkCmdDraw-None-04008";
54 compatible_pipeline = "VUID-vkCmdDraw-None-02697";
55 render_pass_compatible = "VUID-vkCmdDraw-renderPass-02684";
56 subpass_index = "VUID-vkCmdDraw-subpass-02685";
57 sample_location = "VUID-vkCmdDraw-sampleLocationsEnable-02689";
58 linear_sampler = "VUID-vkCmdDraw-magFilter-04553";
59 cubic_sampler = "VUID-vkCmdDraw-None-02692";
60 viewport_count = "VUID-vkCmdDraw-viewportCount-03417";
61 scissor_count = "VUID-vkCmdDraw-scissorCount-03418";
62 viewport_scissor_count = "VUID-vkCmdDraw-viewportCount-03419";
63 primitive_topology = "VUID-vkCmdDraw-primitiveTopology-03420";
64 corner_sampled_address_mode = "VUID-vkCmdDraw-flags-02696";
65 subpass_input = "VUID-vkCmdDraw-None-02686";
66 imageview_atomic = "VUID-vkCmdDraw-None-02691";
67 push_constants_set = "VUID-vkCmdDraw-None-02698";
68 image_subresources = "VUID-vkCmdDraw-None-04584";
69 descriptor_valid = "VUID-vkCmdDraw-None-02699";
70 sampler_imageview_type = "VUID-vkCmdDraw-None-02702";
71 sampler_implicitLod_dref_proj = "VUID-vkCmdDraw-None-02703";
72 sampler_bias_offset = "VUID-vkCmdDraw-None-02704";
73 vertex_binding_attribute = "VUID-vkCmdDraw-None-02721";
74 dynamic_state_setting_commands = "VUID-vkCmdDraw-None-02859";
75 unprotected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02707";
76 protected_command_buffer = "VUID-vkCmdDraw-commandBuffer-02712";
77 max_multiview_instance_index = "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -070078 img_filter_cubic = "VUID-vkCmdDraw-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070079 filter_cubic = "VUID-vkCmdDraw-filterCubic-02694";
80 filter_cubic_min_max = "VUID-vkCmdDraw-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +000081 viewport_count_primitive_shading_rate = "VUID-vkCmdDraw-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -070082 }
83};
84
85struct DispatchVuidsCmdDrawIndexed : DrawDispatchVuid {
86 DispatchVuidsCmdDrawIndexed() : DrawDispatchVuid() {
87 queue_flag = "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool";
88 inside_renderpass = "VUID-vkCmdDrawIndexed-renderpass";
89 pipeline_bound = "VUID-vkCmdDrawIndexed-None-02700";
90 dynamic_state = "VUID-vkCmdDrawIndexed-commandBuffer-02701";
91 vertex_binding = "VUID-vkCmdDrawIndexed-None-04007";
92 vertex_binding_null = "VUID-vkCmdDrawIndexed-None-04008";
93 compatible_pipeline = "VUID-vkCmdDrawIndexed-None-02697";
94 render_pass_compatible = "VUID-vkCmdDrawIndexed-renderPass-02684";
95 subpass_index = "VUID-vkCmdDrawIndexed-subpass-02685";
96 sample_location = "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689";
97 linear_sampler = "VUID-vkCmdDrawIndexed-magFilter-04553";
98 cubic_sampler = "VUID-vkCmdDrawIndexed-None-02692";
99 viewport_count = "VUID-vkCmdDrawIndexed-viewportCount-03417";
100 scissor_count = "VUID-vkCmdDrawIndexed-scissorCount-03418";
101 viewport_scissor_count = "VUID-vkCmdDrawIndexed-viewportCount-03419";
102 primitive_topology = "VUID-vkCmdDrawIndexed-primitiveTopology-03420";
103 corner_sampled_address_mode = "VUID-vkCmdDrawIndexed-flags-02696";
104 subpass_input = "VUID-vkCmdDrawIndexed-None-02686";
105 imageview_atomic = "VUID-vkCmdDrawIndexed-None-02691";
106 push_constants_set = "VUID-vkCmdDrawIndexed-None-02698";
107 image_subresources = "VUID-vkCmdDrawIndexed-None-04584";
108 descriptor_valid = "VUID-vkCmdDrawIndexed-None-02699";
109 sampler_imageview_type = "VUID-vkCmdDrawIndexed-None-02702";
110 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexed-None-02703";
111 sampler_bias_offset = "VUID-vkCmdDrawIndexed-None-02704";
112 vertex_binding_attribute = "VUID-vkCmdDrawIndexed-None-02721";
113 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexed-None-02859";
114 unprotected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02707";
115 protected_command_buffer = "VUID-vkCmdDrawIndexed-commandBuffer-02712";
116 max_multiview_instance_index = "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700117 img_filter_cubic = "VUID-vkCmdDrawIndexed-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700118 filter_cubic = "VUID-vkCmdDrawIndexed-filterCubic-02694";
119 filter_cubic_min_max = "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000120 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexed-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700121 }
122};
123
124struct DispatchVuidsCmdDrawIndirect : DrawDispatchVuid {
125 DispatchVuidsCmdDrawIndirect() : DrawDispatchVuid() {
126 queue_flag = "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool";
127 inside_renderpass = "VUID-vkCmdDrawIndirect-renderpass";
128 pipeline_bound = "VUID-vkCmdDrawIndirect-None-02700";
129 dynamic_state = "VUID-vkCmdDrawIndirect-commandBuffer-02701";
130 vertex_binding = "VUID-vkCmdDrawIndirect-None-04007";
131 vertex_binding_null = "VUID-vkCmdDrawIndirect-None-04008";
132 compatible_pipeline = "VUID-vkCmdDrawIndirect-None-02697";
133 render_pass_compatible = "VUID-vkCmdDrawIndirect-renderPass-02684";
134 subpass_index = "VUID-vkCmdDrawIndirect-subpass-02685";
135 sample_location = "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689";
136 linear_sampler = "VUID-vkCmdDrawIndirect-magFilter-04553";
137 cubic_sampler = "VUID-vkCmdDrawIndirect-None-02692";
138 indirect_protected_cb = "VUID-vkCmdDrawIndirect-commandBuffer-02711";
139 indirect_contiguous_memory = "VUID-vkCmdDrawIndirect-buffer-02708";
140 indirect_buffer_bit = "VUID-vkCmdDrawIndirect-buffer-02709";
141 viewport_count = "VUID-vkCmdDrawIndirect-viewportCount-03417";
142 scissor_count = "VUID-vkCmdDrawIndirect-scissorCount-03418";
143 viewport_scissor_count = "VUID-vkCmdDrawIndirect-viewportCount-03419";
144 primitive_topology = "VUID-vkCmdDrawIndirect-primitiveTopology-03420";
145 corner_sampled_address_mode = "VUID-vkCmdDrawIndirect-flags-02696";
146 subpass_input = "VUID-vkCmdDrawIndirect-None-02686";
147 imageview_atomic = "VUID-vkCmdDrawIndirect-None-02691";
148 push_constants_set = "VUID-vkCmdDrawIndirect-None-02698";
149 image_subresources = "VUID-vkCmdDrawIndirect-None-04584";
150 descriptor_valid = "VUID-vkCmdDrawIndirect-None-02699";
151 sampler_imageview_type = "VUID-vkCmdDrawIndirect-None-02702";
152 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirect-None-02703";
153 sampler_bias_offset = "VUID-vkCmdDrawIndirect-None-02704";
154 vertex_binding_attribute = "VUID-vkCmdDrawIndirect-None-02721";
155 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirect-None-02859";
156 unprotected_command_buffer = "VUID-vkCmdDrawIndirect-commandBuffer-02707";
157 max_multiview_instance_index = "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700158 img_filter_cubic = "VUID-vkCmdDrawIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700159 filter_cubic = "VUID-vkCmdDrawIndirect-filterCubic-02694";
160 filter_cubic_min_max = "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000161 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700162 }
163};
164
165struct DispatchVuidsCmdDrawIndexedIndirect : DrawDispatchVuid {
166 DispatchVuidsCmdDrawIndexedIndirect() : DrawDispatchVuid() {
167 queue_flag = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool";
168 inside_renderpass = "VUID-vkCmdDrawIndexedIndirect-renderpass";
169 pipeline_bound = "VUID-vkCmdDrawIndexedIndirect-None-02700";
170 dynamic_state = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701";
171 vertex_binding = "VUID-vkCmdDrawIndexedIndirect-None-04007";
172 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirect-None-04008";
173 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirect-None-02697";
174 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirect-renderPass-02684";
175 subpass_index = "VUID-vkCmdDrawIndexedIndirect-subpass-02685";
176 sample_location = "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689";
177 linear_sampler = "VUID-vkCmdDrawIndexedIndirect-magFilter-04553";
178 cubic_sampler = "VUID-vkCmdDrawIndexedIndirect-None-02692";
179 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711";
180 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirect-buffer-02708";
181 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirect-buffer-02709";
182 viewport_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417";
183 scissor_count = "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418";
184 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419";
185 primitive_topology = "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420";
186 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirect-flags-02696";
187 subpass_input = "VUID-vkCmdDrawIndexedIndirect-None-02686";
188 imageview_atomic = "VUID-vkCmdDrawIndexedIndirect-None-02691";
189 push_constants_set = "VUID-vkCmdDrawIndexedIndirect-None-02698";
190 image_subresources = "VUID-vkCmdDrawIndexedIndirect-None-04584";
191 descriptor_valid = "VUID-vkCmdDrawIndexedIndirect-None-02699";
192 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirect-None-02702";
193 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirect-None-02703";
194 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirect-None-02704";
195 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirect-None-02721";
196 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirect-None-02859";
197 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707";
198 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700199 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700200 filter_cubic = "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694";
201 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000202 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirect-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700203 }
204};
205
206struct DispatchVuidsCmdDispatch : DrawDispatchVuid {
207 DispatchVuidsCmdDispatch() : DrawDispatchVuid() {
208 queue_flag = "VUID-vkCmdDispatch-commandBuffer-cmdpool";
209 inside_renderpass = "VUID-vkCmdDispatch-renderpass";
210 pipeline_bound = "VUID-vkCmdDispatch-None-02700";
211 compatible_pipeline = "VUID-vkCmdDispatch-None-02697";
212 linear_sampler = "VUID-vkCmdDispatch-magFilter-04553";
213 cubic_sampler = "VUID-vkCmdDispatch-None-02692";
214 corner_sampled_address_mode = "VUID-vkCmdDispatch-flags-02696";
215 imageview_atomic = "VUID-vkCmdDispatch-None-02691";
216 push_constants_set = "VUID-vkCmdDispatch-None-02698";
217 descriptor_valid = "VUID-vkCmdDispatch-None-02699";
218 sampler_imageview_type = "VUID-vkCmdDispatch-None-02702";
219 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatch-None-02703";
220 sampler_bias_offset = "VUID-vkCmdDispatch-None-02704";
221 dynamic_state_setting_commands = "VUID-vkCmdDispatch-None-02859";
222 unprotected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02707";
223 protected_command_buffer = "VUID-vkCmdDispatch-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700224 img_filter_cubic = "VUID-vkCmdDispatch-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700225 filter_cubic = "VUID-vkCmdDispatch-filterCubic-02694";
226 filter_cubic_min_max = "VUID-vkCmdDispatch-filterCubicMinmax-02695";
227 }
228};
229
230struct DispatchVuidsCmdDispatchIndirect : DrawDispatchVuid {
231 DispatchVuidsCmdDispatchIndirect() : DrawDispatchVuid() {
232 queue_flag = "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool";
233 inside_renderpass = "VUID-vkCmdDispatchIndirect-renderpass";
234 pipeline_bound = "VUID-vkCmdDispatchIndirect-None-02700";
235 compatible_pipeline = "VUID-vkCmdDispatchIndirect-None-02697";
236 linear_sampler = "VUID-vkCmdDispatchIndirect-magFilter-04553";
237 cubic_sampler = "VUID-vkCmdDispatchIndirect-None-02692";
238 indirect_protected_cb = "VUID-vkCmdDispatchIndirect-commandBuffer-02711";
239 indirect_contiguous_memory = "VUID-vkCmdDispatchIndirect-buffer-02708";
240 indirect_buffer_bit = "VUID-vkCmdDispatchIndirect-buffer-02709";
241 corner_sampled_address_mode = "VUID-vkCmdDispatchIndirect-flags-02696";
242 imageview_atomic = "VUID-vkCmdDispatchIndirect-None-02691";
243 push_constants_set = "VUID-vkCmdDispatchIndirect-None-02698";
244 descriptor_valid = "VUID-vkCmdDispatchIndirect-None-02699";
245 sampler_imageview_type = "VUID-vkCmdDispatchIndirect-None-02702";
246 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchIndirect-None-02703";
247 sampler_bias_offset = "VUID-vkCmdDispatchIndirect-None-02704";
248 dynamic_state_setting_commands = "VUID-vkCmdDispatchIndirect-None-02859";
249 unprotected_command_buffer = "VUID-vkCmdDispatchIndirect-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700250 img_filter_cubic = "VUID-vkCmdDispatchIndirect-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700251 filter_cubic = "VUID-vkCmdDispatchIndirect-filterCubic-02694";
252 filter_cubic_min_max = "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695";
253 }
254};
255
256struct DispatchVuidsCmdDrawIndirectCount : DrawDispatchVuid {
257 DispatchVuidsCmdDrawIndirectCount() : DrawDispatchVuid() {
258 queue_flag = "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool";
259 inside_renderpass = "VUID-vkCmdDrawIndirectCount-renderpass";
260 pipeline_bound = "VUID-vkCmdDrawIndirectCount-None-02700";
261 dynamic_state = "VUID-vkCmdDrawIndirectCount-commandBuffer-02701";
262 vertex_binding = "VUID-vkCmdDrawIndirectCount-None-04007";
263 vertex_binding_null = "VUID-vkCmdDrawIndirectCount-None-04008";
264 compatible_pipeline = "VUID-vkCmdDrawIndirectCount-None-02697";
265 render_pass_compatible = "VUID-vkCmdDrawIndirectCount-renderPass-02684";
266 subpass_index = "VUID-vkCmdDrawIndirectCount-subpass-02685";
267 sample_location = "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689";
268 linear_sampler = "VUID-vkCmdDrawIndirectCount-magFilter-04553";
269 cubic_sampler = "VUID-vkCmdDrawIndirectCount-None-02692";
270 indirect_protected_cb = "VUID-vkCmdDrawIndirectCount-commandBuffer-02711";
271 indirect_contiguous_memory = "VUID-vkCmdDrawIndirectCount-buffer-02708";
272 indirect_buffer_bit = "VUID-vkCmdDrawIndirectCount-buffer-02709";
273 viewport_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03417";
274 scissor_count = "VUID-vkCmdDrawIndirectCount-scissorCount-03418";
275 viewport_scissor_count = "VUID-vkCmdDrawIndirectCount-viewportCount-03419";
276 primitive_topology = "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420";
277 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectCount-flags-02696";
278 subpass_input = "VUID-vkCmdDrawIndirectCount-None-02686";
279 imageview_atomic = "VUID-vkCmdDrawIndirectCount-None-02691";
280 push_constants_set = "VUID-vkCmdDrawIndirectCount-None-02698";
281 image_subresources = "VUID-vkCmdDrawIndirectCount-None-04584";
282 descriptor_valid = "VUID-vkCmdDrawIndirectCount-None-02699";
283 sampler_imageview_type = "VUID-vkCmdDrawIndirectCount-None-02702";
284 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectCount-None-02703";
285 sampler_bias_offset = "VUID-vkCmdDrawIndirectCount-None-02704";
286 vertex_binding_attribute = "VUID-vkCmdDrawIndirectCount-None-02721";
287 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectCount-None-02859";
288 unprotected_command_buffer = "VUID-vkCmdDrawIndirectCount-commandBuffer-02707";
289 max_multiview_instance_index = "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700290 img_filter_cubic = "VUID-vkCmdDrawIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700291 filter_cubic = "VUID-vkCmdDrawIndirectCount-filterCubic-02694";
292 filter_cubic_min_max = "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000293 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700294 }
295};
296
297struct DispatchVuidsCmdDrawIndexedIndirectCount : DrawDispatchVuid {
298 DispatchVuidsCmdDrawIndexedIndirectCount() : DrawDispatchVuid() {
299 queue_flag = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool";
300 inside_renderpass = "VUID-vkCmdDrawIndexedIndirectCount-renderpass";
301 pipeline_bound = "VUID-vkCmdDrawIndexedIndirectCount-None-02700";
302 dynamic_state = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701";
303 vertex_binding = "VUID-vkCmdDrawIndexedIndirectCount-None-04007";
304 vertex_binding_null = "VUID-vkCmdDrawIndexedIndirectCount-None-04008";
305 compatible_pipeline = "VUID-vkCmdDrawIndexedIndirectCount-None-02697";
306 render_pass_compatible = "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684";
307 subpass_index = "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685";
308 sample_location = "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689";
309 linear_sampler = "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553";
310 cubic_sampler = "VUID-vkCmdDrawIndexedIndirectCount-None-02692";
311 indirect_protected_cb = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711";
312 indirect_contiguous_memory = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708";
313 indirect_buffer_bit = "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709";
314 viewport_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417";
315 scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418";
316 viewport_scissor_count = "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419";
317 primitive_topology = "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420";
318 corner_sampled_address_mode = "VUID-vkCmdDrawIndexedIndirectCount-flags-02696";
319 subpass_input = "VUID-vkCmdDrawIndexedIndirectCount-None-02686";
320 imageview_atomic = "VUID-vkCmdDrawIndexedIndirectCount-None-02691";
321 push_constants_set = "VUID-vkCmdDrawIndexedIndirectCount-None-02698";
322 image_subresources = "VUID-vkCmdDrawIndexedIndirectCount-None-04584";
323 descriptor_valid = "VUID-vkCmdDrawIndexedIndirectCount-None-02699";
324 sampler_imageview_type = "VUID-vkCmdDrawIndexedIndirectCount-None-02702";
325 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndexedIndirectCount-None-02703";
326 sampler_bias_offset = "VUID-vkCmdDrawIndexedIndirectCount-None-02704";
327 vertex_binding_attribute = "VUID-vkCmdDrawIndexedIndirectCount-None-02721";
328 dynamic_state_setting_commands = "VUID-vkCmdDrawIndexedIndirectCount-None-02859";
329 unprotected_command_buffer = "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707";
330 max_multiview_instance_index = "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700331 img_filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700332 filter_cubic = "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694";
333 filter_cubic_min_max = "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000334 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndexedIndirectCount-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700335 }
336};
337
338struct DispatchVuidsCmdTraceRaysNV: DrawDispatchVuid {
339 DispatchVuidsCmdTraceRaysNV() : DrawDispatchVuid() {
340 queue_flag = "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool";
341 inside_renderpass = "VUID-vkCmdTraceRaysNV-renderpass";
342 pipeline_bound = "VUID-vkCmdTraceRaysNV-None-02700";
343 dynamic_state = "VUID-vkCmdTraceRaysNV-commandBuffer-02701";
344 compatible_pipeline = "VUID-vkCmdTraceRaysNV-None-02697";
345 linear_sampler = "VUID-vkCmdTraceRaysNV-magFilter-04553";
346 cubic_sampler = "VUID-vkCmdTraceRaysNV-None-02692";
347 corner_sampled_address_mode = "VUID-vkCmdTraceRaysNV-flags-02696";
348 imageview_atomic = "VUID-vkCmdTraceRaysNV-None-02691";
349 push_constants_set = "VUID-vkCmdTraceRaysNV-None-02698";
350 descriptor_valid = "VUID-vkCmdTraceRaysNV-None-02699";
351 sampler_imageview_type = "VUID-vkCmdTraceRaysNV-None-02702";
352 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysNV-None-02703";
353 sampler_bias_offset = "VUID-vkCmdTraceRaysNV-None-02704";
354 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysNV-None-02859";
355 unprotected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02707";
356 protected_command_buffer = "VUID-vkCmdTraceRaysNV-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700357 img_filter_cubic = "VUID-vkCmdTraceRaysNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700358 filter_cubic = "VUID-vkCmdTraceRaysNV-filterCubic-02694";
359 filter_cubic_min_max = "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695";
360 }
361};
362
363struct DispatchVuidsCmdTraceRaysKHR: DrawDispatchVuid {
364 DispatchVuidsCmdTraceRaysKHR() : DrawDispatchVuid() {
365 queue_flag = "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool";
366 inside_renderpass = "VUID-vkCmdTraceRaysKHR-renderpass";
367 pipeline_bound = "VUID-vkCmdTraceRaysKHR-None-02700";
368 dynamic_state = "VUID-vkCmdTraceRaysKHR-commandBuffer-02701";
369 compatible_pipeline = "VUID-vkCmdTraceRaysKHR-None-02697";
370 linear_sampler = "VUID-vkCmdTraceRaysKHR-magFilter-04553";
371 cubic_sampler = "VUID-vkCmdTraceRaysKHR-None-02692";
372 corner_sampled_address_mode = "VUID-vkCmdTraceRaysKHR-flags-02696";
373 imageview_atomic = "VUID-vkCmdTraceRaysKHR-None-02691";
374 push_constants_set = "VUID-vkCmdTraceRaysKHR-None-02698";
375 descriptor_valid = "VUID-vkCmdTraceRaysKHR-None-02699";
376 sampler_imageview_type = "VUID-vkCmdTraceRaysKHR-None-02702";
377 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysKHR-None-02703";
378 sampler_bias_offset = "VUID-vkCmdTraceRaysKHR-None-02704";
379 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysKHR-None-02859";
380 unprotected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02707";
381 protected_command_buffer = "VUID-vkCmdTraceRaysKHR-commandBuffer-02712";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700382 img_filter_cubic = "VUID-vkCmdTraceRaysKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700383 filter_cubic = "VUID-vkCmdTraceRaysKHR-filterCubic-02694";
384 filter_cubic_min_max = "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695";
385 }
386};
387
388struct DispatchVuidsCmdTraceRaysIndirectKHR: DrawDispatchVuid {
389 DispatchVuidsCmdTraceRaysIndirectKHR() : DrawDispatchVuid() {
390 queue_flag = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool";
391 inside_renderpass = "VUID-vkCmdTraceRaysIndirectKHR-renderpass";
392 pipeline_bound = "VUID-vkCmdTraceRaysIndirectKHR-None-02700";
393 dynamic_state = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701";
394 compatible_pipeline = "VUID-vkCmdTraceRaysIndirectKHR-None-02697";
395 linear_sampler = "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553";
396 cubic_sampler = "VUID-vkCmdTraceRaysIndirectKHR-None-02692";
397 indirect_protected_cb = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711";
398 indirect_contiguous_memory = "VUID-vkCmdTraceRaysIndirectKHR-buffer-02708";
399 indirect_buffer_bit = "VUID-vkCmdTraceRaysIndirectKHR-buffer-02709";
400 corner_sampled_address_mode = "VUID-vkCmdTraceRaysIndirectKHR-flags-02696";
401 imageview_atomic = "VUID-vkCmdTraceRaysIndirectKHR-None-02691";
402 push_constants_set = "VUID-vkCmdTraceRaysIndirectKHR-None-02698";
403 descriptor_valid = "VUID-vkCmdTraceRaysIndirectKHR-None-02699";
404 sampler_imageview_type = "VUID-vkCmdTraceRaysIndirectKHR-None-02702";
405 sampler_implicitLod_dref_proj = "VUID-vkCmdTraceRaysIndirectKHR-None-02703";
406 sampler_bias_offset = "VUID-vkCmdTraceRaysIndirectKHR-None-02704";
407 dynamic_state_setting_commands = "VUID-vkCmdTraceRaysIndirectKHR-None-02859";
408 unprotected_command_buffer = "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700409 img_filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700410 filter_cubic = "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694";
411 filter_cubic_min_max = "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695";
412 }
413};
414
415struct DispatchVuidsCmdDrawMeshTasksNV: DrawDispatchVuid {
416 DispatchVuidsCmdDrawMeshTasksNV() : DrawDispatchVuid() {
417 queue_flag = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool";
418 inside_renderpass = "VUID-vkCmdDrawMeshTasksNV-renderpass";
419 pipeline_bound = "VUID-vkCmdDrawMeshTasksNV-None-02700";
420 dynamic_state = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701";
421 compatible_pipeline = "VUID-vkCmdDrawMeshTasksNV-None-02697";
422 render_pass_compatible = "VUID-vkCmdDrawMeshTasksNV-renderPass-02684";
423 subpass_index = "VUID-vkCmdDrawMeshTasksNV-subpass-02685";
424 sample_location = "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689";
425 linear_sampler = "VUID-vkCmdDrawMeshTasksNV-magFilter-04553";
426 cubic_sampler = "VUID-vkCmdDrawMeshTasksNV-None-02692";
427 viewport_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417";
428 scissor_count = "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418";
429 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419";
430 primitive_topology = "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420";
431 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksNV-flags-02696";
432 subpass_input = "VUID-vkCmdDrawMeshTasksNV-None-02686";
433 imageview_atomic = "VUID-vkCmdDrawMeshTasksNV-None-02691";
434 push_constants_set = "VUID-vkCmdDrawMeshTasksNV-None-02698";
435 image_subresources = "VUID-vkCmdDrawMeshTasksNV-None-04584";
436 descriptor_valid = "VUID-vkCmdDrawMeshTasksNV-None-02699";
437 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksNV-None-02702";
438 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksNV-None-02703";
439 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksNV-None-02704";
440 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksNV-None-02859";
441 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707";
442 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700443 img_filter_cubic = "VUID-vkCmdDrawMeshTasksNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700444 filter_cubic = "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694";
445 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000446 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700447 }
448};
449
450struct DispatchVuidsCmdDrawMeshTasksIndirectNV: DrawDispatchVuid {
451 DispatchVuidsCmdDrawMeshTasksIndirectNV() : DrawDispatchVuid() {
452 queue_flag = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool";
453 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass";
454 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700";
455 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701";
456 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697";
457 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684";
458 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685";
459 sample_location = "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689";
460 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553";
461 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692";
462 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711";
463 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708";
464 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709";
465 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417";
466 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418";
467 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419";
468 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420";
469 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696";
470 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686";
471 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691";
472 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698";
473 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584";
474 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699";
475 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702";
476 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703";
477 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704";
478 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859";
479 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707";
480 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700481 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700482 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694";
483 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000484 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700485 }
486};
487
488struct DispatchVuidsCmdDrawMeshTasksIndirectCountNV : DrawDispatchVuid {
489 DispatchVuidsCmdDrawMeshTasksIndirectCountNV() : DrawDispatchVuid() {
490 queue_flag = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool";
491 inside_renderpass = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass";
492 pipeline_bound = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700";
493 dynamic_state = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701";
494 compatible_pipeline = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697";
495 render_pass_compatible = "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684";
496 subpass_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685";
497 sample_location = "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689";
498 linear_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553";
499 cubic_sampler = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692";
500 indirect_protected_cb = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711";
501 indirect_contiguous_memory = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708";
502 indirect_buffer_bit = "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709";
503 viewport_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417";
504 scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418";
505 viewport_scissor_count = "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419";
506 primitive_topology = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420";
507 corner_sampled_address_mode = "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696";
508 subpass_input = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686";
509 imageview_atomic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691";
510 push_constants_set = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698";
511 image_subresources = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584";
512 descriptor_valid = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699";
513 sampler_imageview_type = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702";
514 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703";
515 sampler_bias_offset = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704";
516 dynamic_state_setting_commands = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859";
517 unprotected_command_buffer = "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707";
518 max_multiview_instance_index = "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700519 img_filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700520 filter_cubic = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694";
521 filter_cubic_min_max = "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000522 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700523 }
524};
525
526struct DispatchVuidsCmdDrawIndirectByteCountEXT: DrawDispatchVuid {
527 DispatchVuidsCmdDrawIndirectByteCountEXT() : DrawDispatchVuid() {
528 queue_flag = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool";
529 inside_renderpass = "VUID-vkCmdDrawIndirectByteCountEXT-renderpass";
530 pipeline_bound = "VUID-vkCmdDrawIndirectByteCountEXT-None-02700";
531 dynamic_state = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701";
532 vertex_binding = "VUID-vkCmdDrawIndirectByteCountEXT-None-04007";
533 vertex_binding_null = "VUID-vkCmdDrawIndirectByteCountEXT-None-04008";
534 compatible_pipeline = "VUID-vkCmdDrawIndirectByteCountEXT-None-02697";
535 render_pass_compatible = "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684";
536 subpass_index = "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685";
537 sample_location = "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689";
538 linear_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553";
539 cubic_sampler = "VUID-vkCmdDrawIndirectByteCountEXT-None-02692";
540 indirect_protected_cb = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646";
541 indirect_contiguous_memory = "UNASSIGNED-vkCmdDrawIndirectByteCountEXT-buffer", // TODO - Update when header are updated
542 indirect_buffer_bit = "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290";
543 viewport_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417";
544 scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418";
545 viewport_scissor_count = "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419";
546 primitive_topology = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420";
547 corner_sampled_address_mode = "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696";
548 subpass_input = "VUID-vkCmdDrawIndirectByteCountEXT-None-02686";
549 imageview_atomic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02691";
550 push_constants_set = "VUID-vkCmdDrawIndirectByteCountEXT-None-02698";
551 image_subresources = "VUID-vkCmdDrawIndirectByteCountEXT-None-04584";
552 descriptor_valid = "VUID-vkCmdDrawIndirectByteCountEXT-None-02699";
553 sampler_imageview_type = "VUID-vkCmdDrawIndirectByteCountEXT-None-02702";
554 sampler_implicitLod_dref_proj = "VUID-vkCmdDrawIndirectByteCountEXT-None-02703";
555 sampler_bias_offset = "VUID-vkCmdDrawIndirectByteCountEXT-None-02704";
556 vertex_binding_attribute = "VUID-vkCmdDrawIndirectByteCountEXT-None-02721";
557 dynamic_state_setting_commands = "VUID-vkCmdDrawIndirectByteCountEXT-None-02859";
558 unprotected_command_buffer = "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707";
559 max_multiview_instance_index = "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700560 img_filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700561 filter_cubic = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694";
562 filter_cubic_min_max = "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695";
Tobias Hector6663c9b2020-11-05 10:18:02 +0000563 viewport_count_primitive_shading_rate = "VUID-vkCmdDrawIndirectByteCountEXT-primitiveFragmentShadingRateWithMultipleViewports-04552";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700564 }
565};
566
567struct DispatchVuidsCmdDispatchBase: DrawDispatchVuid {
568 DispatchVuidsCmdDispatchBase() : DrawDispatchVuid() {
569 queue_flag = "VUID-vkCmdDispatchBase-commandBuffer-cmdpool";
570 inside_renderpass = "VUID-vkCmdDispatchBase-renderpass";
571 pipeline_bound = "VUID-vkCmdDispatchBase-None-02700";
572 compatible_pipeline = "VUID-vkCmdDispatchBase-None-02697";
573 linear_sampler = "VUID-vkCmdDispatchBase-magFilter-04553";
574 cubic_sampler = "VUID-vkCmdDispatchBase-None-02692";
575 corner_sampled_address_mode = "VUID-vkCmdDispatchBase-flags-02696";
576 imageview_atomic = "VUID-vkCmdDispatchBase-None-02691";
577 push_constants_set = "VUID-vkCmdDispatchBase-None-02698";
578 descriptor_valid = "VUID-vkCmdDispatchBase-None-02699";
579 sampler_imageview_type = "VUID-vkCmdDispatchBase-None-02702";
580 sampler_implicitLod_dref_proj = "VUID-vkCmdDispatchBase-None-02703";
581 sampler_bias_offset = "VUID-vkCmdDispatchBase-None-02704";
582 dynamic_state_setting_commands = "VUID-vkCmdDispatchBase-None-02859";
583 unprotected_command_buffer = "VUID-vkCmdDispatchBase-commandBuffer-02707";
Mark Lobodzinskif786b412020-11-30 12:16:17 -0700584 img_filter_cubic = "VUID-vkCmdDispatchBase-None-02693";
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700585 filter_cubic = "VUID-vkCmdDispatchBase-filterCubic-02694";
586 filter_cubic_min_max = "VUID-vkCmdDispatchBase-filterCubicMinmax-02695";
587 }
588};
589
590// This LUT is created to allow a static listing of each VUID that is covered by drawdispatch commands
Spencer Fricke507600b2020-03-22 13:23:06 -0700591static const std::map<CMD_TYPE, DrawDispatchVuid> drawdispatch_vuid = {
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700592 {CMD_DRAW, DispatchVuidsCmdDraw()},
593 {CMD_DRAWINDEXED, DispatchVuidsCmdDrawIndexed()},
594 {CMD_DRAWINDIRECT, DispatchVuidsCmdDrawIndirect()},
595 {CMD_DRAWINDEXEDINDIRECT, DispatchVuidsCmdDrawIndexedIndirect()},
596 {CMD_DISPATCH, DispatchVuidsCmdDispatch()},
597 {CMD_DISPATCHINDIRECT, DispatchVuidsCmdDispatchIndirect()},
598 {CMD_DRAWINDIRECTCOUNT, DispatchVuidsCmdDrawIndirectCount()},
599 {CMD_DRAWINDEXEDINDIRECTCOUNT, DispatchVuidsCmdDrawIndexedIndirectCount()},
600 {CMD_TRACERAYSNV, DispatchVuidsCmdTraceRaysNV()},
601 {CMD_TRACERAYSKHR, DispatchVuidsCmdTraceRaysKHR()},
602 {CMD_TRACERAYSINDIRECTKHR, DispatchVuidsCmdTraceRaysIndirectKHR()},
603 {CMD_DRAWMESHTASKSNV, DispatchVuidsCmdDrawMeshTasksNV()},
604 {CMD_DRAWMESHTASKSINDIRECTNV, DispatchVuidsCmdDrawMeshTasksIndirectNV()},
605 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, DispatchVuidsCmdDrawMeshTasksIndirectCountNV()},
606 {CMD_DRAWINDIRECTBYTECOUNTEXT, DispatchVuidsCmdDrawIndirectByteCountEXT()},
607 {CMD_DISPATCHBASE, DispatchVuidsCmdDispatchBase()},
Spencer Fricke507600b2020-03-22 13:23:06 -0700608 // Used if invalid cmd_type is used
Mark Lobodzinskiddf43612020-11-17 11:28:02 -0700609 {CMD_NONE, DrawDispatchVuid()}
Spencer Fricke507600b2020-03-22 13:23:06 -0700610};
611// clang-format on
612
613// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
614const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
615 if (drawdispatch_vuid.find(cmd_type) != drawdispatch_vuid.cend()) {
616 return drawdispatch_vuid.at(cmd_type);
617 } else {
618 return drawdispatch_vuid.at(CMD_NONE);
619 }
620}
621
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700622// Generic function to handle validation for all CmdDraw* type functions
623bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700624 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700625 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700626 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600627 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700628 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700629 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700630 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700631 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
632 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
633 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700634 }
635 return skip;
636}
637
locke-lunarg3fa463a2020-10-23 16:39:04 -0600638bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
639 CMD_TYPE cmd_type, const char *caller) const {
640 bool skip = false;
641 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
642 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
643 if (!cb_node) return skip;
644
645 // Verify maxMultiviewInstanceIndex
646 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass && enabled_features.multiview_features.multiview &&
647 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
648 LogObjectList objlist(commandBuffer);
649 objlist.add(cb_node->activeRenderPass->renderPass);
650 skip |= LogError(objlist, vuid.max_multiview_instance_index,
651 "%s: multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
652 "and firstInstance: %" PRIu32 ".",
653 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass).c_str(),
654 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
655 }
656 return skip;
657}
658
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700659bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500660 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600661 bool skip = false;
662 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
663 skip |=
664 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()", VK_QUEUE_GRAPHICS_BIT);
665 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700666}
667
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700668bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500669 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600670 bool skip = false;
671 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
672 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
673 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500674 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700675 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
676 unsigned int index_size = 0;
677 const auto &index_buffer_binding = cb_state->index_buffer_binding;
678 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
679 index_size = 2;
680 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
681 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600682 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
683 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700684 }
685 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
686 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700687 skip |=
locke-lunarg1ae57d62020-11-18 10:49:19 -0700688 LogError(index_buffer_binding.buffer_state->buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700689 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
690 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
691 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
692 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700693 }
694 }
695 return skip;
696}
697
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700698bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
699 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700700 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700701 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600702 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700703 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700704 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600705 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
706 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700707 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
708 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), drawCount, offset,
709 buffer_state);
710 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndirectCommand)) > buffer_state->createInfo.size) {
711 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00487",
712 "CmdDrawIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndirectCommand)) (%u) is not less than "
713 "or equal to the size of buffer (%u).",
714 (offset + sizeof(VkDrawIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600715 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700716 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
717 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
718 return skip;
719}
720
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700721bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700722 uint32_t drawCount, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700723 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
724 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600725 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700726 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700727 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600728 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
729 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
730 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
Tony-LunarGc0c3df52020-11-20 13:47:10 -0700731 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), drawCount,
732 offset, buffer_state);
733 } else if ((drawCount == 1) && (offset + sizeof(VkDrawIndexedIndirectCommand)) > buffer_state->createInfo.size) {
734 skip |= LogError(
735 commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00539",
736 "CmdDrawIndexedIndirect: drawCount equals 1 and (offset + sizeof(VkDrawIndexedIndirectCommand)) (%u) is not less than "
737 "or equal to the size of buffer (%u).",
738 (offset + sizeof(VkDrawIndexedIndirectCommand)), buffer_state->createInfo.size);
Lockee68ac652019-05-06 10:17:33 -0600739 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700740 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
741 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
742 // 'buffer'.
743 return skip;
744}
745
Jeff Bolz5c801d12019-10-09 10:38:45 -0500746bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600747 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600748 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700749 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600750 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700751}
752
locke-lunarg25b6c352020-08-06 17:44:18 -0600753bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
754 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
755 uint32_t groupCountZ) const {
756 bool skip = false;
757 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
758 VK_QUEUE_COMPUTE_BIT);
759 return skip;
760}
761
762bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
763 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
764 uint32_t groupCountZ) const {
765 bool skip = false;
766 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
767 VK_QUEUE_COMPUTE_BIT);
768 return skip;
769}
770
Jeff Bolz5c801d12019-10-09 10:38:45 -0500771bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700772 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700773 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700774 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700775 return skip;
776}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700777bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
778 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700779 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700780 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700781 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600782 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700783 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
784 "call this command.",
785 apiName);
786 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700787 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
788 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600789 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600790 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700791 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
792 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700793 }
794
Tony-LunarG83544c72020-01-17 12:30:19 -0700795 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700796 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600797 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700798 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700799 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700800 skip |=
801 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
802 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700803 return skip;
804}
805
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700806bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
807 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
808 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700809 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700810 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700811}
812
813bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
814 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
815 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700816 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700817 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700818}
819
820bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
821 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700822 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700823 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700824 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600825 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700826 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
827 "call this command.",
828 apiName);
829 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700830 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
831 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600832 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600833 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800834 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700835 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700836 }
837
sfricke-samsungf692b972020-05-02 08:00:45 -0700838 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
839 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600840 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700841 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700842 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700843 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700844 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800845 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700846 return skip;
847}
848
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700849bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
850 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
851 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700852 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
853 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700854}
855
856bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
857 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
858 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700859 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
860 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700861}
862
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600863bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
864 uint32_t firstInstance, VkBuffer counterBuffer,
865 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
866 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700867 bool skip = false;
Tony-LunarG2c94ba82020-11-05 14:21:40 -0700868 if (!enabled_features.transform_feedback_features.transformFeedback) {
869 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02287",
870 "%s: transformFeedback feature is not enabled.", "vkCmdDrawIndirectByteCountEXT()");
871 }
872 if (device_extensions.vk_ext_transform_feedback && !phys_dev_ext_props.transform_feedback_props.transformFeedbackDraw) {
873 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectByteCountEXT-transformFeedback-02288",
874 "%s: VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw is not supported",
875 "vkCmdDrawIndirectByteCountEXT()");
876 }
locke-lunarg3fa463a2020-10-23 16:39:04 -0600877 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
878 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700879 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
880 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
881 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
882 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600883}
884
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500885bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
886 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
887 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
888 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
889 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
890 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
891 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700892 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
893 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700894 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
895 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
896 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
897 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
898 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
899 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
900 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
901 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
902 }
903 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
904 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
905 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
906 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
907 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
908 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
909 }
910 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
911 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
912 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
913 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100914 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700915 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
916 }
917 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
918 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
919 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
920 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100921 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700922 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
923 }
sourav parmarcd5fb182020-07-17 12:58:44 -0700924
sourav parmar30e19392020-12-02 16:57:21 -0800925 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
926 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
927 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
928 skip |= LogError(device, "VUID-vkCmdTraceRaysNV-None-02700",
929 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
sourav parmarcd5fb182020-07-17 12:58:44 -0700930 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500931 return skip;
932}
933
Jason Macnak67407e72019-07-11 11:05:09 -0700934void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
935 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
936 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
937 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
938 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
939 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
940 uint32_t width, uint32_t height, uint32_t depth) {
941 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600942 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -0700943 cb_state->hasTraceRaysCmd = true;
944}
945
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500946bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -0700947 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
948 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
949 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
950 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500951 uint32_t height, uint32_t depth) const {
952 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
953 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
sourav parmarcd5fb182020-07-17 12:58:44 -0700954 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -0700955 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
956 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -0700957 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
958 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-None-02700",
959 "vkCmdTraceRaysKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
960 } else { // bound to valid RT pipeline
961 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
962 if (!pHitShaderBindingTable->deviceAddress) {
963 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03697",
964 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
965 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
966 "deviceAddress member of pHitShaderBindingTable must not be zero.");
967 }
968 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
969 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03514",
970 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
971 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
972 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
973 "execute an intersection shader must not be set to zero.");
974 }
975 }
976 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
977 if (!pHitShaderBindingTable->deviceAddress) {
978 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03696",
979 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
980 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
981 "deviceAddress member of pHitShaderBindingTable must not be zero.");
982 }
983 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
984 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03513",
985 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
986 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
987 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
988 "execute a closest hit shader must not be set to zero.");
989 }
990 }
991 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
992 if (!pHitShaderBindingTable->deviceAddress) {
993 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03695",
994 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with flags "
995 "that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, the "
996 "deviceAddress member of pHitShaderBindingTable must not be zero.");
997 }
998 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
999 skip |= LogError(device, "VUID-vkCmdTraceRaysKHR-flags-03512",
1000 "vkCmdTraceRaysKHR: If the currently bound ray tracing pipeline was created with "
1001 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1002 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1003 "execute an any hit shader must not be set to zero.");
1004 }
1005 }
1006 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001007 return skip;
1008}
1009
1010void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001011 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1012 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1013 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1014 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001015 uint32_t height, uint32_t depth) {
1016 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001017 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001018 cb_state->hasTraceRaysCmd = true;
1019}
1020
1021bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001022 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1023 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1024 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1025 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
1026 VkDeviceAddress indirectDeviceAddress) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001027 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001028 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sourav parmarcd5fb182020-07-17 12:58:44 -07001029 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Shannon McPherson9caca052020-11-25 11:34:38 -07001030 const auto lv_bind_point = ConvertToLvlBindPoint(VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
1031 const PIPELINE_STATE *pipeline_state = cb_state->lastBound[lv_bind_point].pipeline_state;
sourav parmarcd5fb182020-07-17 12:58:44 -07001032 if (!pipeline_state || (pipeline_state && !pipeline_state->pipeline)) {
1033 skip |=
1034 LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
1035 "vkCmdTraceRaysIndirectKHR: A valid pipeline must be bound to the pipeline bind point used by this command.");
1036 } else { // valid bind point
1037 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR) {
1038 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1039 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03697",
1040 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1041 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, the "
1042 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1043 }
1044 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1045 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03514",
1046 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1047 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR, "
1048 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1049 "execute an intersection shader must not be set to zero.");
1050 }
1051 }
1052 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR) {
1053 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1054 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03696",
1055 "vkCmdTraceRaysIndirectKHR:If the currently bound ray tracing pipeline was created with "
1056 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1057 "the deviceAddress member of pHitShaderBindingTable must not be zero.");
1058 }
1059 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1060 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03513",
1061 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1062 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR, "
1063 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1064 "execute a closest hit shader must not be set to zero.");
1065 }
1066 }
1067 if (pipeline_state->raytracingPipelineCI.flags & VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR) {
1068 if (!pHitShaderBindingTable || pHitShaderBindingTable->deviceAddress == 0) {
1069 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03695",
1070 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1071 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, the "
1072 "deviceAddress member of pHitShaderBindingTable must not be zero.");
1073 }
1074 if (!pHitShaderBindingTable || pHitShaderBindingTable->size == 0 || pHitShaderBindingTable->stride == 0) {
1075 skip |= LogError(device, "VUID-vkCmdTraceRaysIndirectKHR-flags-03512",
1076 "vkCmdTraceRaysIndirectKHR: If the currently bound ray tracing pipeline was created with "
1077 "flags that included VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR, "
1078 "entries in pHitShaderBindingTable accessed as a result of this command in order to "
1079 "execute an any hit shader must not be set to zero.");
1080 }
1081 }
1082 }
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001083 return skip;
1084}
1085
1086void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
sourav parmarcd5fb182020-07-17 12:58:44 -07001087 const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable,
1088 const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable,
1089 const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable,
1090 const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable,
Shannon McPherson54e1f892020-11-27 11:04:19 -07001091 VkDeviceAddress indirectDeviceAddress) {
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001092 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001093 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
1094 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001095 cb_state->hasTraceRaysCmd = true;
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001096}
1097
Jeff Bolz5c801d12019-10-09 10:38:45 -05001098bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -07001099 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
1100 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001101 return skip;
1102}
1103
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001104bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001105 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001106 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001107 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001108 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001109 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001110 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001111 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1112 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1113 drawCount, offset, buffer_state);
1114 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001115 return skip;
1116}
1117
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001118bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1119 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001120 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001121 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001122 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001123 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1124 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001125 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001126 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001127 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001128 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001129 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1130 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001131 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1132 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1133 if (maxDrawCount > 1) {
1134 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1135 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1136 maxDrawCount, offset, buffer_state);
1137 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001138 return skip;
1139}