blob: 9c34c294fb884363e53041d7bae415c20d93d1de [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.
Jasper St. Pierre512613a2019-04-08 16:25:23 -07005 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 * Author: Cody Northrop <cnorthrop@google.com>
19 * Author: Michael Lentine <mlentine@google.com>
20 * Author: Tobin Ehlis <tobine@google.com>
21 * Author: Chia-I Wu <olv@google.com>
22 * Author: Chris Forbes <chrisf@ijw.co.nz>
23 * Author: Mark Lobodzinski <mark@lunarg.com>
24 * Author: Ian Elliott <ianelliott@google.com>
25 * Author: Dave Houlton <daveh@lunarg.com>
26 * Author: Dustin Graves <dustin@lunarg.com>
27 * Author: Jeremy Hayes <jeremy@lunarg.com>
28 * Author: Jon Ashburn <jon@lunarg.com>
29 * Author: Karl Schultz <karl@lunarg.com>
30 * Author: Mark Young <marky@lunarg.com>
31 * Author: Mike Schuchardt <mikes@lunarg.com>
32 * Author: Mike Weiblen <mikew@lunarg.com>
33 * Author: Tony Barbour <tony@LunarG.com>
34 * Author: John Zulauf <jzulauf@lunarg.com>
35 * Author: Shannon McPherson <shannon@lunarg.com>
Jeremy Kniagere6827432020-04-01 09:05:56 -060036 * Author: Jeremy Kniager <jeremyk@lunarg.com>
Jasper St. Pierre512613a2019-04-08 16:25:23 -070037 */
38
Jasper St. Pierre512613a2019-04-08 16:25:23 -070039#include "chassis.h"
40#include "core_validation.h"
41
Spencer Fricke507600b2020-03-22 13:23:06 -070042// This LUT is created to allow a static listing of each VUID that is covered by drawdispatch commands
43// clang-format off
44static const std::map<CMD_TYPE, DrawDispatchVuid> drawdispatch_vuid = {
45 {CMD_DRAW, {
46 "VUID-vkCmdDraw-commandBuffer-cmdpool",
47 "VUID-vkCmdDraw-renderpass",
48 "VUID-vkCmdDraw-None-02700",
49 "VUID-vkCmdDraw-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -050050 "VUID-vkCmdDraw-None-04007",
51 "VUID-vkCmdDraw-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -070052 "VUID-vkCmdDraw-None-02697",
53 "VUID-vkCmdDraw-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -070054 "VUID-vkCmdDraw-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -060055 "VUID-vkCmdDraw-sampleLocationsEnable-02689",
Shannon McPhersonf673b4e2020-10-28 18:26:47 -060056 "VUID-vkCmdDraw-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -070057 "VUID-vkCmdDraw-None-02692",
58 kVUIDUndefined, // indirect_protected_cb
59 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -060060 kVUIDUndefined, // indirect_buffer_bit
61 "VUID-vkCmdDraw-viewportCount-03417",
62 "VUID-vkCmdDraw-scissorCount-03418",
63 "VUID-vkCmdDraw-viewportCount-03419",
64 "VUID-vkCmdDraw-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -060065 "VUID-vkCmdDraw-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -060066 "VUID-vkCmdDraw-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -060067 "VUID-vkCmdDraw-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -060068 "VUID-vkCmdDraw-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -070069 "VUID-vkCmdDraw-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -060070 "VUID-vkCmdDraw-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -060071 "VUID-vkCmdDraw-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -060072 "VUID-vkCmdDraw-None-02703",
73 "VUID-vkCmdDraw-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -060074 "VUID-vkCmdDraw-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -060075 "VUID-vkCmdDraw-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -060076 "VUID-vkCmdDraw-commandBuffer-02707",
77 "VUID-vkCmdDraw-commandBuffer-02712",
78 "VUID-vkCmdDraw-maxMultiviewInstanceIndex-02688",
79 "VUID-vkCmdDraw-filterCubic-02694",
80 "VUID-vkCmdDraw-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -070081 }},
82 {CMD_DRAWINDEXED, {
83 "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool",
84 "VUID-vkCmdDrawIndexed-renderpass",
85 "VUID-vkCmdDrawIndexed-None-02700",
86 "VUID-vkCmdDrawIndexed-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -050087 "VUID-vkCmdDrawIndexed-None-04007",
88 "VUID-vkCmdDrawIndexed-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -070089 "VUID-vkCmdDrawIndexed-None-02697",
90 "VUID-vkCmdDrawIndexed-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -070091 "VUID-vkCmdDrawIndexed-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -060092 "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -060093 "VUID-vkCmdDrawIndexed-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -070094 "VUID-vkCmdDrawIndexed-None-02692",
95 kVUIDUndefined, // indirect_protected_cb
96 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -060097 kVUIDUndefined, // indirect_buffer_bit
98 "VUID-vkCmdDrawIndexed-viewportCount-03417",
99 "VUID-vkCmdDrawIndexed-scissorCount-03418",
100 "VUID-vkCmdDrawIndexed-viewportCount-03419",
101 "VUID-vkCmdDrawIndexed-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600102 "VUID-vkCmdDrawIndexed-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600103 "VUID-vkCmdDrawIndexed-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600104 "VUID-vkCmdDrawIndexed-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600105 "VUID-vkCmdDrawIndexed-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -0700106 "VUID-vkCmdDrawIndexed-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600107 "VUID-vkCmdDrawIndexed-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600108 "VUID-vkCmdDrawIndexed-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600109 "VUID-vkCmdDrawIndexed-None-02703",
110 "VUID-vkCmdDrawIndexed-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600111 "VUID-vkCmdDrawIndexed-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600112 "VUID-vkCmdDrawIndexed-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600113 "VUID-vkCmdDrawIndexed-commandBuffer-02707",
114 "VUID-vkCmdDrawIndexed-commandBuffer-02712",
115 "VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-02688",
116 "VUID-vkCmdDrawIndexed-filterCubic-02694",
117 "VUID-vkCmdDrawIndexed-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700118 }},
119 {CMD_DRAWINDIRECT, {
120 "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool",
121 "VUID-vkCmdDrawIndirect-renderpass",
122 "VUID-vkCmdDrawIndirect-None-02700",
123 "VUID-vkCmdDrawIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500124 "VUID-vkCmdDrawIndirect-None-04007",
125 "VUID-vkCmdDrawIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700126 "VUID-vkCmdDrawIndirect-None-02697",
127 "VUID-vkCmdDrawIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700128 "VUID-vkCmdDrawIndirect-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600129 "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600130 "VUID-vkCmdDrawIndirect-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700131 "VUID-vkCmdDrawIndirect-None-02692",
132 "VUID-vkCmdDrawIndirect-commandBuffer-02711",
133 "VUID-vkCmdDrawIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600134 "VUID-vkCmdDrawIndirect-buffer-02709",
135 "VUID-vkCmdDrawIndirect-viewportCount-03417",
136 "VUID-vkCmdDrawIndirect-scissorCount-03418",
137 "VUID-vkCmdDrawIndirect-viewportCount-03419",
138 "VUID-vkCmdDrawIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600139 "VUID-vkCmdDrawIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600140 "VUID-vkCmdDrawIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600141 "VUID-vkCmdDrawIndirect-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600142 "VUID-vkCmdDrawIndirect-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -0700143 "VUID-vkCmdDrawIndirect-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600144 "VUID-vkCmdDrawIndirect-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600145 "VUID-vkCmdDrawIndirect-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600146 "VUID-vkCmdDrawIndirect-None-02703",
147 "VUID-vkCmdDrawIndirect-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600148 "VUID-vkCmdDrawIndirect-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600149 "VUID-vkCmdDrawIndirect-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600150 "VUID-vkCmdDrawIndirect-commandBuffer-02707",
151 kVUIDUndefined, // protected_command_buffer
152 "VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-02688",
153 "VUID-vkCmdDrawIndirect-filterCubic-02694",
154 "VUID-vkCmdDrawIndirect-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700155 }},
156 {CMD_DRAWINDEXEDINDIRECT, {
157 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool",
158 "VUID-vkCmdDrawIndexedIndirect-renderpass",
159 "VUID-vkCmdDrawIndexedIndirect-None-02700",
160 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500161 "VUID-vkCmdDrawIndexedIndirect-None-04007",
162 "VUID-vkCmdDrawIndexedIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700163 "VUID-vkCmdDrawIndexedIndirect-None-02697",
164 "VUID-vkCmdDrawIndexedIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700165 "VUID-vkCmdDrawIndexedIndirect-subpass-02685",
Mark Lobodzinski2f084472020-06-18 16:33:57 -0600166 "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600167 "VUID-vkCmdDrawIndexedIndirect-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700168 "VUID-vkCmdDrawIndexedIndirect-None-02692",
169 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711",
170 "VUID-vkCmdDrawIndexedIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600171 "VUID-vkCmdDrawIndexedIndirect-buffer-02709",
172 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417",
173 "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418",
174 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419",
175 "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600176 "VUID-vkCmdDrawIndexedIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600177 "VUID-vkCmdDrawIndexedIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600178 "VUID-vkCmdDrawIndexedIndirect-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600179 "VUID-vkCmdDrawIndexedIndirect-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -0700180 "VUID-vkCmdDrawIndexedIndirect-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600181 "VUID-vkCmdDrawIndexedIndirect-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600182 "VUID-vkCmdDrawIndexedIndirect-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600183 "VUID-vkCmdDrawIndexedIndirect-None-02703",
184 "VUID-vkCmdDrawIndexedIndirect-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600185 "VUID-vkCmdDrawIndexedIndirect-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600186 "VUID-vkCmdDrawIndexedIndirect-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600187 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02707",
188 kVUIDUndefined, // protected_command_buffer
189 "VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-02688",
190 "VUID-vkCmdDrawIndexedIndirect-filterCubic-02694",
191 "VUID-vkCmdDrawIndexedIndirect-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700192 }},
193 {CMD_DISPATCH, {
194 "VUID-vkCmdDispatch-commandBuffer-cmdpool",
195 "VUID-vkCmdDispatch-renderpass",
196 "VUID-vkCmdDispatch-None-02700",
197 kVUIDUndefined, // dynamic_state
198 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500199 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700200 "VUID-vkCmdDispatch-None-02697",
201 kVUIDUndefined, // render_pass_compatible
202 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700203 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600204 "VUID-vkCmdDispatch-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700205 "VUID-vkCmdDispatch-None-02692",
206 kVUIDUndefined, // indirect_protected_cb
207 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600208 kVUIDUndefined, // indirect_buffer_bit
209 kVUIDUndefined, // viewport_count
210 kVUIDUndefined, // scissor_count
211 kVUIDUndefined, // viewport_scissor_count
212 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600213 "VUID-vkCmdDispatch-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600214 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600215 "VUID-vkCmdDispatch-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600216 "VUID-vkCmdDispatch-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600217 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600218 "VUID-vkCmdDispatch-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600219 "VUID-vkCmdDispatch-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600220 "VUID-vkCmdDispatch-None-02703",
221 "VUID-vkCmdDispatch-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600222 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600223 "VUID-vkCmdDispatch-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600224 "VUID-vkCmdDispatch-commandBuffer-02707",
225 "VUID-vkCmdDispatch-commandBuffer-02712",
226 kVUIDUndefined, // maxMultiviewInstanceIndex
227 "VUID-vkCmdDispatch-filterCubic-02694",
228 "VUID-vkCmdDispatch-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700229 }},
230 {CMD_DISPATCHINDIRECT, {
231 "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool",
232 "VUID-vkCmdDispatchIndirect-renderpass",
233 "VUID-vkCmdDispatchIndirect-None-02700",
234 kVUIDUndefined, // dynamic_state
235 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500236 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700237 "VUID-vkCmdDispatchIndirect-None-02697",
238 kVUIDUndefined, // render_pass_compatible
239 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700240 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600241 "VUID-vkCmdDispatchIndirect-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700242 "VUID-vkCmdDispatchIndirect-None-02692",
243 "VUID-vkCmdDispatchIndirect-commandBuffer-02711",
244 "VUID-vkCmdDispatchIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600245 "VUID-vkCmdDispatchIndirect-buffer-02709",
246 kVUIDUndefined, // viewport_count
247 kVUIDUndefined, // scissor_count
248 kVUIDUndefined, // viewport_scissor_count
249 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600250 "VUID-vkCmdDispatchIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600251 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600252 "VUID-vkCmdDispatchIndirect-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600253 "VUID-vkCmdDispatchIndirect-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600254 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600255 "VUID-vkCmdDispatchIndirect-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600256 "VUID-vkCmdDispatchIndirect-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600257 "VUID-vkCmdDispatchIndirect-None-02703",
258 "VUID-vkCmdDispatchIndirect-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600259 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600260 "VUID-vkCmdDispatchIndirect-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600261 "VUID-vkCmdDispatchIndirect-commandBuffer-02707",
262 kVUIDUndefined, // protected_command_buffer
263 kVUIDUndefined, // maxMultiviewInstanceIndex
264 "VUID-vkCmdDispatchIndirect-filterCubic-02694",
265 "VUID-vkCmdDispatchIndirect-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700266 }},
267 {CMD_DRAWINDIRECTCOUNT, {
268 "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool",
269 "VUID-vkCmdDrawIndirectCount-renderpass",
270 "VUID-vkCmdDrawIndirectCount-None-02700",
271 "VUID-vkCmdDrawIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500272 "VUID-vkCmdDrawIndirectCount-None-04007",
273 "VUID-vkCmdDrawIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700274 "VUID-vkCmdDrawIndirectCount-None-02697",
275 "VUID-vkCmdDrawIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700276 "VUID-vkCmdDrawIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600277 "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600278 "VUID-vkCmdDrawIndirectCount-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700279 "VUID-vkCmdDrawIndirectCount-None-02692",
280 "VUID-vkCmdDrawIndirectCount-commandBuffer-02711",
281 "VUID-vkCmdDrawIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600282 "VUID-vkCmdDrawIndirectCount-buffer-02709",
283 "VUID-vkCmdDrawIndirectCount-viewportCount-03417",
284 "VUID-vkCmdDrawIndirectCount-scissorCount-03418",
285 "VUID-vkCmdDrawIndirectCount-viewportCount-03419",
286 "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600287 "VUID-vkCmdDrawIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600288 "VUID-vkCmdDrawIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600289 "VUID-vkCmdDrawIndirectCount-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600290 "VUID-vkCmdDrawIndirectCount-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -0700291 "VUID-vkCmdDrawIndirectCount-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600292 "VUID-vkCmdDrawIndirectCount-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600293 "VUID-vkCmdDrawIndirectCount-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600294 "VUID-vkCmdDrawIndirectCount-None-02703",
295 "VUID-vkCmdDrawIndirectCount-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600296 "VUID-vkCmdDrawIndirectCount-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600297 "VUID-vkCmdDrawIndirectCount-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600298 "VUID-vkCmdDrawIndirectCount-commandBuffer-02707",
299 kVUIDUndefined, // protected_command_buffer
300 "VUID-vkCmdDrawIndirectCount-maxMultiviewInstanceIndex-02688",
301 "VUID-vkCmdDrawIndirectCount-filterCubic-02694",
302 "VUID-vkCmdDrawIndirectCount-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700303 }},
304 {CMD_DRAWINDEXEDINDIRECTCOUNT,{
305 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool",
306 "VUID-vkCmdDrawIndexedIndirectCount-renderpass",
307 "VUID-vkCmdDrawIndexedIndirectCount-None-02700",
308 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500309 "VUID-vkCmdDrawIndexedIndirectCount-None-04007",
310 "VUID-vkCmdDrawIndexedIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700311 "VUID-vkCmdDrawIndexedIndirectCount-None-02697",
312 "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700313 "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600314 "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600315 "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700316 "VUID-vkCmdDrawIndexedIndirectCount-None-02692",
317 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711",
318 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600319 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709",
320 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417",
321 "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418",
322 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419",
323 "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600324 "VUID-vkCmdDrawIndexedIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600325 "VUID-vkCmdDrawIndexedIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600326 "VUID-vkCmdDrawIndexedIndirectCount-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600327 "VUID-vkCmdDrawIndexedIndirectCount-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -0700328 "VUID-vkCmdDrawIndexedIndirectCount-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600329 "VUID-vkCmdDrawIndexedIndirectCount-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600330 "VUID-vkCmdDrawIndexedIndirectCount-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600331 "VUID-vkCmdDrawIndexedIndirectCount-None-02703",
332 "VUID-vkCmdDrawIndexedIndirectCount-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600333 "VUID-vkCmdDrawIndexedIndirectCount-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600334 "VUID-vkCmdDrawIndexedIndirectCount-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600335 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02707",
336 kVUIDUndefined, // protected_command_buffer
337 "VUID-vkCmdDrawIndexedIndirectCount-maxMultiviewInstanceIndex-02688",
338 "VUID-vkCmdDrawIndexedIndirectCount-filterCubic-02694",
339 "VUID-vkCmdDrawIndexedIndirectCount-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700340 }},
341 {CMD_TRACERAYSNV, {
342 "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool",
343 "VUID-vkCmdTraceRaysNV-renderpass",
344 "VUID-vkCmdTraceRaysNV-None-02700",
345 "VUID-vkCmdTraceRaysNV-commandBuffer-02701",
346 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500347 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700348 "VUID-vkCmdTraceRaysNV-None-02697",
349 kVUIDUndefined, // render_pass_compatible
350 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700351 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600352 "VUID-vkCmdTraceRaysNV-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700353 "VUID-vkCmdTraceRaysNV-None-02692",
354 kVUIDUndefined, // indirect_protected_cb
355 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600356 kVUIDUndefined, // indirect_buffer_bit
357 kVUIDUndefined, // viewport_count
358 kVUIDUndefined, // scissor_count
359 kVUIDUndefined, // viewport_scissor_count
360 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600361 "VUID-vkCmdTraceRaysNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600362 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600363 "VUID-vkCmdTraceRaysNV-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600364 "VUID-vkCmdTraceRaysNV-None-02698",
locke-lunarg351c9d82020-10-23 14:43:21 -0600365 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600366 "VUID-vkCmdTraceRaysNV-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600367 "VUID-vkCmdTraceRaysNV-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600368 "VUID-vkCmdTraceRaysNV-None-02703",
369 "VUID-vkCmdTraceRaysNV-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600370 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600371 "VUID-vkCmdTraceRaysNV-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600372 "VUID-vkCmdTraceRaysNV-commandBuffer-02707",
373 "VUID-vkCmdTraceRaysNV-commandBuffer-02712",
374 kVUIDUndefined, // maxMultiviewInstanceIndex
375 "VUID-vkCmdTraceRaysNV-filterCubic-02694",
376 "VUID-vkCmdTraceRaysNV-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700377 }},
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500378 {CMD_TRACERAYSKHR, {
379 "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool",
380 "VUID-vkCmdTraceRaysKHR-renderpass",
381 "VUID-vkCmdTraceRaysKHR-None-02700",
382 "VUID-vkCmdTraceRaysKHR-commandBuffer-02701",
383 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500384 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500385 "VUID-vkCmdTraceRaysKHR-None-02697",
386 kVUIDUndefined, // render_pass_compatible
387 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700388 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600389 "VUID-vkCmdTraceRaysKHR-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700390 "VUID-vkCmdTraceRaysKHR-None-02692",
391 kVUIDUndefined, // indirect_protected_cb
392 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600393 kVUIDUndefined, // indirect_buffer_bit
394 kVUIDUndefined, // viewport_count
395 kVUIDUndefined, // scissor_count
396 kVUIDUndefined, // viewport_scissor_count
397 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600398 "VUID-vkCmdTraceRaysKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600399 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600400 "VUID-vkCmdTraceRaysKHR-None-02691",
locke-lunarg351c9d82020-10-23 14:43:21 -0600401 "VUID-vkCmdTraceRaysKHR-None-02698",
locke-lunarg78486832020-09-09 19:39:42 -0600402 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600403 "VUID-vkCmdTraceRaysKHR-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600404 "VUID-vkCmdTraceRaysKHR-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600405 "VUID-vkCmdTraceRaysKHR-None-02703",
406 "VUID-vkCmdTraceRaysKHR-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600407 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600408 "VUID-vkCmdTraceRaysKHR-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600409 "VUID-vkCmdTraceRaysKHR-commandBuffer-02707",
410 "VUID-vkCmdTraceRaysKHR-commandBuffer-02712",
411 kVUIDUndefined, // maxMultiviewInstanceIndex
412 "VUID-vkCmdTraceRaysKHR-filterCubic-02694",
413 "VUID-vkCmdTraceRaysKHR-filterCubicMinmax-02695",
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500414 }},
415 {CMD_TRACERAYSINDIRECTKHR, {
416 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool",
417 "VUID-vkCmdTraceRaysIndirectKHR-renderpass",
418 "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
419 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701",
420 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500421 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500422 "VUID-vkCmdTraceRaysIndirectKHR-None-02697",
423 kVUIDUndefined, // render_pass_compatible
424 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700425 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600426 "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700427 "VUID-vkCmdTraceRaysIndirectKHR-None-02692",
428 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711",
429 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600430 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02709",
431 kVUIDUndefined, // viewport_count
432 kVUIDUndefined, // scissor_count
433 kVUIDUndefined, // viewport_scissor_count
434 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600435 "VUID-vkCmdTraceRaysIndirectKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600436 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600437 "VUID-vkCmdTraceRaysIndirectKHR-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600438 "VUID-vkCmdTraceRaysIndirectKHR-None-02698",
locke-lunarg78486832020-09-09 19:39:42 -0600439 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600440 "VUID-vkCmdTraceRaysIndirectKHR-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600441 "VUID-vkCmdTraceRaysIndirectKHR-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600442 "VUID-vkCmdTraceRaysIndirectKHR-None-02703",
443 "VUID-vkCmdTraceRaysIndirectKHR-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600444 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600445 "VUID-vkCmdTraceRaysIndirectKHR-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600446 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02707",
447 kVUIDUndefined, // protected_command_buffer
448 kVUIDUndefined, // maxMultiviewInstanceIndex
449 "VUID-vkCmdTraceRaysIndirectKHR-filterCubic-02694",
450 "VUID-vkCmdTraceRaysIndirectKHR-filterCubicMinmax-02695",
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500451 }},
Spencer Fricke507600b2020-03-22 13:23:06 -0700452 {CMD_DRAWMESHTASKSNV, {
453 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool",
454 "VUID-vkCmdDrawMeshTasksNV-renderpass",
455 "VUID-vkCmdDrawMeshTasksNV-None-02700",
456 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701",
457 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500458 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700459 "VUID-vkCmdDrawMeshTasksNV-None-02697",
460 "VUID-vkCmdDrawMeshTasksNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700461 "VUID-vkCmdDrawMeshTasksNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600462 "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600463 "VUID-vkCmdDrawMeshTasksNV-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700464 "VUID-vkCmdDrawMeshTasksNV-None-02692",
465 kVUIDUndefined, // indirect_protected_cb
466 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600467 kVUIDUndefined, // indirect_buffer_bit
468 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417",
469 "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418",
470 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419",
471 "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600472 "VUID-vkCmdDrawMeshTasksNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600473 "VUID-vkCmdDrawMeshTasksNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600474 "VUID-vkCmdDrawMeshTasksNV-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600475 "VUID-vkCmdDrawMeshTasksNV-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -0700476 "VUID-vkCmdDrawMeshTasksNV-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600477 "VUID-vkCmdDrawMeshTasksNV-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600478 "VUID-vkCmdDrawMeshTasksNV-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600479 "VUID-vkCmdDrawMeshTasksNV-None-02703",
480 "VUID-vkCmdDrawMeshTasksNV-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600481 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600482 "VUID-vkCmdDrawMeshTasksNV-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600483 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02707",
484 kVUIDUndefined, // protected_command_buffer
485 "VUID-vkCmdDrawMeshTasksNV-maxMultiviewInstanceIndex-02688",
486 "VUID-vkCmdDrawMeshTasksNV-filterCubic-02694",
487 "VUID-vkCmdDrawMeshTasksNV-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700488 }},
489 {CMD_DRAWMESHTASKSINDIRECTNV, {
490 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool",
491 "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass",
492 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700",
493 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701",
494 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500495 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700496 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697",
497 "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700498 "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600499 "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600500 "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700501 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692",
502 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711",
503 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600504 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709",
505 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417",
506 "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418",
507 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419",
508 "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600509 "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600510 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600511 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600512 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -0700513 "VUID-vkCmdDrawMeshTasksIndirectNV-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600514 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600515 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600516 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703",
517 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600518 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600519 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600520 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02707",
521 kVUIDUndefined, // protected_command_buffer
522 "VUID-vkCmdDrawMeshTasksIndirectNV-maxMultiviewInstanceIndex-02688",
523 "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubic-02694",
524 "VUID-vkCmdDrawMeshTasksIndirectNV-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700525 }},
526 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, {
527 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool",
528 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass",
529 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700",
530 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701",
531 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500532 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700533 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697",
534 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700535 "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600536 "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600537 "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700538 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692",
539 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711",
540 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600541 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709",
542 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417",
543 "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418",
544 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419",
545 "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600546 "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600547 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600548 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600549 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -0700550 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600551 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600552 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600553 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703",
554 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600555 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600556 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600557 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02707",
558 kVUIDUndefined, // protected_command_buffer
559 "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxMultiviewInstanceIndex-02688",
560 "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubic-02694",
561 "VUID-vkCmdDrawMeshTasksIndirectCountNV-filterCubicMinmax-02695",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600562 }},
563 {CMD_DRAWINDIRECTBYTECOUNTEXT, {
564 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool",
565 "VUID-vkCmdDrawIndirectByteCountEXT-renderpass",
566 "VUID-vkCmdDrawIndirectByteCountEXT-None-02700",
567 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701",
568 "VUID-vkCmdDrawIndirectByteCountEXT-None-04007",
569 "VUID-vkCmdDrawIndirectByteCountEXT-None-04008",
570 "VUID-vkCmdDrawIndirectByteCountEXT-None-02697",
571 "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684",
572 "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685",
573 "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600574 "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600575 "VUID-vkCmdDrawIndirectByteCountEXT-None-02692",
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700576 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646",
577 "UNASSIGNED-vkCmdDrawIndirectByteCountEXT-buffer", // TODO - Update when header are updated
Shannon McPherson169d0c72020-11-13 18:48:19 -0700578 "VUID-vkCmdDrawIndirectByteCountEXT-counterBuffer-02290",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600579 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417",
580 "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418",
581 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419",
582 "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420",
583 "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696",
584 "VUID-vkCmdDrawIndirectByteCountEXT-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600585 "VUID-vkCmdDrawIndirectByteCountEXT-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600586 "VUID-vkCmdDrawIndirectByteCountEXT-None-02698",
locke-lunarg5e1bdde2020-11-16 17:08:44 -0700587 "VUID-vkCmdDrawIndirectByteCountEXT-None-04584",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600588 "VUID-vkCmdDrawIndirectByteCountEXT-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600589 "VUID-vkCmdDrawIndirectByteCountEXT-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600590 "VUID-vkCmdDrawIndirectByteCountEXT-None-02703",
591 "VUID-vkCmdDrawIndirectByteCountEXT-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600592 "VUID-vkCmdDrawIndirectByteCountEXT-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600593 "VUID-vkCmdDrawIndirectByteCountEXT-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600594 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02707",
595 kVUIDUndefined, // protected_command_buffer
596 "VUID-vkCmdDrawIndirectByteCountEXT-maxMultiviewInstanceIndex-02688",
597 "VUID-vkCmdDrawIndirectByteCountEXT-filterCubic-02694",
598 "VUID-vkCmdDrawIndirectByteCountEXT-filterCubicMinmax-02695",
locke-lunarg25b6c352020-08-06 17:44:18 -0600599 }},
600 {CMD_DISPATCHBASE, {
601 "VUID-vkCmdDispatchBase-commandBuffer-cmdpool",
602 "VUID-vkCmdDispatchBase-renderpass",
603 "VUID-vkCmdDispatchBase-None-02700",
604 kVUIDUndefined, // dynamic_state
605 kVUIDUndefined, // vertex_binding
606 kVUIDUndefined, // vertex_binding_null
607 "VUID-vkCmdDispatchBase-None-02697",
608 kVUIDUndefined, // render_pass_compatible
609 kVUIDUndefined, // subpass_index
610 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600611 "VUID-vkCmdDispatchBase-magFilter-04553",
locke-lunarg25b6c352020-08-06 17:44:18 -0600612 "VUID-vkCmdDispatchBase-None-02692",
613 kVUIDUndefined, // indirect_protected_cb
614 kVUIDUndefined, // indirect_contiguous_memory;
615 kVUIDUndefined, // indirect_buffer_bit
616 kVUIDUndefined, // viewport_count
617 kVUIDUndefined, // scissor_count
618 kVUIDUndefined, // viewport_scissor_count
619 kVUIDUndefined, // primitive_topology
620 "VUID-vkCmdDispatchBase-flags-02696",
621 kVUIDUndefined, // subpass_input
622 "VUID-vkCmdDispatchBase-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600623 "VUID-vkCmdDispatchBase-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600624 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600625 "VUID-vkCmdDispatchBase-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600626 "VUID-vkCmdDispatchBase-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600627 "VUID-vkCmdDispatchBase-None-02703",
628 "VUID-vkCmdDispatchBase-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600629 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600630 "VUID-vkCmdDispatchBase-None-02859",
locke-lunarg351c9d82020-10-23 14:43:21 -0600631 "VUID-vkCmdDispatchBase-commandBuffer-02707",
632 kVUIDUndefined, // protected_command_buffer
633 kVUIDUndefined, // maxMultiviewInstanceIndex
634 "VUID-vkCmdDispatchBase-filterCubic-02694",
635 "VUID-vkCmdDispatchBase-filterCubicMinmax-02695",
Spencer Fricke507600b2020-03-22 13:23:06 -0700636 }},
637 // Used if invalid cmd_type is used
Piers Daniell39842ee2020-07-10 16:42:33 -0600638 {CMD_NONE, {
639 kVUIDUndefined,
640 kVUIDUndefined,
641 kVUIDUndefined,
642 kVUIDUndefined,
643 kVUIDUndefined,
644 kVUIDUndefined,
645 kVUIDUndefined,
646 kVUIDUndefined,
647 kVUIDUndefined,
648 kVUIDUndefined,
649 kVUIDUndefined,
650 kVUIDUndefined,
651 kVUIDUndefined,
652 kVUIDUndefined,
653 kVUIDUndefined,
654 kVUIDUndefined,
655 kVUIDUndefined,
656 kVUIDUndefined,
657 kVUIDUndefined,
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600658 kVUIDUndefined,
locke-lunarg25b6c352020-08-06 17:44:18 -0600659 kVUIDUndefined,
660 kVUIDUndefined,
locke-lunargc4fe6b82020-08-08 00:19:51 -0600661 kVUIDUndefined,
locke-lunarg1328e8e2020-08-20 12:40:08 -0600662 kVUIDUndefined,
locke-lunarg36045992020-08-20 16:54:37 -0600663 kVUIDUndefined,
locke-lunarg12d20992020-09-21 12:46:49 -0600664 kVUIDUndefined,
665 kVUIDUndefined,
locke-lunargde3f0fa2020-09-10 11:55:31 -0600666 kVUIDUndefined,
locke-lunarg4189aa22020-10-21 00:23:48 -0600667 kVUIDUndefined,
locke-lunarg351c9d82020-10-23 14:43:21 -0600668 kVUIDUndefined,
669 kVUIDUndefined,
670 kVUIDUndefined,
671 kVUIDUndefined,
672 kVUIDUndefined,
Piers Daniell39842ee2020-07-10 16:42:33 -0600673 }}
Spencer Fricke507600b2020-03-22 13:23:06 -0700674};
675// clang-format on
676
677// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
678const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
679 if (drawdispatch_vuid.find(cmd_type) != drawdispatch_vuid.cend()) {
680 return drawdispatch_vuid.at(cmd_type);
681 } else {
682 return drawdispatch_vuid.at(CMD_NONE);
683 }
684}
685
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700686// Generic function to handle validation for all CmdDraw* type functions
687bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700688 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700689 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700690 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600691 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700692 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700693 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700694 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700695 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
696 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
697 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700698 }
699 return skip;
700}
701
locke-lunarg3fa463a2020-10-23 16:39:04 -0600702bool CoreChecks::ValidateCmdDrawInstance(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance,
703 CMD_TYPE cmd_type, const char *caller) const {
704 bool skip = false;
705 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
706 const auto *cb_node = Get<CMD_BUFFER_STATE>(commandBuffer);
707 if (!cb_node) return skip;
708
709 // Verify maxMultiviewInstanceIndex
710 if (cb_node->activeRenderPass && cb_node->activeRenderPass->renderPass && enabled_features.multiview_features.multiview &&
711 ((instanceCount + firstInstance) > phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex)) {
712 LogObjectList objlist(commandBuffer);
713 objlist.add(cb_node->activeRenderPass->renderPass);
714 skip |= LogError(objlist, vuid.max_multiview_instance_index,
715 "%s: multiview is enabled, and maxMultiviewInstanceIndex: %" PRIu32 ", but instanceCount: %" PRIu32
716 "and firstInstance: %" PRIu32 ".",
717 caller, report_data->FormatHandle(cb_node->activeRenderPass->renderPass).c_str(),
718 phys_dev_ext_props.multiview_props.maxMultiviewInstanceIndex, instanceCount, firstInstance);
719 }
720 return skip;
721}
722
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700723bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500724 uint32_t firstVertex, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600725 bool skip = false;
726 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAW, "vkCmdDraw()");
727 skip |=
728 ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()", VK_QUEUE_GRAPHICS_BIT);
729 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700730}
731
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700732bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500733 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
locke-lunarg3fa463a2020-10-23 16:39:04 -0600734 bool skip = false;
735 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDEXED, "vkCmdDrawIndexed()");
736 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
737 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500738 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700739 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
740 unsigned int index_size = 0;
741 const auto &index_buffer_binding = cb_state->index_buffer_binding;
742 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
743 index_size = 2;
744 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
745 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600746 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
747 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700748 }
749 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
750 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700751 skip |=
locke-lunarg1ae57d62020-11-18 10:49:19 -0700752 LogError(index_buffer_binding.buffer_state->buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700753 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
754 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
755 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
756 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700757 }
758 }
759 return skip;
760}
761
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700762bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500763 uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700764 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700765 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600766 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700767 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600768 if (count > 1) {
769 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
770 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
771 skip |=
772 ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
773 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), count, offset, buffer_state);
774 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700775 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
776 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
777 return skip;
778}
779
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700780bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500781 uint32_t count, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700782 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
783 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600784 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700785 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600786 if (count > 1) {
787 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
788 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
789 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
790 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), count, offset,
791 buffer_state);
792 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700793 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
794 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
795 // 'buffer'.
796 return skip;
797}
798
Jeff Bolz5c801d12019-10-09 10:38:45 -0500799bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600800 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600801 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700802 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600803 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700804}
805
locke-lunarg25b6c352020-08-06 17:44:18 -0600806bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
807 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
808 uint32_t groupCountZ) const {
809 bool skip = false;
810 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
811 VK_QUEUE_COMPUTE_BIT);
812 return skip;
813}
814
815bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
816 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
817 uint32_t groupCountZ) const {
818 bool skip = false;
819 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
820 VK_QUEUE_COMPUTE_BIT);
821 return skip;
822}
823
Jeff Bolz5c801d12019-10-09 10:38:45 -0500824bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700825 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700826 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700827 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700828 return skip;
829}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700830bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
831 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700832 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700833 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700834 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600835 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700836 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
837 "call this command.",
838 apiName);
839 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700840 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
841 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600842 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600843 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700844 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
845 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700846 }
847
Tony-LunarG83544c72020-01-17 12:30:19 -0700848 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700849 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600850 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700851 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700852 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700853 skip |=
854 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
855 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700856 return skip;
857}
858
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700859bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
860 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
861 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700862 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700863 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700864}
865
866bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
867 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
868 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700869 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700870 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700871}
872
873bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
874 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700875 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700876 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700877 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600878 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700879 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
880 "call this command.",
881 apiName);
882 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700883 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
884 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600885 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600886 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800887 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700888 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700889 }
890
sfricke-samsungf692b972020-05-02 08:00:45 -0700891 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
892 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600893 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700894 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700895 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700896 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700897 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800898 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700899 return skip;
900}
901
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700902bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
903 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
904 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700905 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
906 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700907}
908
909bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
910 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
911 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700912 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
913 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700914}
915
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600916bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
917 uint32_t firstInstance, VkBuffer counterBuffer,
918 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
919 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700920 bool skip = false;
locke-lunarg3fa463a2020-10-23 16:39:04 -0600921 skip |= ValidateCmdDrawInstance(commandBuffer, instanceCount, firstInstance, CMD_DRAWINDIRECTBYTECOUNTEXT,
922 "vkCmdDrawIndirectByteCountEXT()");
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700923 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
924 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
925 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
926 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600927}
928
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500929bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
930 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
931 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
932 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
933 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
934 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
935 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700936 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
937 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700938 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
939 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
940 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
941 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
942 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
943 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
944 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
945 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
946 }
947 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
948 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
949 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
950 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
951 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
952 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
953 }
954 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
955 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
956 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
957 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100958 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700959 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
960 }
961 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
962 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
963 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
964 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100965 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700966 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
967 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500968 return skip;
969}
970
Jason Macnak67407e72019-07-11 11:05:09 -0700971void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
972 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
973 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
974 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
975 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
976 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
977 uint32_t width, uint32_t height, uint32_t depth) {
978 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600979 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -0700980 cb_state->hasTraceRaysCmd = true;
981}
982
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500983bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
984 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
985 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
986 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
987 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
988 uint32_t height, uint32_t depth) const {
989 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
990 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
991 return skip;
992}
993
994void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
995 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
996 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
997 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
998 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
999 uint32_t height, uint32_t depth) {
1000 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001001 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001002 cb_state->hasTraceRaysCmd = true;
1003}
1004
1005bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
1006 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
1007 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
1008 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
1009 const VkStridedBufferRegionKHR *pCallableShaderBindingTable,
1010 VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001011 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001012 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001013 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_TRACERAYSINDIRECTKHR, "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001014 return skip;
1015}
1016
1017void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
1018 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
1019 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
1020 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
1021 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, VkBuffer buffer,
1022 VkDeviceSize offset) {
1023 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
1024 BUFFER_STATE *buffer_state = GetBufferState(buffer);
locke-lunarg540b2252020-08-03 13:23:36 -06001025 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
1026 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -05001027 cb_state->hasTraceRaysCmd = true;
1028 AddCommandBufferBindingBuffer(cb_state, buffer_state);
1029}
1030
Jeff Bolz5c801d12019-10-09 10:38:45 -05001031bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -07001032 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
1033 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001034 return skip;
1035}
1036
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001037bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001038 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001039 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001040 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001041 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001042 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001043 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001044 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1045 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1046 drawCount, offset, buffer_state);
1047 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001048 return skip;
1049}
1050
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001051bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1052 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001053 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001054 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001055 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001056 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1057 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001058 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001059 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001060 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001061 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001062 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1063 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001064 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1065 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1066 if (maxDrawCount > 1) {
1067 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1068 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1069 maxDrawCount, offset, buffer_state);
1070 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001071 return skip;
1072}