blob: df7debb57892892dcea5d589b9135fce3f391453 [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
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700702bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500703 uint32_t firstVertex, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700704 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700705 VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700706}
707
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700708bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500709 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700710 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700711 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500712 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700713 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
714 unsigned int index_size = 0;
715 const auto &index_buffer_binding = cb_state->index_buffer_binding;
716 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
717 index_size = 2;
718 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
719 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600720 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
721 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700722 }
723 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
724 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700725 skip |=
locke-lunarg1ae57d62020-11-18 10:49:19 -0700726 LogError(index_buffer_binding.buffer_state->buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700727 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
728 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
729 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
730 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700731 }
732 }
733 return skip;
734}
735
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700736bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500737 uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700738 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700739 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600740 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700741 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600742 if (count > 1) {
743 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
744 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
745 skip |=
746 ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
747 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), count, offset, buffer_state);
748 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700749 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
750 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
751 return skip;
752}
753
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700754bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500755 uint32_t count, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700756 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
757 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600758 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700759 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600760 if (count > 1) {
761 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
762 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
763 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
764 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), count, offset,
765 buffer_state);
766 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700767 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
768 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
769 // 'buffer'.
770 return skip;
771}
772
Jeff Bolz5c801d12019-10-09 10:38:45 -0500773bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600774 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600775 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700776 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600777 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700778}
779
locke-lunarg25b6c352020-08-06 17:44:18 -0600780bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
781 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
782 uint32_t groupCountZ) const {
783 bool skip = false;
784 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
785 VK_QUEUE_COMPUTE_BIT);
786 return skip;
787}
788
789bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
790 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
791 uint32_t groupCountZ) const {
792 bool skip = false;
793 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
794 VK_QUEUE_COMPUTE_BIT);
795 return skip;
796}
797
Jeff Bolz5c801d12019-10-09 10:38:45 -0500798bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700799 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700800 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700801 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700802 return skip;
803}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700804bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
805 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700806 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700807 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700808 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600809 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700810 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
811 "call this command.",
812 apiName);
813 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700814 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
815 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600816 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600817 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700818 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
819 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700820 }
821
Tony-LunarG83544c72020-01-17 12:30:19 -0700822 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700823 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600824 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700825 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700826 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700827 skip |=
828 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
829 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700830 return skip;
831}
832
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700833bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
834 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
835 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700836 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700837 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700838}
839
840bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
841 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
842 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700843 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700844 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700845}
846
847bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
848 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700849 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700850 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700851 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600852 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700853 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
854 "call this command.",
855 apiName);
856 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700857 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
858 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600859 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600860 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800861 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700862 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700863 }
864
sfricke-samsungf692b972020-05-02 08:00:45 -0700865 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
866 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600867 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700868 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700869 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700870 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700871 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800872 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700873 return skip;
874}
875
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700876bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
877 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
878 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700879 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
880 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700881}
882
883bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
884 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
885 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700886 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
887 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700888}
889
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600890bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
891 uint32_t firstInstance, VkBuffer counterBuffer,
892 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
893 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700894 bool skip = false;
895 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
896 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
897 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
898 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600899}
900
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500901bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
902 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
903 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
904 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
905 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
906 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
907 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700908 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
909 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700910 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
911 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
912 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
913 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
914 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
915 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
916 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
917 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
918 }
919 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
920 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
921 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
922 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
923 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
924 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
925 }
926 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
927 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
928 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
929 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100930 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700931 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
932 }
933 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
934 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
935 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
936 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100937 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700938 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
939 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500940 return skip;
941}
942
Jason Macnak67407e72019-07-11 11:05:09 -0700943void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
944 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
945 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
946 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
947 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
948 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
949 uint32_t width, uint32_t height, uint32_t depth) {
950 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600951 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -0700952 cb_state->hasTraceRaysCmd = true;
953}
954
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500955bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
956 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
957 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
958 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
959 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
960 uint32_t height, uint32_t depth) const {
961 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
962 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
963 return skip;
964}
965
966void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
967 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
968 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
969 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
970 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
971 uint32_t height, uint32_t depth) {
972 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600973 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500974 cb_state->hasTraceRaysCmd = true;
975}
976
977bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
978 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
979 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
980 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
981 const VkStridedBufferRegionKHR *pCallableShaderBindingTable,
982 VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700983 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500984 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700985 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_TRACERAYSINDIRECTKHR, "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500986 return skip;
987}
988
989void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
990 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
991 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
992 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
993 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, VkBuffer buffer,
994 VkDeviceSize offset) {
995 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
996 BUFFER_STATE *buffer_state = GetBufferState(buffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600997 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
998 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500999 cb_state->hasTraceRaysCmd = true;
1000 AddCommandBufferBindingBuffer(cb_state, buffer_state);
1001}
1002
Jeff Bolz5c801d12019-10-09 10:38:45 -05001003bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -07001004 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
1005 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001006 return skip;
1007}
1008
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001009bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001010 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001011 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001012 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001013 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001014 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -06001015 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -06001016 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
1017 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1018 drawCount, offset, buffer_state);
1019 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001020 return skip;
1021}
1022
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001023bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
1024 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -05001025 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -07001026 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -07001027 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -06001028 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
1029 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -07001030 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001031 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -06001032 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -07001033 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -07001034 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
1035 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -06001036 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
1037 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
1038 if (maxDrawCount > 1) {
1039 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
1040 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
1041 maxDrawCount, offset, buffer_state);
1042 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -07001043 return skip;
1044}