blob: 76944e410cf3b1147596f0e370543b2c9679dd33 [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-lunargc4fe6b82020-08-08 00:19:51 -060068 "VUID-vkCmdDraw-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -060069 "VUID-vkCmdDraw-None-02687",
Spencer Fricke507600b2020-03-22 13:23:06 -070070 }},
71 {CMD_DRAWINDEXED, {
72 "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool",
73 "VUID-vkCmdDrawIndexed-renderpass",
74 "VUID-vkCmdDrawIndexed-None-02700",
75 "VUID-vkCmdDrawIndexed-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -050076 "VUID-vkCmdDrawIndexed-None-04007",
77 "VUID-vkCmdDrawIndexed-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -070078 "VUID-vkCmdDrawIndexed-None-02697",
79 "VUID-vkCmdDrawIndexed-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -070080 "VUID-vkCmdDrawIndexed-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -060081 "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689",
82 "VUID-vkCmdDrawIndexed-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -070083 "VUID-vkCmdDrawIndexed-None-02692",
84 kVUIDUndefined, // indirect_protected_cb
85 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -060086 kVUIDUndefined, // indirect_buffer_bit
87 "VUID-vkCmdDrawIndexed-viewportCount-03417",
88 "VUID-vkCmdDrawIndexed-scissorCount-03418",
89 "VUID-vkCmdDrawIndexed-viewportCount-03419",
90 "VUID-vkCmdDrawIndexed-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -060091 "VUID-vkCmdDrawIndexed-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -060092 "VUID-vkCmdDrawIndexed-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -060093 "VUID-vkCmdDrawIndexed-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -060094 "VUID-vkCmdDrawIndexed-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -060095 "VUID-vkCmdDrawIndexed-None-02687",
Spencer Fricke507600b2020-03-22 13:23:06 -070096 }},
97 {CMD_DRAWINDIRECT, {
98 "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool",
99 "VUID-vkCmdDrawIndirect-renderpass",
100 "VUID-vkCmdDrawIndirect-None-02700",
101 "VUID-vkCmdDrawIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500102 "VUID-vkCmdDrawIndirect-None-04007",
103 "VUID-vkCmdDrawIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700104 "VUID-vkCmdDrawIndirect-None-02697",
105 "VUID-vkCmdDrawIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700106 "VUID-vkCmdDrawIndirect-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600107 "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689",
108 "VUID-vkCmdDrawIndirect-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700109 "VUID-vkCmdDrawIndirect-None-02692",
110 "VUID-vkCmdDrawIndirect-commandBuffer-02711",
111 "VUID-vkCmdDrawIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600112 "VUID-vkCmdDrawIndirect-buffer-02709",
113 "VUID-vkCmdDrawIndirect-viewportCount-03417",
114 "VUID-vkCmdDrawIndirect-scissorCount-03418",
115 "VUID-vkCmdDrawIndirect-viewportCount-03419",
116 "VUID-vkCmdDrawIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600117 "VUID-vkCmdDrawIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600118 "VUID-vkCmdDrawIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600119 "VUID-vkCmdDrawIndirect-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600120 "VUID-vkCmdDrawIndirect-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600121 "VUID-vkCmdDrawIndirect-None-02687",
Spencer Fricke507600b2020-03-22 13:23:06 -0700122 }},
123 {CMD_DRAWINDEXEDINDIRECT, {
124 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool",
125 "VUID-vkCmdDrawIndexedIndirect-renderpass",
126 "VUID-vkCmdDrawIndexedIndirect-None-02700",
127 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500128 "VUID-vkCmdDrawIndexedIndirect-None-04007",
129 "VUID-vkCmdDrawIndexedIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700130 "VUID-vkCmdDrawIndexedIndirect-None-02697",
131 "VUID-vkCmdDrawIndexedIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700132 "VUID-vkCmdDrawIndexedIndirect-subpass-02685",
Mark Lobodzinski2f084472020-06-18 16:33:57 -0600133 "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600134 "VUID-vkCmdDrawIndexedIndirect-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700135 "VUID-vkCmdDrawIndexedIndirect-None-02692",
136 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711",
137 "VUID-vkCmdDrawIndexedIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600138 "VUID-vkCmdDrawIndexedIndirect-buffer-02709",
139 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417",
140 "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418",
141 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419",
142 "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600143 "VUID-vkCmdDrawIndexedIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600144 "VUID-vkCmdDrawIndexedIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600145 "VUID-vkCmdDrawIndexedIndirect-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600146 "VUID-vkCmdDrawIndexedIndirect-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600147 "VUID-vkCmdDrawIndexedIndirect-None-02687",
Spencer Fricke507600b2020-03-22 13:23:06 -0700148 }},
149 {CMD_DISPATCH, {
150 "VUID-vkCmdDispatch-commandBuffer-cmdpool",
151 "VUID-vkCmdDispatch-renderpass",
152 "VUID-vkCmdDispatch-None-02700",
153 kVUIDUndefined, // dynamic_state
154 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500155 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700156 "VUID-vkCmdDispatch-None-02697",
157 kVUIDUndefined, // render_pass_compatible
158 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700159 kVUIDUndefined, // sample_location
Jeremy Kniagere6827432020-04-01 09:05:56 -0600160 "VUID-vkCmdDispatch-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700161 "VUID-vkCmdDispatch-None-02692",
162 kVUIDUndefined, // indirect_protected_cb
163 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600164 kVUIDUndefined, // indirect_buffer_bit
165 kVUIDUndefined, // viewport_count
166 kVUIDUndefined, // scissor_count
167 kVUIDUndefined, // viewport_scissor_count
168 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600169 "VUID-vkCmdDispatch-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600170 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600171 "VUID-vkCmdDispatch-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600172 "VUID-vkCmdDispatch-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600173 kVUIDUndefined, // image_subresources
Spencer Fricke507600b2020-03-22 13:23:06 -0700174 }},
175 {CMD_DISPATCHINDIRECT, {
176 "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool",
177 "VUID-vkCmdDispatchIndirect-renderpass",
178 "VUID-vkCmdDispatchIndirect-None-02700",
179 kVUIDUndefined, // dynamic_state
180 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500181 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700182 "VUID-vkCmdDispatchIndirect-None-02697",
183 kVUIDUndefined, // render_pass_compatible
184 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700185 kVUIDUndefined, // sample_location
Jeremy Kniagere6827432020-04-01 09:05:56 -0600186 "VUID-vkCmdDispatchIndirect-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700187 "VUID-vkCmdDispatchIndirect-None-02692",
188 "VUID-vkCmdDispatchIndirect-commandBuffer-02711",
189 "VUID-vkCmdDispatchIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600190 "VUID-vkCmdDispatchIndirect-buffer-02709",
191 kVUIDUndefined, // viewport_count
192 kVUIDUndefined, // scissor_count
193 kVUIDUndefined, // viewport_scissor_count
194 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600195 "VUID-vkCmdDispatchIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600196 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600197 "VUID-vkCmdDispatchIndirect-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600198 "VUID-vkCmdDispatchIndirect-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600199 kVUIDUndefined, // image_subresources
Spencer Fricke507600b2020-03-22 13:23:06 -0700200 }},
201 {CMD_DRAWINDIRECTCOUNT, {
202 "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool",
203 "VUID-vkCmdDrawIndirectCount-renderpass",
204 "VUID-vkCmdDrawIndirectCount-None-02700",
205 "VUID-vkCmdDrawIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500206 "VUID-vkCmdDrawIndirectCount-None-04007",
207 "VUID-vkCmdDrawIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700208 "VUID-vkCmdDrawIndirectCount-None-02697",
209 "VUID-vkCmdDrawIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700210 "VUID-vkCmdDrawIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600211 "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689",
212 "VUID-vkCmdDrawIndirectCount-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700213 "VUID-vkCmdDrawIndirectCount-None-02692",
214 "VUID-vkCmdDrawIndirectCount-commandBuffer-02711",
215 "VUID-vkCmdDrawIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600216 "VUID-vkCmdDrawIndirectCount-buffer-02709",
217 "VUID-vkCmdDrawIndirectCount-viewportCount-03417",
218 "VUID-vkCmdDrawIndirectCount-scissorCount-03418",
219 "VUID-vkCmdDrawIndirectCount-viewportCount-03419",
220 "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600221 "VUID-vkCmdDrawIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600222 "VUID-vkCmdDrawIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600223 "VUID-vkCmdDrawIndirectCount-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600224 "VUID-vkCmdDrawIndirectCount-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600225 "VUID-vkCmdDrawIndirectCount-None-02687",
Spencer Fricke507600b2020-03-22 13:23:06 -0700226 }},
227 {CMD_DRAWINDEXEDINDIRECTCOUNT,{
228 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool",
229 "VUID-vkCmdDrawIndexedIndirectCount-renderpass",
230 "VUID-vkCmdDrawIndexedIndirectCount-None-02700",
231 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500232 "VUID-vkCmdDrawIndexedIndirectCount-None-04007",
233 "VUID-vkCmdDrawIndexedIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700234 "VUID-vkCmdDrawIndexedIndirectCount-None-02697",
235 "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700236 "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600237 "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689",
238 "VUID-vkCmdDrawIndexedIndirectCount-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700239 "VUID-vkCmdDrawIndexedIndirectCount-None-02692",
240 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711",
241 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600242 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709",
243 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417",
244 "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418",
245 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419",
246 "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600247 "VUID-vkCmdDrawIndexedIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600248 "VUID-vkCmdDrawIndexedIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600249 "VUID-vkCmdDrawIndexedIndirectCount-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600250 "VUID-vkCmdDrawIndexedIndirectCount-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600251 "VUID-vkCmdDrawIndexedIndirectCount-None-02687",
Spencer Fricke507600b2020-03-22 13:23:06 -0700252 }},
253 {CMD_TRACERAYSNV, {
254 "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool",
255 "VUID-vkCmdTraceRaysNV-renderpass",
256 "VUID-vkCmdTraceRaysNV-None-02700",
257 "VUID-vkCmdTraceRaysNV-commandBuffer-02701",
258 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500259 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700260 "VUID-vkCmdTraceRaysNV-None-02697",
261 kVUIDUndefined, // render_pass_compatible
262 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700263 kVUIDUndefined, // sample_location
Jeremy Kniagere6827432020-04-01 09:05:56 -0600264 "VUID-vkCmdTraceRaysNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700265 "VUID-vkCmdTraceRaysNV-None-02692",
266 kVUIDUndefined, // indirect_protected_cb
267 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600268 kVUIDUndefined, // indirect_buffer_bit
269 kVUIDUndefined, // viewport_count
270 kVUIDUndefined, // scissor_count
271 kVUIDUndefined, // viewport_scissor_count
272 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600273 "VUID-vkCmdTraceRaysNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600274 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600275 "VUID-vkCmdTraceRaysNV-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600276 "VUID-vkCmdTraceRaysNV-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600277 kVUIDUndefined, // image_subresources
Spencer Fricke507600b2020-03-22 13:23:06 -0700278 }},
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500279 {CMD_TRACERAYSKHR, {
280 "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool",
281 "VUID-vkCmdTraceRaysKHR-renderpass",
282 "VUID-vkCmdTraceRaysKHR-None-02700",
283 "VUID-vkCmdTraceRaysKHR-commandBuffer-02701",
284 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500285 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500286 "VUID-vkCmdTraceRaysKHR-None-02697",
287 kVUIDUndefined, // render_pass_compatible
288 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700289 kVUIDUndefined, // sample_location
Jeremy Kniager38162652020-06-25 14:05:03 -0600290 "VUID-vkCmdTraceRaysKHR-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700291 "VUID-vkCmdTraceRaysKHR-None-02692",
292 kVUIDUndefined, // indirect_protected_cb
293 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600294 kVUIDUndefined, // indirect_buffer_bit
295 kVUIDUndefined, // viewport_count
296 kVUIDUndefined, // scissor_count
297 kVUIDUndefined, // viewport_scissor_count
298 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600299 "VUID-vkCmdTraceRaysKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600300 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600301 "VUID-vkCmdTraceRaysKHR-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600302 "VUID-vkCmdTraceRaysKHR-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600303 kVUIDUndefined, // image_subresources
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500304 }},
305 {CMD_TRACERAYSINDIRECTKHR, {
306 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool",
307 "VUID-vkCmdTraceRaysIndirectKHR-renderpass",
308 "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
309 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701",
310 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500311 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500312 "VUID-vkCmdTraceRaysIndirectKHR-None-02697",
313 kVUIDUndefined, // render_pass_compatible
314 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700315 kVUIDUndefined, // sample_location
Jeremy Kniager38162652020-06-25 14:05:03 -0600316 "VUID-vkCmdTraceRaysIndirectKHR-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700317 "VUID-vkCmdTraceRaysIndirectKHR-None-02692",
318 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711",
319 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600320 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02709",
321 kVUIDUndefined, // viewport_count
322 kVUIDUndefined, // scissor_count
323 kVUIDUndefined, // viewport_scissor_count
324 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600325 "VUID-vkCmdTraceRaysIndirectKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600326 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600327 "VUID-vkCmdTraceRaysIndirectKHR-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600328 "VUID-vkCmdTraceRaysIndirectKHR-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600329 kVUIDUndefined, // image_subresources
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500330 }},
Spencer Fricke507600b2020-03-22 13:23:06 -0700331 {CMD_DRAWMESHTASKSNV, {
332 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool",
333 "VUID-vkCmdDrawMeshTasksNV-renderpass",
334 "VUID-vkCmdDrawMeshTasksNV-None-02700",
335 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701",
336 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500337 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700338 "VUID-vkCmdDrawMeshTasksNV-None-02697",
339 "VUID-vkCmdDrawMeshTasksNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700340 "VUID-vkCmdDrawMeshTasksNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600341 "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689",
342 "VUID-vkCmdDrawMeshTasksNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700343 "VUID-vkCmdDrawMeshTasksNV-None-02692",
344 kVUIDUndefined, // indirect_protected_cb
345 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600346 kVUIDUndefined, // indirect_buffer_bit
347 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417",
348 "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418",
349 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419",
350 "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600351 "VUID-vkCmdDrawMeshTasksNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600352 "VUID-vkCmdDrawMeshTasksNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600353 "VUID-vkCmdDrawMeshTasksNV-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600354 "VUID-vkCmdDrawMeshTasksNV-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600355 "VUID-vkCmdDrawMeshTasksNV-None-02687",
Spencer Fricke507600b2020-03-22 13:23:06 -0700356 }},
357 {CMD_DRAWMESHTASKSINDIRECTNV, {
358 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool",
359 "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass",
360 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700",
361 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701",
362 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500363 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700364 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697",
365 "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700366 "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600367 "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689",
368 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700369 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692",
370 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711",
371 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600372 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709",
373 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417",
374 "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418",
375 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419",
376 "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600377 "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600378 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600379 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600380 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600381 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02687",
Spencer Fricke507600b2020-03-22 13:23:06 -0700382 }},
383 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, {
384 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool",
385 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass",
386 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700",
387 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701",
388 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500389 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700390 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697",
391 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700392 "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600393 "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689",
394 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700395 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692",
396 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711",
397 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600398 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709",
399 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417",
400 "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418",
401 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419",
402 "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600403 "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600404 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600405 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600406 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600407 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02687",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600408 }},
409 {CMD_DRAWINDIRECTBYTECOUNTEXT, {
410 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool",
411 "VUID-vkCmdDrawIndirectByteCountEXT-renderpass",
412 "VUID-vkCmdDrawIndirectByteCountEXT-None-02700",
413 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701",
414 "VUID-vkCmdDrawIndirectByteCountEXT-None-04007",
415 "VUID-vkCmdDrawIndirectByteCountEXT-None-04008",
416 "VUID-vkCmdDrawIndirectByteCountEXT-None-02697",
417 "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684",
418 "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685",
419 "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689",
420 "VUID-vkCmdDrawIndirectByteCountEXT-None-02690",
421 "VUID-vkCmdDrawIndirectByteCountEXT-None-02692",
422 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02711",
423 "VUID-vkCmdDrawIndirectByteCountEXT-buffer-02708",
424 "VUID-vkCmdDrawIndirectByteCountEXT-buffer-02709",
425 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417",
426 "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418",
427 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419",
428 "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420",
429 "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696",
430 "VUID-vkCmdDrawIndirectByteCountEXT-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600431 "VUID-vkCmdDrawIndirectByteCountEXT-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600432 "VUID-vkCmdDrawIndirectByteCountEXT-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600433 "VUID-vkCmdDrawIndirectByteCountEXT-None-02687",
locke-lunarg25b6c352020-08-06 17:44:18 -0600434 }},
435 {CMD_DISPATCHBASE, {
436 "VUID-vkCmdDispatchBase-commandBuffer-cmdpool",
437 "VUID-vkCmdDispatchBase-renderpass",
438 "VUID-vkCmdDispatchBase-None-02700",
439 kVUIDUndefined, // dynamic_state
440 kVUIDUndefined, // vertex_binding
441 kVUIDUndefined, // vertex_binding_null
442 "VUID-vkCmdDispatchBase-None-02697",
443 kVUIDUndefined, // render_pass_compatible
444 kVUIDUndefined, // subpass_index
445 kVUIDUndefined, // sample_location
446 "VUID-vkCmdDispatchBase-None-02690",
447 "VUID-vkCmdDispatchBase-None-02692",
448 kVUIDUndefined, // indirect_protected_cb
449 kVUIDUndefined, // indirect_contiguous_memory;
450 kVUIDUndefined, // indirect_buffer_bit
451 kVUIDUndefined, // viewport_count
452 kVUIDUndefined, // scissor_count
453 kVUIDUndefined, // viewport_scissor_count
454 kVUIDUndefined, // primitive_topology
455 "VUID-vkCmdDispatchBase-flags-02696",
456 kVUIDUndefined, // subpass_input
457 "VUID-vkCmdDispatchBase-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600458 "VUID-vkCmdDispatchBase-None-02698",
locke-lunarg540b2252020-08-03 13:23:36 -0600459 kVUIDUndefined, // image_subresources
Spencer Fricke507600b2020-03-22 13:23:06 -0700460 }},
461 // Used if invalid cmd_type is used
Piers Daniell39842ee2020-07-10 16:42:33 -0600462 {CMD_NONE, {
463 kVUIDUndefined,
464 kVUIDUndefined,
465 kVUIDUndefined,
466 kVUIDUndefined,
467 kVUIDUndefined,
468 kVUIDUndefined,
469 kVUIDUndefined,
470 kVUIDUndefined,
471 kVUIDUndefined,
472 kVUIDUndefined,
473 kVUIDUndefined,
474 kVUIDUndefined,
475 kVUIDUndefined,
476 kVUIDUndefined,
477 kVUIDUndefined,
478 kVUIDUndefined,
479 kVUIDUndefined,
480 kVUIDUndefined,
481 kVUIDUndefined,
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600482 kVUIDUndefined,
locke-lunarg25b6c352020-08-06 17:44:18 -0600483 kVUIDUndefined,
484 kVUIDUndefined,
locke-lunargc4fe6b82020-08-08 00:19:51 -0600485 kVUIDUndefined,
locke-lunarg540b2252020-08-03 13:23:36 -0600486 kVUIDUndefined,
Piers Daniell39842ee2020-07-10 16:42:33 -0600487 }}
Spencer Fricke507600b2020-03-22 13:23:06 -0700488};
489// clang-format on
490
491// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
492const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
493 if (drawdispatch_vuid.find(cmd_type) != drawdispatch_vuid.cend()) {
494 return drawdispatch_vuid.at(cmd_type);
495 } else {
496 return drawdispatch_vuid.at(CMD_NONE);
497 }
498}
499
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700500// Generic function to handle validation for all CmdDraw* type functions
501bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700502 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700503 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700504 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600505 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700506 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700507 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700508 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700509 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
510 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
511 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700512 }
513 return skip;
514}
515
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700516bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500517 uint32_t firstVertex, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700518 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700519 VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700520}
521
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700522bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500523 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700524 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700525 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500526 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700527 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
528 unsigned int index_size = 0;
529 const auto &index_buffer_binding = cb_state->index_buffer_binding;
530 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
531 index_size = 2;
532 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
533 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600534 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
535 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700536 }
537 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
538 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700539 skip |=
540 LogError(index_buffer_binding.buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
541 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
542 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
543 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
544 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700545 }
546 }
547 return skip;
548}
549
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700550bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500551 uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700552 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700553 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600554 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700555 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600556 if (count > 1) {
557 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
558 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
559 skip |=
560 ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
561 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), count, offset, buffer_state);
562 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700563 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
564 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
565 return skip;
566}
567
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700568bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500569 uint32_t count, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700570 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
571 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600572 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700573 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600574 if (count > 1) {
575 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
576 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
577 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
578 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), count, offset,
579 buffer_state);
580 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700581 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
582 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
583 // 'buffer'.
584 return skip;
585}
586
Jeff Bolz5c801d12019-10-09 10:38:45 -0500587bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600588 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600589 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700590 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600591 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700592}
593
locke-lunarg25b6c352020-08-06 17:44:18 -0600594bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
595 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
596 uint32_t groupCountZ) const {
597 bool skip = false;
598 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
599 VK_QUEUE_COMPUTE_BIT);
600 return skip;
601}
602
603bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
604 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
605 uint32_t groupCountZ) const {
606 bool skip = false;
607 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
608 VK_QUEUE_COMPUTE_BIT);
609 return skip;
610}
611
Jeff Bolz5c801d12019-10-09 10:38:45 -0500612bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700613 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700614 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700615 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700616 return skip;
617}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700618bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
619 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700620 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700621 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700622 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600623 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700624 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
625 "call this command.",
626 apiName);
627 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700628 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
629 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600630 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600631 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700632 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
633 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700634 }
635
Tony-LunarG83544c72020-01-17 12:30:19 -0700636 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700637 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600638 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700639 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700640 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700641 skip |=
642 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
643 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700644 return skip;
645}
646
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700647bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
648 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
649 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700650 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700651 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700652}
653
654bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
655 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
656 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700657 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700658 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700659}
660
661bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
662 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700663 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700664 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700665 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
Shannon McPherson2c793ba2020-08-28 12:13:24 -0600666 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-None-04445",
sfricke-samsung27c70722020-05-02 08:42:39 -0700667 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
668 "call this command.",
669 apiName);
670 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700671 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
672 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600673 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600674 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800675 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700676 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700677 }
678
sfricke-samsungf692b972020-05-02 08:00:45 -0700679 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
680 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600681 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700682 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700683 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700684 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700685 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800686 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700687 return skip;
688}
689
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700690bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
691 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
692 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700693 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
694 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700695}
696
697bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
698 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
699 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700700 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
701 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700702}
703
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600704bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
705 uint32_t firstInstance, VkBuffer counterBuffer,
706 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
707 uint32_t vertexStride) const {
708 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
709 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
710}
711
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500712bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
713 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
714 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
715 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
716 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
717 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
718 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700719 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
720 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700721 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
722 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
723 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
724 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
725 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
726 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
727 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
728 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
729 }
730 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
731 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
732 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
733 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
734 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
735 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
736 }
737 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
738 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
739 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
740 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100741 " must be less than the size of missShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700742 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
743 }
744 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
745 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
746 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
747 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
baldurk751594b2020-09-09 09:41:02 +0100748 " must be less than the size of raygenShaderBindingTableBuffer %" PRIu64 " .",
sourav parmard1521802020-06-07 21:49:02 -0700749 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
750 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500751 return skip;
752}
753
Jason Macnak67407e72019-07-11 11:05:09 -0700754void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
755 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
756 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
757 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
758 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
759 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
760 uint32_t width, uint32_t height, uint32_t depth) {
761 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600762 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, "vkCmdTraceRaysNV()");
Jason Macnak67407e72019-07-11 11:05:09 -0700763 cb_state->hasTraceRaysCmd = true;
764}
765
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500766bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
767 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
768 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
769 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
770 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
771 uint32_t height, uint32_t depth) const {
772 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
773 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
774 return skip;
775}
776
777void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
778 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
779 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
780 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
781 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
782 uint32_t height, uint32_t depth) {
783 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600784 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, "vkCmdTraceRaysKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500785 cb_state->hasTraceRaysCmd = true;
786}
787
788bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
789 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
790 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
791 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
792 const VkStridedBufferRegionKHR *pCallableShaderBindingTable,
793 VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700794 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500795 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700796 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_TRACERAYSINDIRECTKHR, "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500797 return skip;
798}
799
800void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
801 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
802 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
803 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
804 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, VkBuffer buffer,
805 VkDeviceSize offset) {
806 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
807 BUFFER_STATE *buffer_state = GetBufferState(buffer);
locke-lunarg540b2252020-08-03 13:23:36 -0600808 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
809 "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500810 cb_state->hasTraceRaysCmd = true;
811 AddCommandBufferBindingBuffer(cb_state, buffer_state);
812}
813
Jeff Bolz5c801d12019-10-09 10:38:45 -0500814bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700815 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
816 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700817 return skip;
818}
819
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700820bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500821 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700822 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700823 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600824 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700825 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -0600826 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600827 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
828 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
829 drawCount, offset, buffer_state);
830 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700831 return skip;
832}
833
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700834bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
835 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500836 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700837 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700838 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600839 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
840 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700841 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700842 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -0600843 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700844 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700845 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
846 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -0600847 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
848 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
849 if (maxDrawCount > 1) {
850 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
851 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
852 maxDrawCount, offset, buffer_state);
853 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700854 return skip;
855}