blob: 2b9d8ae86ffecbd3864a491afe0f27b91d59809d [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",
Spencer Fricke507600b2020-03-22 13:23:06 -070068 }},
69 {CMD_DRAWINDEXED, {
70 "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool",
71 "VUID-vkCmdDrawIndexed-renderpass",
72 "VUID-vkCmdDrawIndexed-None-02700",
73 "VUID-vkCmdDrawIndexed-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -050074 "VUID-vkCmdDrawIndexed-None-04007",
75 "VUID-vkCmdDrawIndexed-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -070076 "VUID-vkCmdDrawIndexed-None-02697",
77 "VUID-vkCmdDrawIndexed-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -070078 "VUID-vkCmdDrawIndexed-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -060079 "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689",
80 "VUID-vkCmdDrawIndexed-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -070081 "VUID-vkCmdDrawIndexed-None-02692",
82 kVUIDUndefined, // indirect_protected_cb
83 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -060084 kVUIDUndefined, // indirect_buffer_bit
85 "VUID-vkCmdDrawIndexed-viewportCount-03417",
86 "VUID-vkCmdDrawIndexed-scissorCount-03418",
87 "VUID-vkCmdDrawIndexed-viewportCount-03419",
88 "VUID-vkCmdDrawIndexed-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -060089 "VUID-vkCmdDrawIndexed-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -060090 "VUID-vkCmdDrawIndexed-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -060091 "VUID-vkCmdDrawIndexed-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -070092 }},
93 {CMD_DRAWINDIRECT, {
94 "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool",
95 "VUID-vkCmdDrawIndirect-renderpass",
96 "VUID-vkCmdDrawIndirect-None-02700",
97 "VUID-vkCmdDrawIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -050098 "VUID-vkCmdDrawIndirect-None-04007",
99 "VUID-vkCmdDrawIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700100 "VUID-vkCmdDrawIndirect-None-02697",
101 "VUID-vkCmdDrawIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700102 "VUID-vkCmdDrawIndirect-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600103 "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689",
104 "VUID-vkCmdDrawIndirect-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700105 "VUID-vkCmdDrawIndirect-None-02692",
106 "VUID-vkCmdDrawIndirect-commandBuffer-02711",
107 "VUID-vkCmdDrawIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600108 "VUID-vkCmdDrawIndirect-buffer-02709",
109 "VUID-vkCmdDrawIndirect-viewportCount-03417",
110 "VUID-vkCmdDrawIndirect-scissorCount-03418",
111 "VUID-vkCmdDrawIndirect-viewportCount-03419",
112 "VUID-vkCmdDrawIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600113 "VUID-vkCmdDrawIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600114 "VUID-vkCmdDrawIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600115 "VUID-vkCmdDrawIndirect-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700116 }},
117 {CMD_DRAWINDEXEDINDIRECT, {
118 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool",
119 "VUID-vkCmdDrawIndexedIndirect-renderpass",
120 "VUID-vkCmdDrawIndexedIndirect-None-02700",
121 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500122 "VUID-vkCmdDrawIndexedIndirect-None-04007",
123 "VUID-vkCmdDrawIndexedIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700124 "VUID-vkCmdDrawIndexedIndirect-None-02697",
125 "VUID-vkCmdDrawIndexedIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700126 "VUID-vkCmdDrawIndexedIndirect-subpass-02685",
Mark Lobodzinski2f084472020-06-18 16:33:57 -0600127 "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600128 "VUID-vkCmdDrawIndexedIndirect-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700129 "VUID-vkCmdDrawIndexedIndirect-None-02692",
130 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711",
131 "VUID-vkCmdDrawIndexedIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600132 "VUID-vkCmdDrawIndexedIndirect-buffer-02709",
133 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417",
134 "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418",
135 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419",
136 "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600137 "VUID-vkCmdDrawIndexedIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600138 "VUID-vkCmdDrawIndexedIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600139 "VUID-vkCmdDrawIndexedIndirect-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700140 }},
141 {CMD_DISPATCH, {
142 "VUID-vkCmdDispatch-commandBuffer-cmdpool",
143 "VUID-vkCmdDispatch-renderpass",
144 "VUID-vkCmdDispatch-None-02700",
145 kVUIDUndefined, // dynamic_state
146 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500147 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700148 "VUID-vkCmdDispatch-None-02697",
149 kVUIDUndefined, // render_pass_compatible
150 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700151 kVUIDUndefined, // sample_location
Jeremy Kniagere6827432020-04-01 09:05:56 -0600152 "VUID-vkCmdDispatch-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700153 "VUID-vkCmdDispatch-None-02692",
154 kVUIDUndefined, // indirect_protected_cb
155 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600156 kVUIDUndefined, // indirect_buffer_bit
157 kVUIDUndefined, // viewport_count
158 kVUIDUndefined, // scissor_count
159 kVUIDUndefined, // viewport_scissor_count
160 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600161 "VUID-vkCmdDispatch-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600162 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600163 "VUID-vkCmdDispatch-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700164 }},
165 {CMD_DISPATCHINDIRECT, {
166 "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool",
167 "VUID-vkCmdDispatchIndirect-renderpass",
168 "VUID-vkCmdDispatchIndirect-None-02700",
169 kVUIDUndefined, // dynamic_state
170 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500171 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700172 "VUID-vkCmdDispatchIndirect-None-02697",
173 kVUIDUndefined, // render_pass_compatible
174 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700175 kVUIDUndefined, // sample_location
Jeremy Kniagere6827432020-04-01 09:05:56 -0600176 "VUID-vkCmdDispatchIndirect-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700177 "VUID-vkCmdDispatchIndirect-None-02692",
178 "VUID-vkCmdDispatchIndirect-commandBuffer-02711",
179 "VUID-vkCmdDispatchIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600180 "VUID-vkCmdDispatchIndirect-buffer-02709",
181 kVUIDUndefined, // viewport_count
182 kVUIDUndefined, // scissor_count
183 kVUIDUndefined, // viewport_scissor_count
184 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600185 "VUID-vkCmdDispatchIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600186 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600187 "VUID-vkCmdDispatchIndirect-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700188 }},
189 {CMD_DRAWINDIRECTCOUNT, {
190 "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool",
191 "VUID-vkCmdDrawIndirectCount-renderpass",
192 "VUID-vkCmdDrawIndirectCount-None-02700",
193 "VUID-vkCmdDrawIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500194 "VUID-vkCmdDrawIndirectCount-None-04007",
195 "VUID-vkCmdDrawIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700196 "VUID-vkCmdDrawIndirectCount-None-02697",
197 "VUID-vkCmdDrawIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700198 "VUID-vkCmdDrawIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600199 "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689",
200 "VUID-vkCmdDrawIndirectCount-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700201 "VUID-vkCmdDrawIndirectCount-None-02692",
202 "VUID-vkCmdDrawIndirectCount-commandBuffer-02711",
203 "VUID-vkCmdDrawIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600204 "VUID-vkCmdDrawIndirectCount-buffer-02709",
205 "VUID-vkCmdDrawIndirectCount-viewportCount-03417",
206 "VUID-vkCmdDrawIndirectCount-scissorCount-03418",
207 "VUID-vkCmdDrawIndirectCount-viewportCount-03419",
208 "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600209 "VUID-vkCmdDrawIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600210 "VUID-vkCmdDrawIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600211 "VUID-vkCmdDrawIndirectCount-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700212 }},
213 {CMD_DRAWINDEXEDINDIRECTCOUNT,{
214 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool",
215 "VUID-vkCmdDrawIndexedIndirectCount-renderpass",
216 "VUID-vkCmdDrawIndexedIndirectCount-None-02700",
217 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500218 "VUID-vkCmdDrawIndexedIndirectCount-None-04007",
219 "VUID-vkCmdDrawIndexedIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700220 "VUID-vkCmdDrawIndexedIndirectCount-None-02697",
221 "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700222 "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600223 "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689",
224 "VUID-vkCmdDrawIndexedIndirectCount-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700225 "VUID-vkCmdDrawIndexedIndirectCount-None-02692",
226 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711",
227 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600228 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709",
229 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417",
230 "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418",
231 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419",
232 "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600233 "VUID-vkCmdDrawIndexedIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600234 "VUID-vkCmdDrawIndexedIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600235 "VUID-vkCmdDrawIndexedIndirectCount-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700236 }},
237 {CMD_TRACERAYSNV, {
238 "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool",
239 "VUID-vkCmdTraceRaysNV-renderpass",
240 "VUID-vkCmdTraceRaysNV-None-02700",
241 "VUID-vkCmdTraceRaysNV-commandBuffer-02701",
242 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500243 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700244 "VUID-vkCmdTraceRaysNV-None-02697",
245 kVUIDUndefined, // render_pass_compatible
246 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700247 kVUIDUndefined, // sample_location
Jeremy Kniagere6827432020-04-01 09:05:56 -0600248 "VUID-vkCmdTraceRaysNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700249 "VUID-vkCmdTraceRaysNV-None-02692",
250 kVUIDUndefined, // indirect_protected_cb
251 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600252 kVUIDUndefined, // indirect_buffer_bit
253 kVUIDUndefined, // viewport_count
254 kVUIDUndefined, // scissor_count
255 kVUIDUndefined, // viewport_scissor_count
256 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600257 "VUID-vkCmdTraceRaysNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600258 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600259 "VUID-vkCmdTraceRaysNV-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700260 }},
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500261 {CMD_TRACERAYSKHR, {
262 "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool",
263 "VUID-vkCmdTraceRaysKHR-renderpass",
264 "VUID-vkCmdTraceRaysKHR-None-02700",
265 "VUID-vkCmdTraceRaysKHR-commandBuffer-02701",
266 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500267 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500268 "VUID-vkCmdTraceRaysKHR-None-02697",
269 kVUIDUndefined, // render_pass_compatible
270 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700271 kVUIDUndefined, // sample_location
Jeremy Kniager38162652020-06-25 14:05:03 -0600272 "VUID-vkCmdTraceRaysKHR-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700273 "VUID-vkCmdTraceRaysKHR-None-02692",
274 kVUIDUndefined, // indirect_protected_cb
275 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600276 kVUIDUndefined, // indirect_buffer_bit
277 kVUIDUndefined, // viewport_count
278 kVUIDUndefined, // scissor_count
279 kVUIDUndefined, // viewport_scissor_count
280 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600281 "VUID-vkCmdTraceRaysKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600282 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600283 "VUID-vkCmdTraceRaysKHR-None-02691",
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500284 }},
285 {CMD_TRACERAYSINDIRECTKHR, {
286 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool",
287 "VUID-vkCmdTraceRaysIndirectKHR-renderpass",
288 "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
289 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701",
290 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500291 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500292 "VUID-vkCmdTraceRaysIndirectKHR-None-02697",
293 kVUIDUndefined, // render_pass_compatible
294 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700295 kVUIDUndefined, // sample_location
Jeremy Kniager38162652020-06-25 14:05:03 -0600296 "VUID-vkCmdTraceRaysIndirectKHR-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700297 "VUID-vkCmdTraceRaysIndirectKHR-None-02692",
298 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711",
299 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600300 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02709",
301 kVUIDUndefined, // viewport_count
302 kVUIDUndefined, // scissor_count
303 kVUIDUndefined, // viewport_scissor_count
304 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600305 "VUID-vkCmdTraceRaysIndirectKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600306 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600307 "VUID-vkCmdTraceRaysIndirectKHR-None-02691",
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500308 }},
Spencer Fricke507600b2020-03-22 13:23:06 -0700309 {CMD_DRAWMESHTASKSNV, {
310 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool",
311 "VUID-vkCmdDrawMeshTasksNV-renderpass",
312 "VUID-vkCmdDrawMeshTasksNV-None-02700",
313 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701",
314 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500315 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700316 "VUID-vkCmdDrawMeshTasksNV-None-02697",
317 "VUID-vkCmdDrawMeshTasksNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700318 "VUID-vkCmdDrawMeshTasksNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600319 "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689",
320 "VUID-vkCmdDrawMeshTasksNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700321 "VUID-vkCmdDrawMeshTasksNV-None-02692",
322 kVUIDUndefined, // indirect_protected_cb
323 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600324 kVUIDUndefined, // indirect_buffer_bit
325 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417",
326 "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418",
327 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419",
328 "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600329 "VUID-vkCmdDrawMeshTasksNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600330 "VUID-vkCmdDrawMeshTasksNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600331 "VUID-vkCmdDrawMeshTasksNV-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700332 }},
333 {CMD_DRAWMESHTASKSINDIRECTNV, {
334 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool",
335 "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass",
336 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700",
337 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701",
338 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500339 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700340 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697",
341 "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700342 "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600343 "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689",
344 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700345 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692",
346 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711",
347 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600348 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709",
349 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417",
350 "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418",
351 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419",
352 "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600353 "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600354 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600355 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700356 }},
357 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, {
358 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool",
359 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass",
360 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700",
361 "VUID-vkCmdDrawMeshTasksIndirectCountNV-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-vkCmdDrawMeshTasksIndirectCountNV-None-02697",
365 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700366 "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600367 "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689",
368 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700369 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692",
370 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711",
371 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600372 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709",
373 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417",
374 "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418",
375 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419",
376 "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600377 "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600378 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600379 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600380 }},
381 {CMD_DRAWINDIRECTBYTECOUNTEXT, {
382 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool",
383 "VUID-vkCmdDrawIndirectByteCountEXT-renderpass",
384 "VUID-vkCmdDrawIndirectByteCountEXT-None-02700",
385 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701",
386 "VUID-vkCmdDrawIndirectByteCountEXT-None-04007",
387 "VUID-vkCmdDrawIndirectByteCountEXT-None-04008",
388 "VUID-vkCmdDrawIndirectByteCountEXT-None-02697",
389 "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684",
390 "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685",
391 "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689",
392 "VUID-vkCmdDrawIndirectByteCountEXT-None-02690",
393 "VUID-vkCmdDrawIndirectByteCountEXT-None-02692",
394 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02711",
395 "VUID-vkCmdDrawIndirectByteCountEXT-buffer-02708",
396 "VUID-vkCmdDrawIndirectByteCountEXT-buffer-02709",
397 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417",
398 "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418",
399 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419",
400 "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420",
401 "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696",
402 "VUID-vkCmdDrawIndirectByteCountEXT-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600403 "VUID-vkCmdDrawIndirectByteCountEXT-None-02691",
404 }},
405 {CMD_DISPATCHBASE, {
406 "VUID-vkCmdDispatchBase-commandBuffer-cmdpool",
407 "VUID-vkCmdDispatchBase-renderpass",
408 "VUID-vkCmdDispatchBase-None-02700",
409 kVUIDUndefined, // dynamic_state
410 kVUIDUndefined, // vertex_binding
411 kVUIDUndefined, // vertex_binding_null
412 "VUID-vkCmdDispatchBase-None-02697",
413 kVUIDUndefined, // render_pass_compatible
414 kVUIDUndefined, // subpass_index
415 kVUIDUndefined, // sample_location
416 "VUID-vkCmdDispatchBase-None-02690",
417 "VUID-vkCmdDispatchBase-None-02692",
418 kVUIDUndefined, // indirect_protected_cb
419 kVUIDUndefined, // indirect_contiguous_memory;
420 kVUIDUndefined, // indirect_buffer_bit
421 kVUIDUndefined, // viewport_count
422 kVUIDUndefined, // scissor_count
423 kVUIDUndefined, // viewport_scissor_count
424 kVUIDUndefined, // primitive_topology
425 "VUID-vkCmdDispatchBase-flags-02696",
426 kVUIDUndefined, // subpass_input
427 "VUID-vkCmdDispatchBase-None-02691",
Spencer Fricke507600b2020-03-22 13:23:06 -0700428 }},
429 // Used if invalid cmd_type is used
Piers Daniell39842ee2020-07-10 16:42:33 -0600430 {CMD_NONE, {
431 kVUIDUndefined,
432 kVUIDUndefined,
433 kVUIDUndefined,
434 kVUIDUndefined,
435 kVUIDUndefined,
436 kVUIDUndefined,
437 kVUIDUndefined,
438 kVUIDUndefined,
439 kVUIDUndefined,
440 kVUIDUndefined,
441 kVUIDUndefined,
442 kVUIDUndefined,
443 kVUIDUndefined,
444 kVUIDUndefined,
445 kVUIDUndefined,
446 kVUIDUndefined,
447 kVUIDUndefined,
448 kVUIDUndefined,
449 kVUIDUndefined,
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600450 kVUIDUndefined,
locke-lunarg25b6c352020-08-06 17:44:18 -0600451 kVUIDUndefined,
452 kVUIDUndefined,
Piers Daniell39842ee2020-07-10 16:42:33 -0600453 }}
Spencer Fricke507600b2020-03-22 13:23:06 -0700454};
455// clang-format on
456
457// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
458const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
459 if (drawdispatch_vuid.find(cmd_type) != drawdispatch_vuid.cend()) {
460 return drawdispatch_vuid.at(cmd_type);
461 } else {
462 return drawdispatch_vuid.at(CMD_NONE);
463 }
464}
465
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700466// Generic function to handle validation for all CmdDraw* type functions
467bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700468 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700469 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700470 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600471 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700472 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700473 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700474 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700475 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
476 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
477 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700478 }
479 return skip;
480}
481
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700482bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500483 uint32_t firstVertex, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700484 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700485 VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700486}
487
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700488bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500489 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700490 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700491 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500492 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700493 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
494 unsigned int index_size = 0;
495 const auto &index_buffer_binding = cb_state->index_buffer_binding;
496 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
497 index_size = 2;
498 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
499 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600500 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
501 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700502 }
503 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
504 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700505 skip |=
506 LogError(index_buffer_binding.buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
507 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
508 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
509 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
510 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700511 }
512 }
513 return skip;
514}
515
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700516bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500517 uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700518 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700519 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600520 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700521 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600522 if (count > 1) {
523 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
524 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
525 skip |=
526 ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
527 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), count, offset, buffer_state);
528 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700529 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
530 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
531 return skip;
532}
533
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700534bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500535 uint32_t count, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700536 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
537 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600538 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700539 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600540 if (count > 1) {
541 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
542 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
543 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
544 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), count, offset,
545 buffer_state);
546 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700547 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
548 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
549 // 'buffer'.
550 return skip;
551}
552
Jeff Bolz5c801d12019-10-09 10:38:45 -0500553bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600554 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600555 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700556 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600557 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700558}
559
locke-lunarg25b6c352020-08-06 17:44:18 -0600560bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
561 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
562 uint32_t groupCountZ) const {
563 bool skip = false;
564 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
565 VK_QUEUE_COMPUTE_BIT);
566 return skip;
567}
568
569bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
570 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
571 uint32_t groupCountZ) const {
572 bool skip = false;
573 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
574 VK_QUEUE_COMPUTE_BIT);
575 return skip;
576}
577
Jeff Bolz5c801d12019-10-09 10:38:45 -0500578bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700579 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700580 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700581 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700582 return skip;
583}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700584bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
585 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700586 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700587 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700588 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
589 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-02836",
590 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
591 "call this command.",
592 apiName);
593 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700594 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
595 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600596 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600597 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700598 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
599 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700600 }
601
Tony-LunarG83544c72020-01-17 12:30:19 -0700602 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700603 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600604 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700605 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700606 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700607 skip |=
608 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
609 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700610 return skip;
611}
612
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700613bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
614 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
615 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700616 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700617 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700618}
619
620bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
621 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
622 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700623 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700624 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700625}
626
627bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
628 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700629 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700630 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700631 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
632 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-None-02837",
633 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
634 "call this command.",
635 apiName);
636 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700637 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
638 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600639 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600640 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800641 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700642 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700643 }
644
sfricke-samsungf692b972020-05-02 08:00:45 -0700645 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
646 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600647 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700648 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700649 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700650 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700651 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800652 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700653 return skip;
654}
655
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700656bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
657 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
658 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700659 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
660 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700661}
662
663bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
664 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
665 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700666 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
667 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700668}
669
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600670bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
671 uint32_t firstInstance, VkBuffer counterBuffer,
672 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
673 uint32_t vertexStride) const {
674 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
675 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
676}
677
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500678bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
679 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
680 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
681 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
682 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
683 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
684 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700685 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
686 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700687 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
688 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
689 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
690 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
691 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
692 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
693 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
694 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
695 }
696 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
697 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
698 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
699 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
700 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
701 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
702 }
703 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
704 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
705 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
706 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
707 " must be less than the size of missShaderBindingTableBuffer" PRIu64 " .",
708 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
709 }
710 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
711 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
712 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
713 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
714 " must be less than the size of raygenShaderBindingTableBuffer" PRIu64 " .",
715 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
716 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500717 return skip;
718}
719
Jason Macnak67407e72019-07-11 11:05:09 -0700720void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
721 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
722 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
723 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
724 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
725 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
726 uint32_t width, uint32_t height, uint32_t depth) {
727 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jeremy Kniager05631e72020-06-08 14:21:35 -0600728 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
Jason Macnak67407e72019-07-11 11:05:09 -0700729 cb_state->hasTraceRaysCmd = true;
730}
731
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500732bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
733 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
734 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
735 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
736 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
737 uint32_t height, uint32_t depth) const {
738 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
739 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
740 return skip;
741}
742
743void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
744 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
745 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
746 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
747 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
748 uint32_t height, uint32_t depth) {
749 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jeremy Kniager05631e72020-06-08 14:21:35 -0600750 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500751 cb_state->hasTraceRaysCmd = true;
752}
753
754bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
755 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
756 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
757 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
758 const VkStridedBufferRegionKHR *pCallableShaderBindingTable,
759 VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700760 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500761 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700762 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_TRACERAYSINDIRECTKHR, "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500763 return skip;
764}
765
766void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
767 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
768 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
769 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
770 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, VkBuffer buffer,
771 VkDeviceSize offset) {
772 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
773 BUFFER_STATE *buffer_state = GetBufferState(buffer);
Jeremy Kniager05631e72020-06-08 14:21:35 -0600774 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500775 cb_state->hasTraceRaysCmd = true;
776 AddCommandBufferBindingBuffer(cb_state, buffer_state);
777}
778
Jeff Bolz5c801d12019-10-09 10:38:45 -0500779bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700780 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
781 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700782 return skip;
783}
784
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700785bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500786 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700787 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700788 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600789 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700790 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -0600791 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600792 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
793 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
794 drawCount, offset, buffer_state);
795 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700796 return skip;
797}
798
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700799bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
800 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500801 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700802 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700803 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600804 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
805 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700806 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700807 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -0600808 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700809 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700810 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
811 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -0600812 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
813 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
814 if (maxDrawCount > 1) {
815 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
816 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
817 maxDrawCount, offset, buffer_state);
818 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700819 return skip;
820}