blob: f4d8b41aa79b982636a13f5dc86e7f9ae9acc915 [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",
Spencer Fricke507600b2020-03-22 13:23:06 -070069 }},
70 {CMD_DRAWINDEXED, {
71 "VUID-vkCmdDrawIndexed-commandBuffer-cmdpool",
72 "VUID-vkCmdDrawIndexed-renderpass",
73 "VUID-vkCmdDrawIndexed-None-02700",
74 "VUID-vkCmdDrawIndexed-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -050075 "VUID-vkCmdDrawIndexed-None-04007",
76 "VUID-vkCmdDrawIndexed-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -070077 "VUID-vkCmdDrawIndexed-None-02697",
78 "VUID-vkCmdDrawIndexed-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -070079 "VUID-vkCmdDrawIndexed-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -060080 "VUID-vkCmdDrawIndexed-sampleLocationsEnable-02689",
81 "VUID-vkCmdDrawIndexed-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -070082 "VUID-vkCmdDrawIndexed-None-02692",
83 kVUIDUndefined, // indirect_protected_cb
84 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -060085 kVUIDUndefined, // indirect_buffer_bit
86 "VUID-vkCmdDrawIndexed-viewportCount-03417",
87 "VUID-vkCmdDrawIndexed-scissorCount-03418",
88 "VUID-vkCmdDrawIndexed-viewportCount-03419",
89 "VUID-vkCmdDrawIndexed-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -060090 "VUID-vkCmdDrawIndexed-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -060091 "VUID-vkCmdDrawIndexed-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -060092 "VUID-vkCmdDrawIndexed-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -060093 "VUID-vkCmdDrawIndexed-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -070094 }},
95 {CMD_DRAWINDIRECT, {
96 "VUID-vkCmdDrawIndirect-commandBuffer-cmdpool",
97 "VUID-vkCmdDrawIndirect-renderpass",
98 "VUID-vkCmdDrawIndirect-None-02700",
99 "VUID-vkCmdDrawIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500100 "VUID-vkCmdDrawIndirect-None-04007",
101 "VUID-vkCmdDrawIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700102 "VUID-vkCmdDrawIndirect-None-02697",
103 "VUID-vkCmdDrawIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700104 "VUID-vkCmdDrawIndirect-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600105 "VUID-vkCmdDrawIndirect-sampleLocationsEnable-02689",
106 "VUID-vkCmdDrawIndirect-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700107 "VUID-vkCmdDrawIndirect-None-02692",
108 "VUID-vkCmdDrawIndirect-commandBuffer-02711",
109 "VUID-vkCmdDrawIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600110 "VUID-vkCmdDrawIndirect-buffer-02709",
111 "VUID-vkCmdDrawIndirect-viewportCount-03417",
112 "VUID-vkCmdDrawIndirect-scissorCount-03418",
113 "VUID-vkCmdDrawIndirect-viewportCount-03419",
114 "VUID-vkCmdDrawIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600115 "VUID-vkCmdDrawIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600116 "VUID-vkCmdDrawIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600117 "VUID-vkCmdDrawIndirect-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600118 "VUID-vkCmdDrawIndirect-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700119 }},
120 {CMD_DRAWINDEXEDINDIRECT, {
121 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-cmdpool",
122 "VUID-vkCmdDrawIndexedIndirect-renderpass",
123 "VUID-vkCmdDrawIndexedIndirect-None-02700",
124 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500125 "VUID-vkCmdDrawIndexedIndirect-None-04007",
126 "VUID-vkCmdDrawIndexedIndirect-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700127 "VUID-vkCmdDrawIndexedIndirect-None-02697",
128 "VUID-vkCmdDrawIndexedIndirect-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700129 "VUID-vkCmdDrawIndexedIndirect-subpass-02685",
Mark Lobodzinski2f084472020-06-18 16:33:57 -0600130 "VUID-vkCmdDrawIndexedIndirect-sampleLocationsEnable-02689",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600131 "VUID-vkCmdDrawIndexedIndirect-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700132 "VUID-vkCmdDrawIndexedIndirect-None-02692",
133 "VUID-vkCmdDrawIndexedIndirect-commandBuffer-02711",
134 "VUID-vkCmdDrawIndexedIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600135 "VUID-vkCmdDrawIndexedIndirect-buffer-02709",
136 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03417",
137 "VUID-vkCmdDrawIndexedIndirect-scissorCount-03418",
138 "VUID-vkCmdDrawIndexedIndirect-viewportCount-03419",
139 "VUID-vkCmdDrawIndexedIndirect-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600140 "VUID-vkCmdDrawIndexedIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600141 "VUID-vkCmdDrawIndexedIndirect-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600142 "VUID-vkCmdDrawIndexedIndirect-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600143 "VUID-vkCmdDrawIndexedIndirect-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700144 }},
145 {CMD_DISPATCH, {
146 "VUID-vkCmdDispatch-commandBuffer-cmdpool",
147 "VUID-vkCmdDispatch-renderpass",
148 "VUID-vkCmdDispatch-None-02700",
149 kVUIDUndefined, // dynamic_state
150 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500151 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700152 "VUID-vkCmdDispatch-None-02697",
153 kVUIDUndefined, // render_pass_compatible
154 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700155 kVUIDUndefined, // sample_location
Jeremy Kniagere6827432020-04-01 09:05:56 -0600156 "VUID-vkCmdDispatch-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700157 "VUID-vkCmdDispatch-None-02692",
158 kVUIDUndefined, // indirect_protected_cb
159 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600160 kVUIDUndefined, // indirect_buffer_bit
161 kVUIDUndefined, // viewport_count
162 kVUIDUndefined, // scissor_count
163 kVUIDUndefined, // viewport_scissor_count
164 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600165 "VUID-vkCmdDispatch-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600166 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600167 "VUID-vkCmdDispatch-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600168 "VUID-vkCmdDispatch-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700169 }},
170 {CMD_DISPATCHINDIRECT, {
171 "VUID-vkCmdDispatchIndirect-commandBuffer-cmdpool",
172 "VUID-vkCmdDispatchIndirect-renderpass",
173 "VUID-vkCmdDispatchIndirect-None-02700",
174 kVUIDUndefined, // dynamic_state
175 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500176 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700177 "VUID-vkCmdDispatchIndirect-None-02697",
178 kVUIDUndefined, // render_pass_compatible
179 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700180 kVUIDUndefined, // sample_location
Jeremy Kniagere6827432020-04-01 09:05:56 -0600181 "VUID-vkCmdDispatchIndirect-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700182 "VUID-vkCmdDispatchIndirect-None-02692",
183 "VUID-vkCmdDispatchIndirect-commandBuffer-02711",
184 "VUID-vkCmdDispatchIndirect-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600185 "VUID-vkCmdDispatchIndirect-buffer-02709",
186 kVUIDUndefined, // viewport_count
187 kVUIDUndefined, // scissor_count
188 kVUIDUndefined, // viewport_scissor_count
189 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600190 "VUID-vkCmdDispatchIndirect-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600191 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600192 "VUID-vkCmdDispatchIndirect-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600193 "VUID-vkCmdDispatchIndirect-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700194 }},
195 {CMD_DRAWINDIRECTCOUNT, {
196 "VUID-vkCmdDrawIndirectCount-commandBuffer-cmdpool",
197 "VUID-vkCmdDrawIndirectCount-renderpass",
198 "VUID-vkCmdDrawIndirectCount-None-02700",
199 "VUID-vkCmdDrawIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500200 "VUID-vkCmdDrawIndirectCount-None-04007",
201 "VUID-vkCmdDrawIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700202 "VUID-vkCmdDrawIndirectCount-None-02697",
203 "VUID-vkCmdDrawIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700204 "VUID-vkCmdDrawIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600205 "VUID-vkCmdDrawIndirectCount-sampleLocationsEnable-02689",
206 "VUID-vkCmdDrawIndirectCount-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700207 "VUID-vkCmdDrawIndirectCount-None-02692",
208 "VUID-vkCmdDrawIndirectCount-commandBuffer-02711",
209 "VUID-vkCmdDrawIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600210 "VUID-vkCmdDrawIndirectCount-buffer-02709",
211 "VUID-vkCmdDrawIndirectCount-viewportCount-03417",
212 "VUID-vkCmdDrawIndirectCount-scissorCount-03418",
213 "VUID-vkCmdDrawIndirectCount-viewportCount-03419",
214 "VUID-vkCmdDrawIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600215 "VUID-vkCmdDrawIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600216 "VUID-vkCmdDrawIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600217 "VUID-vkCmdDrawIndirectCount-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600218 "VUID-vkCmdDrawIndirectCount-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700219 }},
220 {CMD_DRAWINDEXEDINDIRECTCOUNT,{
221 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-cmdpool",
222 "VUID-vkCmdDrawIndexedIndirectCount-renderpass",
223 "VUID-vkCmdDrawIndexedIndirectCount-None-02700",
224 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02701",
Jeff Bolz165818a2020-05-08 11:19:03 -0500225 "VUID-vkCmdDrawIndexedIndirectCount-None-04007",
226 "VUID-vkCmdDrawIndexedIndirectCount-None-04008",
Spencer Fricke507600b2020-03-22 13:23:06 -0700227 "VUID-vkCmdDrawIndexedIndirectCount-None-02697",
228 "VUID-vkCmdDrawIndexedIndirectCount-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700229 "VUID-vkCmdDrawIndexedIndirectCount-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600230 "VUID-vkCmdDrawIndexedIndirectCount-sampleLocationsEnable-02689",
231 "VUID-vkCmdDrawIndexedIndirectCount-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700232 "VUID-vkCmdDrawIndexedIndirectCount-None-02692",
233 "VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-02711",
234 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600235 "VUID-vkCmdDrawIndexedIndirectCount-buffer-02709",
236 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03417",
237 "VUID-vkCmdDrawIndexedIndirectCount-scissorCount-03418",
238 "VUID-vkCmdDrawIndexedIndirectCount-viewportCount-03419",
239 "VUID-vkCmdDrawIndexedIndirectCount-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600240 "VUID-vkCmdDrawIndexedIndirectCount-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600241 "VUID-vkCmdDrawIndexedIndirectCount-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600242 "VUID-vkCmdDrawIndexedIndirectCount-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600243 "VUID-vkCmdDrawIndexedIndirectCount-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700244 }},
245 {CMD_TRACERAYSNV, {
246 "VUID-vkCmdTraceRaysNV-commandBuffer-cmdpool",
247 "VUID-vkCmdTraceRaysNV-renderpass",
248 "VUID-vkCmdTraceRaysNV-None-02700",
249 "VUID-vkCmdTraceRaysNV-commandBuffer-02701",
250 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500251 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700252 "VUID-vkCmdTraceRaysNV-None-02697",
253 kVUIDUndefined, // render_pass_compatible
254 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700255 kVUIDUndefined, // sample_location
Jeremy Kniagere6827432020-04-01 09:05:56 -0600256 "VUID-vkCmdTraceRaysNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700257 "VUID-vkCmdTraceRaysNV-None-02692",
258 kVUIDUndefined, // indirect_protected_cb
259 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600260 kVUIDUndefined, // indirect_buffer_bit
261 kVUIDUndefined, // viewport_count
262 kVUIDUndefined, // scissor_count
263 kVUIDUndefined, // viewport_scissor_count
264 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600265 "VUID-vkCmdTraceRaysNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600266 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600267 "VUID-vkCmdTraceRaysNV-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600268 "VUID-vkCmdTraceRaysNV-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700269 }},
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500270 {CMD_TRACERAYSKHR, {
271 "VUID-vkCmdTraceRaysKHR-commandBuffer-cmdpool",
272 "VUID-vkCmdTraceRaysKHR-renderpass",
273 "VUID-vkCmdTraceRaysKHR-None-02700",
274 "VUID-vkCmdTraceRaysKHR-commandBuffer-02701",
275 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500276 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500277 "VUID-vkCmdTraceRaysKHR-None-02697",
278 kVUIDUndefined, // render_pass_compatible
279 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700280 kVUIDUndefined, // sample_location
Jeremy Kniager38162652020-06-25 14:05:03 -0600281 "VUID-vkCmdTraceRaysKHR-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700282 "VUID-vkCmdTraceRaysKHR-None-02692",
283 kVUIDUndefined, // indirect_protected_cb
284 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600285 kVUIDUndefined, // indirect_buffer_bit
286 kVUIDUndefined, // viewport_count
287 kVUIDUndefined, // scissor_count
288 kVUIDUndefined, // viewport_scissor_count
289 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600290 "VUID-vkCmdTraceRaysKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600291 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600292 "VUID-vkCmdTraceRaysKHR-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600293 "VUID-vkCmdTraceRaysKHR-None-02698",
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500294 }},
295 {CMD_TRACERAYSINDIRECTKHR, {
296 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-cmdpool",
297 "VUID-vkCmdTraceRaysIndirectKHR-renderpass",
298 "VUID-vkCmdTraceRaysIndirectKHR-None-02700",
299 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02701",
300 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500301 kVUIDUndefined, // vertex_binding_null
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500302 "VUID-vkCmdTraceRaysIndirectKHR-None-02697",
303 kVUIDUndefined, // render_pass_compatible
304 kVUIDUndefined, // subpass_index
sfricke-samsung8f658d42020-05-03 20:12:24 -0700305 kVUIDUndefined, // sample_location
Jeremy Kniager38162652020-06-25 14:05:03 -0600306 "VUID-vkCmdTraceRaysIndirectKHR-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700307 "VUID-vkCmdTraceRaysIndirectKHR-None-02692",
308 "VUID-vkCmdTraceRaysIndirectKHR-commandBuffer-02711",
309 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600310 "VUID-vkCmdTraceRaysIndirectKHR-buffer-02709",
311 kVUIDUndefined, // viewport_count
312 kVUIDUndefined, // scissor_count
313 kVUIDUndefined, // viewport_scissor_count
314 kVUIDUndefined, // primitive_topology
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600315 "VUID-vkCmdTraceRaysIndirectKHR-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600316 kVUIDUndefined, // subpass_input
locke-lunarg25b6c352020-08-06 17:44:18 -0600317 "VUID-vkCmdTraceRaysIndirectKHR-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600318 "VUID-vkCmdTraceRaysIndirectKHR-None-02698",
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500319 }},
Spencer Fricke507600b2020-03-22 13:23:06 -0700320 {CMD_DRAWMESHTASKSNV, {
321 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-cmdpool",
322 "VUID-vkCmdDrawMeshTasksNV-renderpass",
323 "VUID-vkCmdDrawMeshTasksNV-None-02700",
324 "VUID-vkCmdDrawMeshTasksNV-commandBuffer-02701",
325 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500326 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700327 "VUID-vkCmdDrawMeshTasksNV-None-02697",
328 "VUID-vkCmdDrawMeshTasksNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700329 "VUID-vkCmdDrawMeshTasksNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600330 "VUID-vkCmdDrawMeshTasksNV-sampleLocationsEnable-02689",
331 "VUID-vkCmdDrawMeshTasksNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700332 "VUID-vkCmdDrawMeshTasksNV-None-02692",
333 kVUIDUndefined, // indirect_protected_cb
334 kVUIDUndefined, // indirect_contiguous_memory;
Piers Daniell39842ee2020-07-10 16:42:33 -0600335 kVUIDUndefined, // indirect_buffer_bit
336 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03417",
337 "VUID-vkCmdDrawMeshTasksNV-scissorCount-03418",
338 "VUID-vkCmdDrawMeshTasksNV-viewportCount-03419",
339 "VUID-vkCmdDrawMeshTasksNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600340 "VUID-vkCmdDrawMeshTasksNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600341 "VUID-vkCmdDrawMeshTasksNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600342 "VUID-vkCmdDrawMeshTasksNV-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600343 "VUID-vkCmdDrawMeshTasksNV-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700344 }},
345 {CMD_DRAWMESHTASKSINDIRECTNV, {
346 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-cmdpool",
347 "VUID-vkCmdDrawMeshTasksIndirectNV-renderpass",
348 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02700",
349 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02701",
350 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500351 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700352 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02697",
353 "VUID-vkCmdDrawMeshTasksIndirectNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700354 "VUID-vkCmdDrawMeshTasksIndirectNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600355 "VUID-vkCmdDrawMeshTasksIndirectNV-sampleLocationsEnable-02689",
356 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700357 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02692",
358 "VUID-vkCmdDrawMeshTasksIndirectNV-commandBuffer-02711",
359 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600360 "VUID-vkCmdDrawMeshTasksIndirectNV-buffer-02709",
361 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03417",
362 "VUID-vkCmdDrawMeshTasksIndirectNV-scissorCount-03418",
363 "VUID-vkCmdDrawMeshTasksIndirectNV-viewportCount-03419",
364 "VUID-vkCmdDrawMeshTasksIndirectNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600365 "VUID-vkCmdDrawMeshTasksIndirectNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600366 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600367 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600368 "VUID-vkCmdDrawMeshTasksIndirectNV-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700369 }},
370 {CMD_DRAWMESHTASKSINDIRECTCOUNTNV, {
371 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-cmdpool",
372 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderpass",
373 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02700",
374 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02701",
375 kVUIDUndefined, // vertex_binding
Jeff Bolz165818a2020-05-08 11:19:03 -0500376 kVUIDUndefined, // vertex_binding_null
Spencer Fricke507600b2020-03-22 13:23:06 -0700377 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02697",
378 "VUID-vkCmdDrawMeshTasksIndirectCountNV-renderPass-02684",
sfricke-samsung8f658d42020-05-03 20:12:24 -0700379 "VUID-vkCmdDrawMeshTasksIndirectCountNV-subpass-02685",
Jeremy Kniagere6827432020-04-01 09:05:56 -0600380 "VUID-vkCmdDrawMeshTasksIndirectCountNV-sampleLocationsEnable-02689",
381 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02690",
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700382 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02692",
383 "VUID-vkCmdDrawMeshTasksIndirectCountNV-commandBuffer-02711",
384 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02708",
Piers Daniell39842ee2020-07-10 16:42:33 -0600385 "VUID-vkCmdDrawMeshTasksIndirectCountNV-buffer-02709",
386 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03417",
387 "VUID-vkCmdDrawMeshTasksIndirectCountNV-scissorCount-03418",
388 "VUID-vkCmdDrawMeshTasksIndirectCountNV-viewportCount-03419",
389 "VUID-vkCmdDrawMeshTasksIndirectCountNV-primitiveTopology-03420",
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600390 "VUID-vkCmdDrawMeshTasksIndirectCountNV-flags-02696",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600391 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600392 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600393 "VUID-vkCmdDrawMeshTasksIndirectCountNV-None-02698",
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600394 }},
395 {CMD_DRAWINDIRECTBYTECOUNTEXT, {
396 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-cmdpool",
397 "VUID-vkCmdDrawIndirectByteCountEXT-renderpass",
398 "VUID-vkCmdDrawIndirectByteCountEXT-None-02700",
399 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02701",
400 "VUID-vkCmdDrawIndirectByteCountEXT-None-04007",
401 "VUID-vkCmdDrawIndirectByteCountEXT-None-04008",
402 "VUID-vkCmdDrawIndirectByteCountEXT-None-02697",
403 "VUID-vkCmdDrawIndirectByteCountEXT-renderPass-02684",
404 "VUID-vkCmdDrawIndirectByteCountEXT-subpass-02685",
405 "VUID-vkCmdDrawIndirectByteCountEXT-sampleLocationsEnable-02689",
406 "VUID-vkCmdDrawIndirectByteCountEXT-None-02690",
407 "VUID-vkCmdDrawIndirectByteCountEXT-None-02692",
408 "VUID-vkCmdDrawIndirectByteCountEXT-commandBuffer-02711",
409 "VUID-vkCmdDrawIndirectByteCountEXT-buffer-02708",
410 "VUID-vkCmdDrawIndirectByteCountEXT-buffer-02709",
411 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03417",
412 "VUID-vkCmdDrawIndirectByteCountEXT-scissorCount-03418",
413 "VUID-vkCmdDrawIndirectByteCountEXT-viewportCount-03419",
414 "VUID-vkCmdDrawIndirectByteCountEXT-primitiveTopology-03420",
415 "VUID-vkCmdDrawIndirectByteCountEXT-flags-02696",
416 "VUID-vkCmdDrawIndirectByteCountEXT-None-02686",
locke-lunarg25b6c352020-08-06 17:44:18 -0600417 "VUID-vkCmdDrawIndirectByteCountEXT-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600418 "VUID-vkCmdDrawIndirectByteCountEXT-None-02698",
locke-lunarg25b6c352020-08-06 17:44:18 -0600419 }},
420 {CMD_DISPATCHBASE, {
421 "VUID-vkCmdDispatchBase-commandBuffer-cmdpool",
422 "VUID-vkCmdDispatchBase-renderpass",
423 "VUID-vkCmdDispatchBase-None-02700",
424 kVUIDUndefined, // dynamic_state
425 kVUIDUndefined, // vertex_binding
426 kVUIDUndefined, // vertex_binding_null
427 "VUID-vkCmdDispatchBase-None-02697",
428 kVUIDUndefined, // render_pass_compatible
429 kVUIDUndefined, // subpass_index
430 kVUIDUndefined, // sample_location
431 "VUID-vkCmdDispatchBase-None-02690",
432 "VUID-vkCmdDispatchBase-None-02692",
433 kVUIDUndefined, // indirect_protected_cb
434 kVUIDUndefined, // indirect_contiguous_memory;
435 kVUIDUndefined, // indirect_buffer_bit
436 kVUIDUndefined, // viewport_count
437 kVUIDUndefined, // scissor_count
438 kVUIDUndefined, // viewport_scissor_count
439 kVUIDUndefined, // primitive_topology
440 "VUID-vkCmdDispatchBase-flags-02696",
441 kVUIDUndefined, // subpass_input
442 "VUID-vkCmdDispatchBase-None-02691",
locke-lunargc4fe6b82020-08-08 00:19:51 -0600443 "VUID-vkCmdDispatchBase-None-02698",
Spencer Fricke507600b2020-03-22 13:23:06 -0700444 }},
445 // Used if invalid cmd_type is used
Piers Daniell39842ee2020-07-10 16:42:33 -0600446 {CMD_NONE, {
447 kVUIDUndefined,
448 kVUIDUndefined,
449 kVUIDUndefined,
450 kVUIDUndefined,
451 kVUIDUndefined,
452 kVUIDUndefined,
453 kVUIDUndefined,
454 kVUIDUndefined,
455 kVUIDUndefined,
456 kVUIDUndefined,
457 kVUIDUndefined,
458 kVUIDUndefined,
459 kVUIDUndefined,
460 kVUIDUndefined,
461 kVUIDUndefined,
462 kVUIDUndefined,
463 kVUIDUndefined,
464 kVUIDUndefined,
465 kVUIDUndefined,
Jeremy Kniager95ffacb2020-06-19 11:32:05 -0600466 kVUIDUndefined,
locke-lunarg25b6c352020-08-06 17:44:18 -0600467 kVUIDUndefined,
468 kVUIDUndefined,
locke-lunargc4fe6b82020-08-08 00:19:51 -0600469 kVUIDUndefined,
Piers Daniell39842ee2020-07-10 16:42:33 -0600470 }}
Spencer Fricke507600b2020-03-22 13:23:06 -0700471};
472// clang-format on
473
474// Getter function to provide kVUIDUndefined in case an invalid cmd_type is passed in
475const DrawDispatchVuid &CoreChecks::GetDrawDispatchVuid(CMD_TYPE cmd_type) const {
476 if (drawdispatch_vuid.find(cmd_type) != drawdispatch_vuid.cend()) {
477 return drawdispatch_vuid.at(cmd_type);
478 } else {
479 return drawdispatch_vuid.at(CMD_NONE);
480 }
481}
482
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700483// Generic function to handle validation for all CmdDraw* type functions
484bool CoreChecks::ValidateCmdDrawType(VkCommandBuffer cmd_buffer, bool indexed, VkPipelineBindPoint bind_point, CMD_TYPE cmd_type,
Spencer Fricke507600b2020-03-22 13:23:06 -0700485 const char *caller, VkQueueFlags queue_flags) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700486 bool skip = false;
Spencer Fricke507600b2020-03-22 13:23:06 -0700487 const DrawDispatchVuid vuid = GetDrawDispatchVuid(cmd_type);
John Zulauffbf3c202019-07-17 14:57:14 -0600488 const CMD_BUFFER_STATE *cb_state = GetCBState(cmd_buffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700489 if (cb_state) {
Spencer Fricke507600b2020-03-22 13:23:06 -0700490 skip |= ValidateCmdQueueFlags(cb_state, caller, queue_flags, vuid.queue_flag);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700491 skip |= ValidateCmd(cb_state, cmd_type, caller);
Spencer Fricke507600b2020-03-22 13:23:06 -0700492 skip |= ValidateCmdBufDrawState(cb_state, cmd_type, indexed, bind_point, caller);
493 skip |= (VK_PIPELINE_BIND_POINT_GRAPHICS == bind_point) ? OutsideRenderPass(cb_state, caller, vuid.inside_renderpass)
494 : InsideRenderPass(cb_state, caller, vuid.inside_renderpass);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700495 }
496 return skip;
497}
498
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700499bool CoreChecks::PreCallValidateCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500500 uint32_t firstVertex, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700501 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAW, "vkCmdDraw()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700502 VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700503}
504
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700505bool CoreChecks::PreCallValidateCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500506 uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700507 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXED, "vkCmdDrawIndexed()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700508 VK_QUEUE_GRAPHICS_BIT);
Jeff Bolz46c0ea02019-10-09 13:06:29 -0500509 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700510 if (!skip && (cb_state->status & CBSTATUS_INDEX_BUFFER_BOUND)) {
511 unsigned int index_size = 0;
512 const auto &index_buffer_binding = cb_state->index_buffer_binding;
513 if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT16) {
514 index_size = 2;
515 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT32) {
516 index_size = 4;
Piers Daniell5070e3e2019-08-20 13:39:35 -0600517 } else if (index_buffer_binding.index_type == VK_INDEX_TYPE_UINT8_EXT) {
518 index_size = 1;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700519 }
520 VkDeviceSize end_offset = (index_size * ((VkDeviceSize)firstIndex + indexCount)) + index_buffer_binding.offset;
521 if (end_offset > index_buffer_binding.size) {
Mark Lobodzinskicf0e6d32020-01-30 12:12:58 -0700522 skip |=
523 LogError(index_buffer_binding.buffer, "VUID-vkCmdDrawIndexed-indexSize-00463",
524 "vkCmdDrawIndexed() index size (%d) * (firstIndex (%d) + indexCount (%d)) "
525 "+ binding offset (%" PRIuLEAST64 ") = an ending offset of %" PRIuLEAST64
526 " bytes, which is greater than the index buffer size (%" PRIuLEAST64 ").",
527 index_size, firstIndex, indexCount, index_buffer_binding.offset, end_offset, index_buffer_binding.size);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700528 }
529 }
530 return skip;
531}
532
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700533bool CoreChecks::PreCallValidateCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500534 uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700535 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700536 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600537 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700538 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600539 if (count > 1) {
540 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00476", stride,
541 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand));
542 skip |=
543 ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirect-drawCount-00488", stride,
544 "VkDrawIndirectCommand", sizeof(VkDrawIndirectCommand), count, offset, buffer_state);
545 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700546 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
547 // VkDrawIndirectCommand structures accessed by this command must be 0, which will require access to the contents of 'buffer'.
548 return skip;
549}
550
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700551bool CoreChecks::PreCallValidateCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500552 uint32_t count, uint32_t stride) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700553 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECT,
554 "vkCmdDrawIndexedIndirect()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600555 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700556 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()");
Lockee68ac652019-05-06 10:17:33 -0600557 if (count > 1) {
558 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00528", stride,
559 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand));
560 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-drawCount-00540", stride,
561 "VkDrawIndexedIndirectCommand", sizeof(VkDrawIndexedIndirectCommand), count, offset,
562 buffer_state);
563 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700564 // TODO: If the drawIndirectFirstInstance feature is not enabled, all the firstInstance members of the
565 // VkDrawIndexedIndirectCommand structures accessed by this command must be 0, which will require access to the contents of
566 // 'buffer'.
567 return skip;
568}
569
Jeff Bolz5c801d12019-10-09 10:38:45 -0500570bool CoreChecks::PreCallValidateCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) const {
Lockef39c0772019-04-03 14:40:02 -0600571 bool skip = false;
Lockef39c0772019-04-03 14:40:02 -0600572 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCH, "vkCmdDispatch()",
Spencer Fricke507600b2020-03-22 13:23:06 -0700573 VK_QUEUE_COMPUTE_BIT);
Lockef39c0772019-04-03 14:40:02 -0600574 return skip;
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700575}
576
locke-lunarg25b6c352020-08-06 17:44:18 -0600577bool CoreChecks::PreCallValidateCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
578 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
579 uint32_t groupCountZ) const {
580 bool skip = false;
581 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBase()",
582 VK_QUEUE_COMPUTE_BIT);
583 return skip;
584}
585
586bool CoreChecks::PreCallValidateCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
587 uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
588 uint32_t groupCountZ) const {
589 bool skip = false;
590 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHBASE, "vkCmdDispatchBaseKHR()",
591 VK_QUEUE_COMPUTE_BIT);
592 return skip;
593}
594
Jeff Bolz5c801d12019-10-09 10:38:45 -0500595bool CoreChecks::PreCallValidateCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700596 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_COMPUTE, CMD_DISPATCHINDIRECT,
Spencer Fricke507600b2020-03-22 13:23:06 -0700597 "vkCmdDispatchIndirect()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700598 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DISPATCHINDIRECT, "vkCmdDispatchIndirect()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700599 return skip;
600}
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700601bool CoreChecks::ValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
602 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
Tony-LunarG83544c72020-01-17 12:30:19 -0700603 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700604 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700605 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
606 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndirectCount-None-02836",
607 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
608 "call this command.",
609 apiName);
610 }
Tony-LunarG83544c72020-01-17 12:30:19 -0700611 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndirectCount-stride-03110", stride, apiName,
612 sizeof(VkDrawIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600613 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600614 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Tony-LunarG83544c72020-01-17 12:30:19 -0700615 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndirectCount-maxDrawCount-03111", stride, apiName,
616 sizeof(VkDrawIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700617 }
618
Tony-LunarG83544c72020-01-17 12:30:19 -0700619 skip |= ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTCOUNT, apiName,
Spencer Fricke507600b2020-03-22 13:23:06 -0700620 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600621 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700622 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDIRECTCOUNT, apiName);
Tony-LunarG83544c72020-01-17 12:30:19 -0700623 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndirectCount-countBuffer-02714");
Tony-LunarG83544c72020-01-17 12:30:19 -0700624 skip |=
625 ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
626 "VUID-vkCmdDrawIndirectCount-countBuffer-02715", apiName, "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700627 return skip;
628}
629
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700630bool CoreChecks::PreCallValidateCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
631 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
632 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700633 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700634 "vkCmdDrawIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700635}
636
637bool CoreChecks::PreCallValidateCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
638 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
639 uint32_t stride) const {
Tony-LunarG83544c72020-01-17 12:30:19 -0700640 return ValidateCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700641 "vkCmdDrawIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700642}
643
644bool CoreChecks::ValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
645 VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
sfricke-samsungf692b972020-05-02 08:00:45 -0700646 uint32_t stride, const char *apiName) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700647 bool skip = false;
sfricke-samsung27c70722020-05-02 08:42:39 -0700648 if ((api_version >= VK_API_VERSION_1_2) && (enabled_features.core12.drawIndirectCount == VK_FALSE)) {
649 skip |= LogError(commandBuffer, "VUID-vkCmdDrawIndexedIndirect-None-02837",
650 "%s(): Starting in Vulkan 1.2 the VkPhysicalDeviceVulkan12Features::drawIndirectCount must be enabled to "
651 "call this command.",
652 apiName);
653 }
sfricke-samsungf692b972020-05-02 08:00:45 -0700654 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-stride-03142", stride, apiName,
655 sizeof(VkDrawIndexedIndirectCommand));
Lockee68ac652019-05-06 10:17:33 -0600656 if (maxDrawCount > 1) {
John Zulauffbf3c202019-07-17 14:57:14 -0600657 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
Mike Schuchardt65847d92019-12-20 13:50:47 -0800658 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawIndexedIndirectCount-maxDrawCount-03143", stride,
sfricke-samsungf692b972020-05-02 08:00:45 -0700659 apiName, sizeof(VkDrawIndexedIndirectCommand), maxDrawCount, offset, buffer_state);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700660 }
661
sfricke-samsungf692b972020-05-02 08:00:45 -0700662 skip |= ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName,
663 VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600664 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700665 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWINDEXEDINDIRECTCOUNT, apiName);
sfricke-samsungf692b972020-05-02 08:00:45 -0700666 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, apiName, "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700667 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700668 "VUID-vkCmdDrawIndexedIndirectCount-countBuffer-02715", apiName,
Mike Schuchardt65847d92019-12-20 13:50:47 -0800669 "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700670 return skip;
671}
672
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700673bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
674 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
675 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700676 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
677 "vkCmdDrawIndexedIndirectCountKHR");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700678}
679
680bool CoreChecks::PreCallValidateCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
681 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
682 uint32_t maxDrawCount, uint32_t stride) const {
sfricke-samsungf692b972020-05-02 08:00:45 -0700683 return ValidateCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride,
684 "vkCmdDrawIndexedIndirectCount");
Tony-LunarGa74d3fe2019-11-22 15:43:20 -0700685}
686
locke-lunarg9a16ebb2020-07-30 16:56:33 -0600687bool CoreChecks::PreCallValidateCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
688 uint32_t firstInstance, VkBuffer counterBuffer,
689 VkDeviceSize counterBufferOffset, uint32_t counterOffset,
690 uint32_t vertexStride) const {
691 return ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWINDIRECTBYTECOUNTEXT,
692 "vkCmdDrawIndirectByteCountEXT()", VK_QUEUE_GRAPHICS_BIT);
693}
694
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500695bool CoreChecks::PreCallValidateCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
696 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
697 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
698 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
699 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
700 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
701 uint32_t width, uint32_t height, uint32_t depth) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700702 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, CMD_TRACERAYSNV,
703 "vkCmdTraceRaysNV()", VK_QUEUE_COMPUTE_BIT);
sourav parmard1521802020-06-07 21:49:02 -0700704 const CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
705 skip |= InsideRenderPass(cb_state, "vkCmdTraceRaysNV()", "VUID-vkCmdTraceRaysNV-renderpass");
706 auto callable_shader_buffer_state = (BUFFER_STATE *)GetBufferState(callableShaderBindingTableBuffer);
707 if (callable_shader_buffer_state && callableShaderBindingOffset >= callable_shader_buffer_state->createInfo.size) {
708 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-callableShaderBindingOffset-02461",
709 "vkCmdTraceRaysNV: callableShaderBindingOffset %" PRIu64
710 " must be less than the size of callableShaderBindingTableBuffer %" PRIu64 " .",
711 callableShaderBindingOffset, callable_shader_buffer_state->createInfo.size);
712 }
713 auto hit_shader_buffer_state = (BUFFER_STATE *)GetBufferState(hitShaderBindingTableBuffer);
714 if (hit_shader_buffer_state && hitShaderBindingOffset >= hit_shader_buffer_state->createInfo.size) {
715 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-hitShaderBindingOffset-02459",
716 "vkCmdTraceRaysNV: hitShaderBindingOffset %" PRIu64
717 " must be less than the size of hitShaderBindingTableBuffer %" PRIu64 " .",
718 hitShaderBindingOffset, hit_shader_buffer_state->createInfo.size);
719 }
720 auto miss_shader_buffer_state = (BUFFER_STATE *)GetBufferState(missShaderBindingTableBuffer);
721 if (miss_shader_buffer_state && missShaderBindingOffset >= miss_shader_buffer_state->createInfo.size) {
722 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-missShaderBindingOffset-02457",
723 "vkCmdTraceRaysNV: missShaderBindingOffset %" PRIu64
724 " must be less than the size of missShaderBindingTableBuffer" PRIu64 " .",
725 missShaderBindingOffset, miss_shader_buffer_state->createInfo.size);
726 }
727 auto raygen_shader_buffer_state = (BUFFER_STATE *)GetBufferState(raygenShaderBindingTableBuffer);
728 if (raygenShaderBindingOffset >= raygen_shader_buffer_state->createInfo.size) {
729 skip |= LogError(commandBuffer, "VUID-vkCmdTraceRaysNV-raygenShaderBindingOffset-02455",
730 "vkCmdTraceRaysNV: raygenShaderBindingOffset %" PRIu64
731 " must be less than the size of raygenShaderBindingTableBuffer" PRIu64 " .",
732 raygenShaderBindingOffset, raygen_shader_buffer_state->createInfo.size);
733 }
Jeff Bolzf6e872c2019-10-22 12:17:28 -0500734 return skip;
735}
736
Jason Macnak67407e72019-07-11 11:05:09 -0700737void CoreChecks::PostCallRecordCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer,
738 VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer,
739 VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride,
740 VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset,
741 VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer,
742 VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride,
743 uint32_t width, uint32_t height, uint32_t depth) {
744 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jeremy Kniager05631e72020-06-08 14:21:35 -0600745 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSNV, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV);
Jason Macnak67407e72019-07-11 11:05:09 -0700746 cb_state->hasTraceRaysCmd = true;
747}
748
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500749bool CoreChecks::PreCallValidateCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
750 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
751 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
752 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
753 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
754 uint32_t height, uint32_t depth) const {
755 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSKHR,
756 "vkCmdTraceRaysKHR()", VK_QUEUE_COMPUTE_BIT);
757 return skip;
758}
759
760void CoreChecks::PostCallRecordCmdTraceRaysKHR(VkCommandBuffer commandBuffer,
761 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
762 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
763 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
764 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, uint32_t width,
765 uint32_t height, uint32_t depth) {
766 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
Jeremy Kniager05631e72020-06-08 14:21:35 -0600767 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500768 cb_state->hasTraceRaysCmd = true;
769}
770
771bool CoreChecks::PreCallValidateCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
772 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
773 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
774 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
775 const VkStridedBufferRegionKHR *pCallableShaderBindingTable,
776 VkBuffer buffer, VkDeviceSize offset) const {
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700777 bool skip = ValidateCmdDrawType(commandBuffer, true, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, CMD_TRACERAYSINDIRECTKHR,
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500778 "vkCmdTraceRaysIndirectKHR()", VK_QUEUE_COMPUTE_BIT);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700779 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_TRACERAYSINDIRECTKHR, "vkCmdTraceRaysIndirectKHR()");
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500780 return skip;
781}
782
783void CoreChecks::PostCallRecordCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer,
784 const VkStridedBufferRegionKHR *pRaygenShaderBindingTable,
785 const VkStridedBufferRegionKHR *pMissShaderBindingTable,
786 const VkStridedBufferRegionKHR *pHitShaderBindingTable,
787 const VkStridedBufferRegionKHR *pCallableShaderBindingTable, VkBuffer buffer,
788 VkDeviceSize offset) {
789 CMD_BUFFER_STATE *cb_state = GetCBState(commandBuffer);
790 BUFFER_STATE *buffer_state = GetBufferState(buffer);
Jeremy Kniager05631e72020-06-08 14:21:35 -0600791 UpdateStateCmdDrawDispatchType(cb_state, CMD_TRACERAYSINDIRECTKHR, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
Jeff Bolz443c2ca2020-03-19 12:11:51 -0500792 cb_state->hasTraceRaysCmd = true;
793 AddCommandBufferBindingBuffer(cb_state, buffer_state);
794}
795
Jeff Bolz5c801d12019-10-09 10:38:45 -0500796bool CoreChecks::PreCallValidateCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) const {
Spencer Fricke507600b2020-03-22 13:23:06 -0700797 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSNV,
798 "vkCmdDrawMeshTasksNV()", VK_QUEUE_GRAPHICS_BIT);
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700799 return skip;
800}
801
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700802bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500803 uint32_t drawCount, uint32_t stride) const {
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700804 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700805 "vkCmdDrawMeshTasksIndirectNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600806 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700807 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTNV, "vkCmdDrawMeshTasksIndirectNV()");
Lockee68ac652019-05-06 10:17:33 -0600808 if (drawCount > 1) {
Lockee68ac652019-05-06 10:17:33 -0600809 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectNV-drawCount-02157", stride,
810 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
811 drawCount, offset, buffer_state);
812 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700813 return skip;
814}
815
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700816bool CoreChecks::PreCallValidateCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
817 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
Jeff Bolz5c801d12019-10-09 10:38:45 -0500818 uint32_t maxDrawCount, uint32_t stride) const {
Mark Lobodzinski708aae72019-12-20 11:57:46 -0700819 bool skip = ValidateCmdDrawType(commandBuffer, false, VK_PIPELINE_BIND_POINT_GRAPHICS, CMD_DRAWMESHTASKSINDIRECTCOUNTNV,
Spencer Fricke507600b2020-03-22 13:23:06 -0700820 "vkCmdDrawMeshTasksIndirectCountNV()", VK_QUEUE_GRAPHICS_BIT);
John Zulauffbf3c202019-07-17 14:57:14 -0600821 const BUFFER_STATE *buffer_state = GetBufferState(buffer);
822 const BUFFER_STATE *count_buffer_state = GetBufferState(countBuffer);
sfricke-samsung0c45edc2020-07-01 22:19:53 -0700823 skip |= ValidateIndirectCmd(commandBuffer, buffer, CMD_DRAWMESHTASKSINDIRECTCOUNTNV, "vkCmdDrawMeshTasksIndirectCountNV()");
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700824 skip |= ValidateMemoryIsBoundToBuffer(count_buffer_state, "vkCmdDrawMeshTasksIndirectCountNV()",
Shannon McPhersonde3eeba2019-04-30 16:53:59 -0600825 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02714");
Jasper St. Pierrebf080462019-04-11 12:54:38 -0700826 skip |= ValidateBufferUsageFlags(count_buffer_state, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT, true,
sfricke-samsungf692b972020-05-02 08:00:45 -0700827 "VUID-vkCmdDrawMeshTasksIndirectCountNV-countBuffer-02715",
828 "vkCmdDrawMeshTasksIndirectCountNV()", "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
Lockee68ac652019-05-06 10:17:33 -0600829 skip |= ValidateCmdDrawStrideWithStruct(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-stride-02182", stride,
830 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV));
831 if (maxDrawCount > 1) {
832 skip |= ValidateCmdDrawStrideWithBuffer(commandBuffer, "VUID-vkCmdDrawMeshTasksIndirectCountNV-maxDrawCount-02183", stride,
833 "VkDrawMeshTasksIndirectCommandNV", sizeof(VkDrawMeshTasksIndirectCommandNV),
834 maxDrawCount, offset, buffer_state);
835 }
Jasper St. Pierre512613a2019-04-08 16:25:23 -0700836 return skip;
837}