blob: 3aa6ca7cef1c41c2ff37a711d22c9110994bee8a [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",
56 "VUID-vkCmdDraw-None-02690",
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",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600506 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417",
507 "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418",
508 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419",
509 "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420",
510 "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696",
511 "VUID-vkCmdDrawIndirectByteCountEXT-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600512 "VUID-vkCmdDrawIndirectByteCountEXT-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600513 "VUID-vkCmdDrawIndirectByteCountEXT-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600514 "VUID-vkCmdDrawIndirectByteCountEXT-None-02687",
locke-lunarg1328e8e2020-08-20 12:40:08 -0600515 "VUID-vkCmdDrawIndirectByteCountEXT-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600516 "VUID-vkCmdDrawIndirectByteCountEXT-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600517 "VUID-vkCmdDrawIndirectByteCountEXT-None-02703",
518 "VUID-vkCmdDrawIndirectByteCountEXT-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600519 "VUID-vkCmdDrawIndirectByteCountEXT-None-02721",
locke-lunarg4189aa22020-10-21 00:23:48 -0600520 "VUID-vkCmdDrawIndirectByteCountEXT-None-02859",
locke-lunarg25b6c352020-08-06 17:44:18 -0600521 }},
522 {CMD_DISPATCHBASE, {
523 "VUID-vkCmdDispatchBase-commandBuffer-cmdpool",
524 "VUID-vkCmdDispatchBase-renderpass",
525 "VUID-vkCmdDispatchBase-None-02700",
526 kVUIDUndefined, // dynamic_state
527 kVUIDUndefined, // vertex_binding
528 kVUIDUndefined, // vertex_binding_null
529 "VUID-vkCmdDispatchBase-None-02697",
530 kVUIDUndefined, // render_pass_compatible
531 kVUIDUndefined, // subpass_index
532 kVUIDUndefined, // sample_location
Shannon McPhersonc505df62020-10-20 16:27:11 -0600533 "VUID-vkCmdDispatchBase-magFilter-04553",
locke-lunarg25b6c352020-08-06 17:44:18 -0600534 "VUID-vkCmdDispatchBase-None-02692",
535 kVUIDUndefined, // indirect_protected_cb
536 kVUIDUndefined, // indirect_contiguous_memory;
537 kVUIDUndefined, // indirect_buffer_bit
538 kVUIDUndefined, // viewport_count
539 kVUIDUndefined, // scissor_count
540 kVUIDUndefined, // viewport_scissor_count
541 kVUIDUndefined, // primitive_topology
542 "VUID-vkCmdDispatchBase-flags-02696",
543 kVUIDUndefined, // subpass_input
544 "VUID-vkCmdDispatchBase-None-02691",
locke-lunargde3f0fa2020-09-10 11:55:31 -0600545 "VUID-vkCmdDispatchBase-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600546 kVUIDUndefined, // image_subresources
locke-lunarg1328e8e2020-08-20 12:40:08 -0600547 "VUID-vkCmdDispatchBase-None-02699",
locke-lunarg36045992020-08-20 16:54:37 -0600548 "VUID-vkCmdDispatchBase-None-02702",
locke-lunarg12d20992020-09-21 12:46:49 -0600549 "VUID-vkCmdDispatchBase-None-02703",
550 "VUID-vkCmdDispatchBase-None-02704",
locke-lunarg4cb55aa2020-10-16 18:11:42 -0600551 kVUIDUndefined, // vertex_binding_attribute
locke-lunarg4189aa22020-10-21 00:23:48 -0600552 "VUID-vkCmdDispatchBase-None-02859",
Spencer Fricke507600b2020-03-22 13:23:06 -0700553 }},
554 // Used if invalid cmd_type is used
Piers Daniell39842ee2020-07-10 16:42:33 -0600555 {CMD_NONE, {
556 kVUIDUndefined,
557 kVUIDUndefined,
558 kVUIDUndefined,
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,
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600575 kVUIDUndefined,
locke-lunarg25b6c352020-08-06 17:44:18 -0600576 kVUIDUndefined,
577 kVUIDUndefined,
locke-lunargc4fe6b82020-08-08 00:19:51 -0600578 kVUIDUndefined,
locke-lunarg1328e8e2020-08-20 12:40:08 -0600579 kVUIDUndefined,
locke-lunarg36045992020-08-20 16:54:37 -0600580 kVUIDUndefined,
locke-lunarg12d20992020-09-21 12:46:49 -0600581 kVUIDUndefined,
582 kVUIDUndefined,
locke-lunargde3f0fa2020-09-10 11:55:31 -0600583 kVUIDUndefined,
locke-lunarg4189aa22020-10-21 00:23:48 -0600584 kVUIDUndefined,
Piers Daniell39842ee2020-07-10 16:42:33 -0600585 }}
Spencer Fricke507600b2020-03-22 13:23:06 -0700586};
587// clang-format on
588
589// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
590const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
591 if (drawdispatch_vuid.find(cmd_type) != drawdispatch_vuid.cend()) {
592 return drawdispatch_vuid.at(cmd_type);
593 } else {
594 return drawdispatch_vuid.at(CMD_NONE);
595 }
596}
597
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700598// Generic function to handle validation for all CmdDraw* type functions
599bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700600 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700601 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700602 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600603 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700604 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700605 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700606 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700607 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
608 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
609 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700610 }
611 return skip;
612}
613
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700614bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500615 uint32_t firstVertex, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700616 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700617 VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700618}
619
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700620bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500621 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700622 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700623 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500624 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700625 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
626 unsigned int index_size = 0;
627 const auto &index_buffer_binding = cb_state->index_buffer_binding;
628 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
629 index_size = 2;
630 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
631 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600632 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
633 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700634 }
635 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
636 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700637 skip |=
638 LogError(index_buffer_binding.buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
639 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
640 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
641 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
642 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700643 }
644 }
645 return skip;
646}
647
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700648bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500649 uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700650 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700651 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600652 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700653 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600654 if (count > 1) {
655 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
656 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
657 skip |=
658 ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
659 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), count, offset, buffer_state);
660 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700661 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
662 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
663 return skip;
664}
665
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700666bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500667 uint32_t count, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700668 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
669 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600670 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700671 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600672 if (count > 1) {
673 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
674 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
675 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
676 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), count, offset,
677 buffer_state);
678 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700679 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
680 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
681 // 'buffer'.
682 return skip;
683}
684
Jeff Bolz5c801d12019-10-09 10:38:45 -0500685bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600686 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600687 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700688 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600689 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700690}
691
locke-lunarg25b6c352020-08-06 17:44:18 -0600692bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
693 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
694 uint32_t groupCountZ) const {
695 bool skip = false;
696 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
697 VK_QUEUE_COMPUTE_BIT);
698 return skip;
699}
700
701bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
702 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
703 uint32_t groupCountZ) const {
704 bool skip = false;
705 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
706 VK_QUEUE_COMPUTE_BIT);
707 return skip;
708}
709
Jeff Bolz5c801d12019-10-09 10:38:45 -0500710bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700711 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700712 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700713 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700714 return skip;
715}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700716bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
717 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700718 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700719 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700720 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600721 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700722 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
723 "call this command.",
724 apiName);
725 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700726 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
727 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600728 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600729 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700730 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
731 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700732 }
733
Tony-LunarG83544c72020-01-17 12:30:19 -0700734 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700735 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600736 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700737 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700738 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700739 skip |=
740 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
741 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700742 return skip;
743}
744
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700745bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
746 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
747 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700748 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700749 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700750}
751
752bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
753 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
754 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700755 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700756 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700757}
758
759bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
760 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700761 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700762 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700763 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600764 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700765 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
766 "call this command.",
767 apiName);
768 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700769 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
770 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600771 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600772 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800773 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700774 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700775 }
776
sfricke-samsungf692b972020-05-02 08:00:45 -0700777 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
778 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600779 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700780 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700781 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700782 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700783 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800784 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700785 return skip;
786}
787
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700788bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
789 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
790 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700791 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
792 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700793}
794
795bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
796 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
797 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700798 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
799 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700800}
801
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600802bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
803 uint32_t firstInstance, VkBuffer counterBuffer,
804 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
805 uint32_t vertexStride) const {
806 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
807 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
808}
809
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500810bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
811 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
812 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
813 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
814 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
815 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
816 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700817 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
818 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700819 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
820 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
821 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
822 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
823 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
824 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
825 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
826 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
827 }
828 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
829 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
830 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
831 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
832 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
833 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
834 }
835 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
836 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
837 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
838 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100839 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700840 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
841 }
842 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
843 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
844 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
845 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100846 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700847 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
848 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500849 return skip;
850}
851
Jason Macnak67407e72019-07-11 11:05:09 -0700852void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
853 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
854 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
855 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
856 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
857 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
858 uint32_t width, uint32_t height, uint32_t depth) {
859 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600860 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -0700861 cb_state->hasTraceRaysCmd = true;
862}
863
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500864bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
865 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
866 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
867 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
868 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
869 uint32_t height, uint32_t depth) const {
870 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
871 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
872 return skip;
873}
874
875void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
876 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
877 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
878 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
879 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
880 uint32_t height, uint32_t depth) {
881 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600882 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500883 cb_state->hasTraceRaysCmd = true;
884}
885
886bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
887 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
888 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
889 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
890 const VkStridedBufferRegionKHR *pCallableShaderBindingTable,
891 VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700892 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500893 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700894 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_TRACERAYSINDIRECTKHR, "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500895 return skip;
896}
897
898void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
899 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
900 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
901 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
902 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, VkBuffer buffer,
903 VkDeviceSize offset) {
904 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
905 BUFFER_STATE *buffer_state = GetBufferState(buffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600906 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
907 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500908 cb_state->hasTraceRaysCmd = true;
909 AddCommandBufferBindingBuffer(cb_state, buffer_state);
910}
911
Jeff Bolz5c801d12019-10-09 10:38:45 -0500912bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700913 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
914 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700915 return skip;
916}
917
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700918bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500919 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700920 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700921 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600922 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700923 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -0600924 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600925 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
926 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
927 drawCount, offset, buffer_state);
928 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700929 return skip;
930}
931
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700932bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
933 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500934 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700935 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700936 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600937 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
938 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700939 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700940 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -0600941 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700942 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700943 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
944 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -0600945 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
946 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
947 if (maxDrawCount > 1) {
948 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
949 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
950 maxDrawCount, offset, buffer_state);
951 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700952 return skip;
953}