blob: 95584427bba115e6fea3d2057e242fa34de0897f [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-lunarg540b2252020-08-03 13:23:36 -060069 "VUID-vkCmdDraw-None-02687",
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",
Spencer Fricke507600b2020-03-22 13:23:06 -070076 }},
77 {CMD_DRAWINDEXED, {
78 "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool",
79 "VUID-vkCmdDrawIndexed-renderpass",
80 "VUID-vkCmdDrawIndexed-None-02700",
81 "VUID-vkCmdDrawIndexed-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -050082 "VUID-vkCmdDrawIndexed-None-04007",
83 "VUID-vkCmdDrawIndexed-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -070084 "VUID-vkCmdDrawIndexed-None-02697",
85 "VUID-vkCmdDrawIndexed-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -070086 "VUID-vkCmdDrawIndexed-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -060087 "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -060088 "VUID-vkCmdDrawIndexed-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -070089 "VUID-vkCmdDrawIndexed-None-02692",
90 kVUIDUndefined, // indirect_protected_cb
91 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -060092 kVUIDUndefined, // indirect_buffer_bit
93 "VUID-vkCmdDrawIndexed-viewportCount-03417",
94 "VUID-vkCmdDrawIndexed-scissorCount-03418",
95 "VUID-vkCmdDrawIndexed-viewportCount-03419",
96 "VUID-vkCmdDrawIndexed-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -060097 "VUID-vkCmdDrawIndexed-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -060098 "VUID-vkCmdDrawIndexed-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -060099 "VUID-vkCmdDrawIndexed-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600100 "VUID-vkCmdDrawIndexed-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600101 "VUID-vkCmdDrawIndexed-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600102 "VUID-vkCmdDrawIndexed-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600103 "VUID-vkCmdDrawIndexed-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600104 "VUID-vkCmdDrawIndexed-None-02703",
105 "VUID-vkCmdDrawIndexed-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600106 "VUID-vkCmdDrawIndexed-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600107 "VUID-vkCmdDrawIndexed-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700108 }},
109 {CMD_DRAWINDIRECT, {
110 "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool",
111 "VUID-vkCmdDrawIndirect-renderpass",
112 "VUID-vkCmdDrawIndirect-None-02700",
113 "VUID-vkCmdDrawIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500114 "VUID-vkCmdDrawIndirect-None-04007",
115 "VUID-vkCmdDrawIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700116 "VUID-vkCmdDrawIndirect-None-02697",
117 "VUID-vkCmdDrawIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700118 "VUID-vkCmdDrawIndirect-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600119 "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600120 "VUID-vkCmdDrawIndirect-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700121 "VUID-vkCmdDrawIndirect-None-02692",
122 "VUID-vkCmdDrawIndirect-commandBuffer-02711",
123 "VUID-vkCmdDrawIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600124 "VUID-vkCmdDrawIndirect-buffer-02709",
125 "VUID-vkCmdDrawIndirect-viewportCount-03417",
126 "VUID-vkCmdDrawIndirect-scissorCount-03418",
127 "VUID-vkCmdDrawIndirect-viewportCount-03419",
128 "VUID-vkCmdDrawIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600129 "VUID-vkCmdDrawIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600130 "VUID-vkCmdDrawIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600131 "VUID-vkCmdDrawIndirect-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600132 "VUID-vkCmdDrawIndirect-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600133 "VUID-vkCmdDrawIndirect-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600134 "VUID-vkCmdDrawIndirect-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600135 "VUID-vkCmdDrawIndirect-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600136 "VUID-vkCmdDrawIndirect-None-02703",
137 "VUID-vkCmdDrawIndirect-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600138 "VUID-vkCmdDrawIndirect-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600139 "VUID-vkCmdDrawIndirect-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700140 }},
141 {CMD_DRAWINDEXEDINDIRECT, {
142 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool",
143 "VUID-vkCmdDrawIndexedIndirect-renderpass",
144 "VUID-vkCmdDrawIndexedIndirect-None-02700",
145 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500146 "VUID-vkCmdDrawIndexedIndirect-None-04007",
147 "VUID-vkCmdDrawIndexedIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700148 "VUID-vkCmdDrawIndexedIndirect-None-02697",
149 "VUID-vkCmdDrawIndexedIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700150 "VUID-vkCmdDrawIndexedIndirect-subpass-02685",
Mark Lobodzinski2f084472020-06-18 16:33:57 -0600151 "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600152 "VUID-vkCmdDrawIndexedIndirect-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700153 "VUID-vkCmdDrawIndexedIndirect-None-02692",
154 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711",
155 "VUID-vkCmdDrawIndexedIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600156 "VUID-vkCmdDrawIndexedIndirect-buffer-02709",
157 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417",
158 "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418",
159 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419",
160 "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600161 "VUID-vkCmdDrawIndexedIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600162 "VUID-vkCmdDrawIndexedIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600163 "VUID-vkCmdDrawIndexedIndirect-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600164 "VUID-vkCmdDrawIndexedIndirect-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600165 "VUID-vkCmdDrawIndexedIndirect-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600166 "VUID-vkCmdDrawIndexedIndirect-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600167 "VUID-vkCmdDrawIndexedIndirect-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600168 "VUID-vkCmdDrawIndexedIndirect-None-02703",
169 "VUID-vkCmdDrawIndexedIndirect-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600170 "VUID-vkCmdDrawIndexedIndirect-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600171 "VUID-vkCmdDrawIndexedIndirect-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700172 }},
173 {CMD_DISPATCH, {
174 "VUID-vkCmdDispatch-commandBuffer-cmdpool",
175 "VUID-vkCmdDispatch-renderpass",
176 "VUID-vkCmdDispatch-None-02700",
177 kVUIDUndefined, // dynamic_state
178 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500179 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700180 "VUID-vkCmdDispatch-None-02697",
181 kVUIDUndefined, // render_pass_compatible
182 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700183 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600184 "VUID-vkCmdDispatch-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700185 "VUID-vkCmdDispatch-None-02692",
186 kVUIDUndefined, // indirect_protected_cb
187 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600188 kVUIDUndefined, // indirect_buffer_bit
189 kVUIDUndefined, // viewport_count
190 kVUIDUndefined, // scissor_count
191 kVUIDUndefined, // viewport_scissor_count
192 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600193 "VUID-vkCmdDispatch-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600194 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600195 "VUID-vkCmdDispatch-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600196 "VUID-vkCmdDispatch-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600197 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600198 "VUID-vkCmdDispatch-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600199 "VUID-vkCmdDispatch-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600200 "VUID-vkCmdDispatch-None-02703",
201 "VUID-vkCmdDispatch-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600202 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600203 "VUID-vkCmdDispatch-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700204 }},
205 {CMD_DISPATCHINDIRECT, {
206 "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool",
207 "VUID-vkCmdDispatchIndirect-renderpass",
208 "VUID-vkCmdDispatchIndirect-None-02700",
209 kVUIDUndefined, // dynamic_state
210 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500211 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700212 "VUID-vkCmdDispatchIndirect-None-02697",
213 kVUIDUndefined, // render_pass_compatible
214 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700215 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600216 "VUID-vkCmdDispatchIndirect-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700217 "VUID-vkCmdDispatchIndirect-None-02692",
218 "VUID-vkCmdDispatchIndirect-commandBuffer-02711",
219 "VUID-vkCmdDispatchIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600220 "VUID-vkCmdDispatchIndirect-buffer-02709",
221 kVUIDUndefined, // viewport_count
222 kVUIDUndefined, // scissor_count
223 kVUIDUndefined, // viewport_scissor_count
224 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600225 "VUID-vkCmdDispatchIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600226 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600227 "VUID-vkCmdDispatchIndirect-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600228 "VUID-vkCmdDispatchIndirect-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600229 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600230 "VUID-vkCmdDispatchIndirect-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600231 "VUID-vkCmdDispatchIndirect-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600232 "VUID-vkCmdDispatchIndirect-None-02703",
233 "VUID-vkCmdDispatchIndirect-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600234 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600235 "VUID-vkCmdDispatchIndirect-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700236 }},
237 {CMD_DRAWINDIRECTCOUNT, {
238 "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool",
239 "VUID-vkCmdDrawIndirectCount-renderpass",
240 "VUID-vkCmdDrawIndirectCount-None-02700",
241 "VUID-vkCmdDrawIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500242 "VUID-vkCmdDrawIndirectCount-None-04007",
243 "VUID-vkCmdDrawIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700244 "VUID-vkCmdDrawIndirectCount-None-02697",
245 "VUID-vkCmdDrawIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700246 "VUID-vkCmdDrawIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600247 "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600248 "VUID-vkCmdDrawIndirectCount-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700249 "VUID-vkCmdDrawIndirectCount-None-02692",
250 "VUID-vkCmdDrawIndirectCount-commandBuffer-02711",
251 "VUID-vkCmdDrawIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600252 "VUID-vkCmdDrawIndirectCount-buffer-02709",
253 "VUID-vkCmdDrawIndirectCount-viewportCount-03417",
254 "VUID-vkCmdDrawIndirectCount-scissorCount-03418",
255 "VUID-vkCmdDrawIndirectCount-viewportCount-03419",
256 "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600257 "VUID-vkCmdDrawIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600258 "VUID-vkCmdDrawIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600259 "VUID-vkCmdDrawIndirectCount-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600260 "VUID-vkCmdDrawIndirectCount-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600261 "VUID-vkCmdDrawIndirectCount-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600262 "VUID-vkCmdDrawIndirectCount-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600263 "VUID-vkCmdDrawIndirectCount-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600264 "VUID-vkCmdDrawIndirectCount-None-02703",
265 "VUID-vkCmdDrawIndirectCount-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600266 "VUID-vkCmdDrawIndirectCount-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600267 "VUID-vkCmdDrawIndirectCount-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700268 }},
269 {CMD_DRAWINDEXEDINDIRECTCOUNT,{
270 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool",
271 "VUID-vkCmdDrawIndexedIndirectCount-renderpass",
272 "VUID-vkCmdDrawIndexedIndirectCount-None-02700",
273 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500274 "VUID-vkCmdDrawIndexedIndirectCount-None-04007",
275 "VUID-vkCmdDrawIndexedIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700276 "VUID-vkCmdDrawIndexedIndirectCount-None-02697",
277 "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700278 "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600279 "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600280 "VUID-vkCmdDrawIndexedIndirectCount-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700281 "VUID-vkCmdDrawIndexedIndirectCount-None-02692",
282 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711",
283 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600284 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709",
285 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417",
286 "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418",
287 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419",
288 "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600289 "VUID-vkCmdDrawIndexedIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600290 "VUID-vkCmdDrawIndexedIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600291 "VUID-vkCmdDrawIndexedIndirectCount-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600292 "VUID-vkCmdDrawIndexedIndirectCount-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600293 "VUID-vkCmdDrawIndexedIndirectCount-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600294 "VUID-vkCmdDrawIndexedIndirectCount-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600295 "VUID-vkCmdDrawIndexedIndirectCount-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600296 "VUID-vkCmdDrawIndexedIndirectCount-None-02703",
297 "VUID-vkCmdDrawIndexedIndirectCount-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600298 "VUID-vkCmdDrawIndexedIndirectCount-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600299 "VUID-vkCmdDrawIndexedIndirectCount-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700300 }},
301 {CMD_TRACERAYSNV, {
302 "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool",
303 "VUID-vkCmdTraceRaysNV-renderpass",
304 "VUID-vkCmdTraceRaysNV-None-02700",
305 "VUID-vkCmdTraceRaysNV-commandBuffer-02701",
306 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500307 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700308 "VUID-vkCmdTraceRaysNV-None-02697",
309 kVUIDUndefined, // render_pass_compatible
310 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700311 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600312 "VUID-vkCmdTraceRaysNV-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700313 "VUID-vkCmdTraceRaysNV-None-02692",
314 kVUIDUndefined, // indirect_protected_cb
315 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600316 kVUIDUndefined, // indirect_buffer_bit
317 kVUIDUndefined, // viewport_count
318 kVUIDUndefined, // scissor_count
319 kVUIDUndefined, // viewport_scissor_count
320 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600321 "VUID-vkCmdTraceRaysNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600322 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600323 "VUID-vkCmdTraceRaysNV-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600324 "VUID-vkCmdTraceRaysNV-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600325 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600326 "VUID-vkCmdTraceRaysNV-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600327 "VUID-vkCmdTraceRaysNV-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600328 "VUID-vkCmdTraceRaysNV-None-02703",
329 "VUID-vkCmdTraceRaysNV-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600330 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600331 "VUID-vkCmdTraceRaysNV-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700332 }},
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500333 {CMD_TRACERAYSKHR, {
334 "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool",
335 "VUID-vkCmdTraceRaysKHR-renderpass",
336 "VUID-vkCmdTraceRaysKHR-None-02700",
337 "VUID-vkCmdTraceRaysKHR-commandBuffer-02701",
338 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500339 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500340 "VUID-vkCmdTraceRaysKHR-None-02697",
341 kVUIDUndefined, // render_pass_compatible
342 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700343 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600344 "VUID-vkCmdTraceRaysKHR-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700345 "VUID-vkCmdTraceRaysKHR-None-02692",
346 kVUIDUndefined, // indirect_protected_cb
347 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600348 kVUIDUndefined, // indirect_buffer_bit
349 kVUIDUndefined, // viewport_count
350 kVUIDUndefined, // scissor_count
351 kVUIDUndefined, // viewport_scissor_count
352 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600353 "VUID-vkCmdTraceRaysKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600354 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600355 "VUID-vkCmdTraceRaysKHR-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600356 "VUID-vkCmdTraceRaysKHR-None-02698",
locke-lunarg78486832020-09-09 19:39:42 -0600357 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600358 "VUID-vkCmdTraceRaysKHR-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600359 "VUID-vkCmdTraceRaysKHR-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600360 "VUID-vkCmdTraceRaysKHR-None-02703",
361 "VUID-vkCmdTraceRaysKHR-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600362 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600363 "VUID-vkCmdTraceRaysKHR-None-02859",
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500364 }},
365 {CMD_TRACERAYSINDIRECTKHR, {
366 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool",
367 "VUID-vkCmdTraceRaysIndirectKHR-renderpass",
368 "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
369 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701",
370 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500371 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500372 "VUID-vkCmdTraceRaysIndirectKHR-None-02697",
373 kVUIDUndefined, // render_pass_compatible
374 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700375 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600376 "VUID-vkCmdTraceRaysIndirectKHR-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700377 "VUID-vkCmdTraceRaysIndirectKHR-None-02692",
378 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711",
379 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600380 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02709",
381 kVUIDUndefined, // viewport_count
382 kVUIDUndefined, // scissor_count
383 kVUIDUndefined, // viewport_scissor_count
384 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600385 "VUID-vkCmdTraceRaysIndirectKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600386 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600387 "VUID-vkCmdTraceRaysIndirectKHR-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600388 "VUID-vkCmdTraceRaysIndirectKHR-None-02698",
locke-lunarg78486832020-09-09 19:39:42 -0600389 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600390 "VUID-vkCmdTraceRaysIndirectKHR-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600391 "VUID-vkCmdTraceRaysIndirectKHR-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600392 "VUID-vkCmdTraceRaysIndirectKHR-None-02703",
393 "VUID-vkCmdTraceRaysIndirectKHR-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600394 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600395 "VUID-vkCmdTraceRaysIndirectKHR-None-02859",
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500396 }},
Spencer Fricke507600b2020-03-22 13:23:06 -0700397 {CMD_DRAWMESHTASKSNV, {
398 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool",
399 "VUID-vkCmdDrawMeshTasksNV-renderpass",
400 "VUID-vkCmdDrawMeshTasksNV-None-02700",
401 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701",
402 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500403 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700404 "VUID-vkCmdDrawMeshTasksNV-None-02697",
405 "VUID-vkCmdDrawMeshTasksNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700406 "VUID-vkCmdDrawMeshTasksNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600407 "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600408 "VUID-vkCmdDrawMeshTasksNV-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700409 "VUID-vkCmdDrawMeshTasksNV-None-02692",
410 kVUIDUndefined, // indirect_protected_cb
411 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600412 kVUIDUndefined, // indirect_buffer_bit
413 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417",
414 "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418",
415 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419",
416 "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600417 "VUID-vkCmdDrawMeshTasksNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600418 "VUID-vkCmdDrawMeshTasksNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600419 "VUID-vkCmdDrawMeshTasksNV-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600420 "VUID-vkCmdDrawMeshTasksNV-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600421 "VUID-vkCmdDrawMeshTasksNV-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600422 "VUID-vkCmdDrawMeshTasksNV-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600423 "VUID-vkCmdDrawMeshTasksNV-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600424 "VUID-vkCmdDrawMeshTasksNV-None-02703",
425 "VUID-vkCmdDrawMeshTasksNV-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600426 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600427 "VUID-vkCmdDrawMeshTasksNV-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700428 }},
429 {CMD_DRAWMESHTASKSINDIRECTNV, {
430 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool",
431 "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass",
432 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700",
433 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701",
434 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500435 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700436 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697",
437 "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700438 "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600439 "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600440 "VUID-vkCmdDrawMeshTasksIndirectNV-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700441 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692",
442 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711",
443 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600444 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709",
445 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417",
446 "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418",
447 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419",
448 "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600449 "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600450 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600451 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600452 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600453 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600454 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600455 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600456 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02703",
457 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600458 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600459 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700460 }},
461 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, {
462 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool",
463 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass",
464 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700",
465 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701",
466 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500467 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700468 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697",
469 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700470 "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600471 "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600472 "VUID-vkCmdDrawMeshTasksIndirectCountNV-magFilter-04553",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700473 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692",
474 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711",
475 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600476 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709",
477 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417",
478 "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418",
479 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419",
480 "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600481 "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600482 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600483 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600484 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600485 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600486 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600487 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600488 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02703",
489 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600490 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600491 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02859",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600492 }},
493 {CMD_DRAWINDIRECTBYTECOUNTEXT, {
494 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool",
495 "VUID-vkCmdDrawIndirectByteCountEXT-renderpass",
496 "VUID-vkCmdDrawIndirectByteCountEXT-None-02700",
497 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701",
498 "VUID-vkCmdDrawIndirectByteCountEXT-None-04007",
499 "VUID-vkCmdDrawIndirectByteCountEXT-None-04008",
500 "VUID-vkCmdDrawIndirectByteCountEXT-None-02697",
501 "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684",
502 "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685",
503 "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689",
Shannon McPhersonc505df62020-10-20 16:27:11 -0600504 "VUID-vkCmdDrawIndirectByteCountEXT-magFilter-04553",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600505 "VUID-vkCmdDrawIndirectByteCountEXT-None-02692",
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700506 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02646",
507 "UNASSIGNED-vkCmdDrawIndirectByteCountEXT-buffer", // TODO - Update when header are updated
508 "VUID-vkCmdDrawIndirectByteCountEXT-buffer-02290",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600509 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417",
510 "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418",
511 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419",
512 "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420",
513 "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696",
514 "VUID-vkCmdDrawIndirectByteCountEXT-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600515 "VUID-vkCmdDrawIndirectByteCountEXT-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600516 "VUID-vkCmdDrawIndirectByteCountEXT-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600517 "VUID-vkCmdDrawIndirectByteCountEXT-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600518 "VUID-vkCmdDrawIndirectByteCountEXT-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600519 "VUID-vkCmdDrawIndirectByteCountEXT-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600520 "VUID-vkCmdDrawIndirectByteCountEXT-None-02703",
521 "VUID-vkCmdDrawIndirectByteCountEXT-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600522 "VUID-vkCmdDrawIndirectByteCountEXT-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600523 "VUID-vkCmdDrawIndirectByteCountEXT-None-02859",
locke-lunarg25b6c352020-08-06 17:44:18 -0600524 }},
525 {CMD_DISPATCHBASE, {
526 "VUID-vkCmdDispatchBase-commandBuffer-cmdpool",
527 "VUID-vkCmdDispatchBase-renderpass",
528 "VUID-vkCmdDispatchBase-None-02700",
529 kVUIDUndefined, // dynamic_state
530 kVUIDUndefined, // vertex_binding
531 kVUIDUndefined, // vertex_binding_null
532 "VUID-vkCmdDispatchBase-None-02697",
533 kVUIDUndefined, // render_pass_compatible
534 kVUIDUndefined, // subpass_index
535 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600536 "VUID-vkCmdDispatchBase-magFilter-04553",
locke-lunarg25b6c352020-08-06 17:44:18 -0600537 "VUID-vkCmdDispatchBase-None-02692",
538 kVUIDUndefined, // indirect_protected_cb
539 kVUIDUndefined, // indirect_contiguous_memory;
540 kVUIDUndefined, // indirect_buffer_bit
541 kVUIDUndefined, // viewport_count
542 kVUIDUndefined, // scissor_count
543 kVUIDUndefined, // viewport_scissor_count
544 kVUIDUndefined, // primitive_topology
545 "VUID-vkCmdDispatchBase-flags-02696",
546 kVUIDUndefined, // subpass_input
547 "VUID-vkCmdDispatchBase-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600548 "VUID-vkCmdDispatchBase-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600549 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600550 "VUID-vkCmdDispatchBase-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600551 "VUID-vkCmdDispatchBase-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600552 "VUID-vkCmdDispatchBase-None-02703",
553 "VUID-vkCmdDispatchBase-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600554 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600555 "VUID-vkCmdDispatchBase-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700556 }},
557 // Used if invalid cmd_type is used
Piers Daniell39842ee2020-07-10 16:42:33 -0600558 {CMD_NONE, {
559 kVUIDUndefined,
560 kVUIDUndefined,
561 kVUIDUndefined,
562 kVUIDUndefined,
563 kVUIDUndefined,
564 kVUIDUndefined,
565 kVUIDUndefined,
566 kVUIDUndefined,
567 kVUIDUndefined,
568 kVUIDUndefined,
569 kVUIDUndefined,
570 kVUIDUndefined,
571 kVUIDUndefined,
572 kVUIDUndefined,
573 kVUIDUndefined,
574 kVUIDUndefined,
575 kVUIDUndefined,
576 kVUIDUndefined,
577 kVUIDUndefined,
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600578 kVUIDUndefined,
locke-lunarg25b6c352020-08-06 17:44:18 -0600579 kVUIDUndefined,
580 kVUIDUndefined,
locke-lunargc4fe6b82020-08-08 00:19:51 -0600581 kVUIDUndefined,
locke-lunarg1328e8e2020-08-20 12:40:08 -0600582 kVUIDUndefined,
locke-lunarg36045992020-08-20 16:54:37 -0600583 kVUIDUndefined,
locke-lunarg12d20992020-09-21 12:46:49 -0600584 kVUIDUndefined,
585 kVUIDUndefined,
locke-lunargde3f0fa2020-09-10 11:55:31 -0600586 kVUIDUndefined,
locke-lunarg4189aa22020-10-21 00:23:48 -0600587 kVUIDUndefined,
Piers Daniell39842ee2020-07-10 16:42:33 -0600588 }}
Spencer Fricke507600b2020-03-22 13:23:06 -0700589};
590// clang-format on
591
592// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
593const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
594 if (drawdispatch_vuid.find(cmd_type) != drawdispatch_vuid.cend()) {
595 return drawdispatch_vuid.at(cmd_type);
596 } else {
597 return drawdispatch_vuid.at(CMD_NONE);
598 }
599}
600
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700601// Generic function to handle validation for all CmdDraw* type functions
602bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700603 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700604 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700605 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600606 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700607 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700608 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700609 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700610 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
611 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
612 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700613 }
614 return skip;
615}
616
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700617bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500618 uint32_t firstVertex, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700619 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700620 VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700621}
622
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700623bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500624 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700625 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700626 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500627 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700628 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
629 unsigned int index_size = 0;
630 const auto &index_buffer_binding = cb_state->index_buffer_binding;
631 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
632 index_size = 2;
633 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
634 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600635 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
636 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700637 }
638 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
639 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700640 skip |=
641 LogError(index_buffer_binding.buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
642 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
643 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
644 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
645 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700646 }
647 }
648 return skip;
649}
650
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700651bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500652 uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700653 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700654 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600655 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700656 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600657 if (count > 1) {
658 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
659 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
660 skip |=
661 ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
662 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), count, offset, buffer_state);
663 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700664 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
665 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
666 return skip;
667}
668
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700669bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500670 uint32_t count, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700671 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
672 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600673 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700674 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600675 if (count > 1) {
676 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
677 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
678 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
679 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), count, offset,
680 buffer_state);
681 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700682 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
683 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
684 // 'buffer'.
685 return skip;
686}
687
Jeff Bolz5c801d12019-10-09 10:38:45 -0500688bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600689 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600690 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700691 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600692 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700693}
694
locke-lunarg25b6c352020-08-06 17:44:18 -0600695bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
696 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
697 uint32_t groupCountZ) const {
698 bool skip = false;
699 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
700 VK_QUEUE_COMPUTE_BIT);
701 return skip;
702}
703
704bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
705 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
706 uint32_t groupCountZ) const {
707 bool skip = false;
708 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
709 VK_QUEUE_COMPUTE_BIT);
710 return skip;
711}
712
Jeff Bolz5c801d12019-10-09 10:38:45 -0500713bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700714 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700715 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700716 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700717 return skip;
718}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700719bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
720 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700721 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700722 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700723 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600724 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700725 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
726 "call this command.",
727 apiName);
728 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700729 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
730 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600731 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600732 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700733 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
734 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700735 }
736
Tony-LunarG83544c72020-01-17 12:30:19 -0700737 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700738 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600739 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700740 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700741 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700742 skip |=
743 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
744 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700745 return skip;
746}
747
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700748bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
749 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
750 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700751 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700752 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700753}
754
755bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
756 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
757 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700758 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700759 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700760}
761
762bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
763 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700764 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700765 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700766 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600767 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700768 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
769 "call this command.",
770 apiName);
771 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700772 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
773 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600774 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600775 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800776 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700777 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700778 }
779
sfricke-samsungf692b972020-05-02 08:00:45 -0700780 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
781 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600782 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700783 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700784 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700785 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700786 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800787 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700788 return skip;
789}
790
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700791bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
792 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
793 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700794 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
795 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700796}
797
798bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
799 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
800 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700801 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
802 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700803}
804
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600805bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
806 uint32_t firstInstance, VkBuffer counterBuffer,
807 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
808 uint32_t vertexStride) const {
sfricke-samsungd5e9adb2020-10-26 03:59:29 -0700809 bool skip = false;
810 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
811 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
812 skip |= ValidateIndirectCmd(commandBuffer, counterBuffer, CMD_DRAWINDIRECTBYTECOUNTEXT, "vkCmdDrawIndirectByteCountEXT()");
813 return skip;
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600814}
815
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500816bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
817 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
818 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
819 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
820 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
821 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
822 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700823 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
824 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700825 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
826 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
827 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
828 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
829 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
830 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
831 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
832 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
833 }
834 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
835 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
836 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
837 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
838 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
839 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
840 }
841 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
842 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
843 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
844 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100845 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700846 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
847 }
848 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
849 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
850 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
851 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100852 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700853 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
854 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500855 return skip;
856}
857
Jason Macnak67407e72019-07-11 11:05:09 -0700858void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
859 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
860 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
861 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
862 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
863 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
864 uint32_t width, uint32_t height, uint32_t depth) {
865 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600866 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -0700867 cb_state->hasTraceRaysCmd = true;
868}
869
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500870bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
871 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
872 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
873 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
874 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
875 uint32_t height, uint32_t depth) const {
876 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
877 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
878 return skip;
879}
880
881void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
882 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
883 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
884 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
885 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
886 uint32_t height, uint32_t depth) {
887 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600888 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500889 cb_state->hasTraceRaysCmd = true;
890}
891
892bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
893 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
894 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
895 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
896 const VkStridedBufferRegionKHR *pCallableShaderBindingTable,
897 VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700898 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500899 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700900 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_TRACERAYSINDIRECTKHR, "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500901 return skip;
902}
903
904void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
905 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
906 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
907 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
908 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, VkBuffer buffer,
909 VkDeviceSize offset) {
910 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
911 BUFFER_STATE *buffer_state = GetBufferState(buffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600912 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
913 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500914 cb_state->hasTraceRaysCmd = true;
915 AddCommandBufferBindingBuffer(cb_state, buffer_state);
916}
917
Jeff Bolz5c801d12019-10-09 10:38:45 -0500918bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700919 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
920 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700921 return skip;
922}
923
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700924bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500925 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700926 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700927 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600928 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700929 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -0600930 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600931 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
932 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
933 drawCount, offset, buffer_state);
934 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700935 return skip;
936}
937
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700938bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
939 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500940 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700941 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700942 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600943 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
944 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700945 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700946 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -0600947 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700948 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700949 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
950 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -0600951 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
952 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
953 if (maxDrawCount > 1) {
954 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
955 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
956 maxDrawCount, offset, buffer_state);
957 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700958 return skip;
959}