blob: 022c6b9d856edcfc5d8ec8cfaa00e7faf4247cf1 [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
Michael Lentine03d8e572015-09-15 14:59:14 -05005 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
24 */
25
26#include <stdio.h>
27#include <stdlib.h>
28#include <string.h>
29
30#include <iostream>
31#include <string>
32#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050033#include <unordered_map>
Jeremy Hayes99a96322015-06-26 12:48:09 -060034#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060035
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060036#include "vk_loader_platform.h"
Tobin Ehlis0c6f9ee2015-07-03 09:42:57 -060037#include "vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060038#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060039#include "vk_enum_validate_helper.h"
40#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060041
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060042#include "vk_layer_table.h"
43#include "vk_layer_data.h"
44#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060045#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060046
Cody Northrop55443ef2015-09-28 15:09:32 -060047struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060048 debug_report_data *report_data;
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060049 std::vector<VkDbgMsgCallback> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060050
51 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060052 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060053 {};
54};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050055
Jeremy Hayes99a96322015-06-26 12:48:09 -060056static std::unordered_map<void*, layer_data*> layer_data_map;
57static device_table_map pc_device_table_map;
58static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060059
Jeremy Hayes99a96322015-06-26 12:48:09 -060060// "my instance data"
61debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060062{
Jeremy Hayes99a96322015-06-26 12:48:09 -060063 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060064 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060065#if DISPATCH_MAP_DEBUG
66 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
67#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060068 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060069
70 return data->report_data;
71}
72
73// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060074debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-06-26 12:48:09 -060075{
76 dispatch_key key = get_dispatch_key(object);
77 layer_data *data = get_my_data_ptr(key, layer_data_map);
78#if DISPATCH_MAP_DEBUG
79 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
80#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060081 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060082 return data->report_data;
83}
84
85static void InitParamChecker(layer_data *data)
86{
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060087 VkDbgMsgCallback callback;
Jeremy Hayes99a96322015-06-26 12:48:09 -060088 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
89
90 uint32_t debug_action = 0;
91 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
92 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
93 {
94 FILE *log_output = NULL;
95 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -060096 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060097 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void *) log_output, &callback);
98 data->logging_callback.push_back(callback);
99 }
100
101 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
102 layer_create_msg_callback(data->report_data, report_flags, win32_debug_output_msg, NULL, &callback);
103 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600104 }
105}
106
107VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
108 VkInstance instance,
109 VkFlags msgFlags,
110 const PFN_vkDbgMsgCallback pfnMsgCallback,
111 void* pUserData,
112 VkDbgMsgCallback* pMsgCallback)
113{
114 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
115 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
116
117 if (result == VK_SUCCESS)
118 {
119 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
120 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
121 }
122
123 return result;
124}
125
126VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
127 VkInstance instance,
128 VkDbgMsgCallback msgCallback)
129{
130 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
131 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
132
133 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
134 layer_destroy_msg_callback(data->report_data, msgCallback);
135
136 return result;
137}
138
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600139static const VkLayerProperties pc_global_layers[] = {
140 {
141 "ParamChecker",
142 VK_API_VERSION,
143 VK_MAKE_VERSION(0, 1, 0),
144 "Validation layer: ParamChecker",
145 }
146};
Tony Barbour59a47322015-06-24 16:06:58 -0600147
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600148VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600149 const char *pLayerName,
150 uint32_t *pCount,
151 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600152{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600153 /* ParamChecker does not have any global extensions */
154 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600155}
156
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600157VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600158 uint32_t *pCount,
159 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600160{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600161 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
162 pc_global_layers,
163 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600164}
165
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600166VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600167 VkPhysicalDevice physicalDevice,
168 const char* pLayerName,
169 uint32_t* pCount,
170 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600171{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600172 /* ParamChecker does not have any physical device extensions */
Jon Ashburn751c4842015-11-02 17:37:20 -0700173 if (pLayerName == NULL) {
174 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
175 physicalDevice,
176 NULL,
177 pCount,
178 pProperties);
179 } else {
180 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
181 }
Jeremy Hayesad367152015-04-17 10:36:53 -0600182}
183
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600184VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600185 VkPhysicalDevice physicalDevice,
186 uint32_t* pCount,
187 VkLayerProperties* pProperties)
188{
189 /* ParamChecker's physical device layers are the same as global */
190 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
191 pCount, pProperties);
192}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600193
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600194// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600195
Jeremy Hayes99a96322015-06-26 12:48:09 -0600196static
197std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600198{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600199 switch(enumerator)
200 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600201 case VK_RESULT_MAX_ENUM:
202 {
203 return "VK_RESULT_MAX_ENUM";
204 break;
205 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600206 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600207 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600208 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600209 break;
210 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600211 case VK_ERROR_INCOMPATIBLE_DRIVER:
212 {
213 return "VK_ERROR_INCOMPATIBLE_DRIVER";
214 break;
215 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600216 case VK_ERROR_MEMORY_MAP_FAILED:
217 {
218 return "VK_ERROR_MEMORY_MAP_FAILED";
219 break;
220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600221 case VK_INCOMPLETE:
222 {
223 return "VK_INCOMPLETE";
224 break;
225 }
226 case VK_ERROR_OUT_OF_HOST_MEMORY:
227 {
228 return "VK_ERROR_OUT_OF_HOST_MEMORY";
229 break;
230 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600231 case VK_ERROR_INITIALIZATION_FAILED:
232 {
233 return "VK_ERROR_INITIALIZATION_FAILED";
234 break;
235 }
236 case VK_NOT_READY:
237 {
238 return "VK_NOT_READY";
239 break;
240 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600241 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
242 {
243 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
244 break;
245 }
246 case VK_EVENT_SET:
247 {
248 return "VK_EVENT_SET";
249 break;
250 }
251 case VK_TIMEOUT:
252 {
253 return "VK_TIMEOUT";
254 break;
255 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600256 case VK_EVENT_RESET:
257 {
258 return "VK_EVENT_RESET";
259 break;
260 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600261 case VK_SUCCESS:
262 {
263 return "VK_SUCCESS";
264 break;
265 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600266 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600267 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600268 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600269 break;
270 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600271 case VK_ERROR_DEVICE_LOST:
272 {
273 return "VK_ERROR_DEVICE_LOST";
274 break;
275 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600276 default:
277 {
278 return "unrecognized enumerator";
279 break;
280 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600281 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600282}
283
284static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600285bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
286{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600287 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600288 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
289 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
290 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
291 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
292 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
293 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
294 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
295 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
296 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600297 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800298 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
299 VK_FORMAT_FEATURE_BLIT_DST_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600300 if(enumerator & (~allFlags))
301 {
302 return false;
303 }
304
305 return true;
306}
307
308static
309std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
310{
311 if(!ValidateEnumerator(enumerator))
312 {
313 return "unrecognized enumerator";
314 }
315
316 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600317 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
318 {
319 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
320 }
321 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
322 {
323 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
324 }
325 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
326 {
327 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
328 }
329 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
330 {
331 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
332 }
333 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
334 {
335 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
336 }
337 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
338 {
339 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
340 }
341 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
342 {
343 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
344 }
345 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
346 {
347 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
348 }
349 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
350 {
351 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
352 }
353 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
354 {
355 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
356 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800357 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600358 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800359 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600360 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800361 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600362 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800363 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600364 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600365
366 std::string enumeratorString;
367 for(auto const& string : strings)
368 {
369 enumeratorString += string;
370
371 if(string != strings.back())
372 {
373 enumeratorString += '|';
374 }
375 }
376
377 return enumeratorString;
378}
379
380static
381bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
382{
383 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600384 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600385 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
386 VK_IMAGE_USAGE_STORAGE_BIT |
387 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800388 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600389 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800390 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600391 if(enumerator & (~allFlags))
392 {
393 return false;
394 }
395
396 return true;
397}
398
399static
400std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
401{
402 if(!ValidateEnumerator(enumerator))
403 {
404 return "unrecognized enumerator";
405 }
406
407 std::vector<std::string> strings;
408 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
409 {
410 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
411 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600412 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600413 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600414 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600415 }
416 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
417 {
418 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
419 }
420 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
421 {
422 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
423 }
424 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
425 {
426 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
427 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800428 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600429 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800430 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600431 }
432 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
433 {
434 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
435 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800436 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600437 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800438 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600439 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600440
441 std::string enumeratorString;
442 for(auto const& string : strings)
443 {
444 enumeratorString += string;
445
446 if(string != strings.back())
447 {
448 enumeratorString += '|';
449 }
450 }
451
452 return enumeratorString;
453}
454
455static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600456bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
457{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800458 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800459 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600460 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800461 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600462 VK_QUEUE_GRAPHICS_BIT);
463 if(enumerator & (~allFlags))
464 {
465 return false;
466 }
467
468 return true;
469}
470
471static
472std::string EnumeratorString(VkQueueFlagBits const& enumerator)
473{
474 if(!ValidateEnumerator(enumerator))
475 {
476 return "unrecognized enumerator";
477 }
478
479 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800480 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600481 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800482 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600483 }
484 if(enumerator & VK_QUEUE_COMPUTE_BIT)
485 {
486 strings.push_back("VK_QUEUE_COMPUTE_BIT");
487 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800488 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600489 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800490 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600491 }
492 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
493 {
494 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
495 }
496
497 std::string enumeratorString;
498 for(auto const& string : strings)
499 {
500 enumeratorString += string;
501
502 if(string != strings.back())
503 {
504 enumeratorString += '|';
505 }
506 }
507
508 return enumeratorString;
509}
510
511static
512bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
513{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600514 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800515 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600516 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800517 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
518 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600519 if(enumerator & (~allFlags))
520 {
521 return false;
522 }
523
524 return true;
525}
526
527static
528std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
529{
530 if(!ValidateEnumerator(enumerator))
531 {
532 return "unrecognized enumerator";
533 }
534
535 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600536 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
537 {
538 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
539 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800540 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600541 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800542 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600543 }
544 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
545 {
546 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
547 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800548 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600549 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800550 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600551 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800552 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600553 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800554 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600555 }
556
557 std::string enumeratorString;
558 for(auto const& string : strings)
559 {
560 enumeratorString += string;
561
562 if(string != strings.back())
563 {
564 enumeratorString += '|';
565 }
566 }
567
568 return enumeratorString;
569}
570
571static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600572bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600573{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800574 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600575 if(enumerator & (~allFlags))
576 {
577 return false;
578 }
579
580 return true;
581}
582
583static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600584std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600585{
586 if(!ValidateEnumerator(enumerator))
587 {
588 return "unrecognized enumerator";
589 }
590
591 std::vector<std::string> strings;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800592 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600593 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800594 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600595 }
596
597 std::string enumeratorString;
598 for(auto const& string : strings)
599 {
600 enumeratorString += string;
601
602 if(string != strings.back())
603 {
604 enumeratorString += '|';
605 }
606 }
607
608 return enumeratorString;
609}
610
611static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600612bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
613{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800614 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
615 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
616 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600617 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600618 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600619 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600620 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600621
622 return true;
623}
624
625static
626std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
627{
628 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600629 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600630 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600631 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600632
633 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800634 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600635 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800636 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600637 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800638 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600639 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800640 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600641 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800642 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600643 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800644 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600645 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600646
647 std::string enumeratorString;
648 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600649 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600650 enumeratorString += string;
651
652 if(string != strings.back())
653 {
654 enumeratorString += '|';
655 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600656 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600657
658 return enumeratorString;
659}
660
661static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600662bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
663{
664 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
665 if(enumerator & (~allFlags))
666 {
667 return false;
668 }
669
670 return true;
671}
672
673static
674std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
675{
676 if(!ValidateEnumerator(enumerator))
677 {
678 return "unrecognized enumerator";
679 }
680
681 std::vector<std::string> strings;
682 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
683 {
684 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
685 }
686
687 std::string enumeratorString;
688 for(auto const& string : strings)
689 {
690 enumeratorString += string;
691
692 if(string != strings.back())
693 {
694 enumeratorString += '|';
695 }
696 }
697
698 return enumeratorString;
699}
700
701static
702bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
703{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600704 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
705 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
706 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
707 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
708 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
709 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
710 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
711 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
712 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
713 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
714 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600715 if(enumerator & (~allFlags))
716 {
717 return false;
718 }
719
720 return true;
721}
722
723static
724std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
725{
726 if(!ValidateEnumerator(enumerator))
727 {
728 return "unrecognized enumerator";
729 }
730
731 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600732 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600733 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600734 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600735 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600736 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600737 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600738 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600739 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600740 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600741 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600742 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600743 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600744 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600745 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600746 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600747 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600748 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600749 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600750 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600751 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600752 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600753 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600754 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600755 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600756 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600757 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600758 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600759 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600760 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600761 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600762 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600763 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600764 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600765 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600766 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600767 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600768 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600769 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600770 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600771 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600772 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600773 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600774 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600775 }
776
777 std::string enumeratorString;
778 for(auto const& string : strings)
779 {
780 enumeratorString += string;
781
782 if(string != strings.back())
783 {
784 enumeratorString += '|';
785 }
786 }
787
788 return enumeratorString;
789}
790
791static
792bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
793{
794 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
795 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
796 VK_QUERY_RESULT_WAIT_BIT |
797 VK_QUERY_RESULT_64_BIT |
798 VK_QUERY_RESULT_DEFAULT);
799 if(enumerator & (~allFlags))
800 {
801 return false;
802 }
803
804 return true;
805}
806
807static
808std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
809{
810 if(!ValidateEnumerator(enumerator))
811 {
812 return "unrecognized enumerator";
813 }
814
815 std::vector<std::string> strings;
816 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
817 {
818 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
819 }
820 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
821 {
822 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
823 }
824 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
825 {
826 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
827 }
828 if(enumerator & VK_QUERY_RESULT_64_BIT)
829 {
830 strings.push_back("VK_QUERY_RESULT_64_BIT");
831 }
832 if(enumerator & VK_QUERY_RESULT_DEFAULT)
833 {
834 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600835 }
836
837 std::string enumeratorString;
838 for(auto const& string : strings)
839 {
840 enumeratorString += string;
841
842 if(string != strings.back())
843 {
844 enumeratorString += '|';
845 }
846 }
847
848 return enumeratorString;
849}
850
851static
852bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
853{
854 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
855 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
856 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
857 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
858 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800859 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600860 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800861 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600862 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600863 if(enumerator & (~allFlags))
864 {
865 return false;
866 }
867
868 return true;
869}
870
871static
872std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
873{
874 if(!ValidateEnumerator(enumerator))
875 {
876 return "unrecognized enumerator";
877 }
878
879 std::vector<std::string> strings;
880 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
881 {
882 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
883 }
884 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
885 {
886 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
887 }
888 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
889 {
890 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
891 }
892 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
893 {
894 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
895 }
896 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
897 {
898 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
899 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800900 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600901 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800902 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600903 }
904 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
905 {
906 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
907 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800908 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600909 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800910 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600911 }
912 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
913 {
914 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
915 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600916
917 std::string enumeratorString;
918 for(auto const& string : strings)
919 {
920 enumeratorString += string;
921
922 if(string != strings.back())
923 {
924 enumeratorString += '|';
925 }
926 }
927
928 return enumeratorString;
929}
930
931static
932bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
933{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600934 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
935 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600936 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600937 if(enumerator & (~allFlags))
938 {
939 return false;
940 }
941
942 return true;
943}
944
945static
946std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
947{
948 if(!ValidateEnumerator(enumerator))
949 {
950 return "unrecognized enumerator";
951 }
952
953 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600954 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
955 {
956 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
957 }
958 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
959 {
960 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
961 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600962 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600963 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600964 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600965 }
966
967 std::string enumeratorString;
968 for(auto const& string : strings)
969 {
970 enumeratorString += string;
971
972 if(string != strings.back())
973 {
974 enumeratorString += '|';
975 }
976 }
977
978 return enumeratorString;
979}
980
981static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600982bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
983{
984 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600985 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
986 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600987 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600988 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600989 if(enumerator & (~allFlags))
990 {
991 return false;
992 }
993
994 return true;
995}
996
997static
998std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
999{
1000 if(!ValidateEnumerator(enumerator))
1001 {
1002 return "unrecognized enumerator";
1003 }
1004
1005 std::vector<std::string> strings;
1006 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1007 {
1008 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1009 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001010 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1011 {
1012 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1013 }
1014 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1015 {
1016 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1017 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001018 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1019 {
1020 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1021 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001022 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001023 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001024 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001025 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001026
1027 std::string enumeratorString;
1028 for(auto const& string : strings)
1029 {
1030 enumeratorString += string;
1031
1032 if(string != strings.back())
1033 {
1034 enumeratorString += '|';
1035 }
1036 }
1037
1038 return enumeratorString;
1039}
1040
1041static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001042bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001043{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001044 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1045 VK_COLOR_COMPONENT_B_BIT |
1046 VK_COLOR_COMPONENT_G_BIT |
1047 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001048 if(enumerator & (~allFlags))
1049 {
1050 return false;
1051 }
1052
1053 return true;
1054}
1055
1056static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001057std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001058{
1059 if(!ValidateEnumerator(enumerator))
1060 {
1061 return "unrecognized enumerator";
1062 }
1063
1064 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001065 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001066 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001067 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001068 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001069 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001070 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001071 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001072 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001073 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001074 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001075 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001076 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001077 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001078 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001079 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001080 }
1081
1082 std::string enumeratorString;
1083 for(auto const& string : strings)
1084 {
1085 enumeratorString += string;
1086
1087 if(string != strings.back())
1088 {
1089 enumeratorString += '|';
1090 }
1091 }
1092
1093 return enumeratorString;
1094}
1095
1096static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001097bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001098{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001099 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1100 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1101 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001102 if(enumerator & (~allFlags))
1103 {
1104 return false;
1105 }
1106
1107 return true;
1108}
1109
1110static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001111std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001112{
1113 if(!ValidateEnumerator(enumerator))
1114 {
1115 return "unrecognized enumerator";
1116 }
1117
1118 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001119 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001120 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001121 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1122 }
1123 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1124 {
1125 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1126 }
1127 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1128 {
1129 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001130 }
1131
1132 std::string enumeratorString;
1133 for(auto const& string : strings)
1134 {
1135 enumeratorString += string;
1136
1137 if(string != strings.back())
1138 {
1139 enumeratorString += '|';
1140 }
1141 }
1142
1143 return enumeratorString;
1144}
1145
1146static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001147bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001148{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001149 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1150 VK_SHADER_STAGE_FRAGMENT_BIT |
1151 VK_SHADER_STAGE_GEOMETRY_BIT |
1152 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001153 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1154 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001155 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001156 if(enumerator & (~allFlags))
1157 {
1158 return false;
1159 }
1160
1161 return true;
1162}
1163
1164static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001165std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001166{
1167 if(!ValidateEnumerator(enumerator))
1168 {
1169 return "unrecognized enumerator";
1170 }
1171
1172 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001173 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001174 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001175 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001176 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001177 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001178 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001179 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001180 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001181 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001182 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001183 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1184 }
1185 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1186 {
1187 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1188 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001189 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001190 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001191 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001192 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001193 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001194 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001195 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001196 }
1197 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1198 {
1199 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001200 }
1201
1202 std::string enumeratorString;
1203 for(auto const& string : strings)
1204 {
1205 enumeratorString += string;
1206
1207 if(string != strings.back())
1208 {
1209 enumeratorString += '|';
1210 }
1211 }
1212
1213 return enumeratorString;
1214}
1215
1216static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001217bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001218{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001219 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1220 VK_PIPELINE_STAGE_HOST_BIT |
1221 VK_PIPELINE_STAGE_TRANSFER_BIT |
1222 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1223 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1224 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001225 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001226 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001227 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1228 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1229 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001230 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001231 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1232 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1233 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1234 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001235 if(enumerator & (~allFlags))
1236 {
1237 return false;
1238 }
1239
1240 return true;
1241}
1242
1243static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001244std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001245{
1246 if(!ValidateEnumerator(enumerator))
1247 {
1248 return "unrecognized enumerator";
1249 }
1250
1251 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001252 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001253 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001254 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001255 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001256 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001257 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001258 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001259 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001260 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001261 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001262 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001263 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001264 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001265 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001266 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001267 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001268 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001269 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001270 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001271 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001272 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001273 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001274 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001275 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001276 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001277 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001278 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001279 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001280 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001281 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001282 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001283 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001284 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001285 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001286 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001287 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001288 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001289 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001290 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1291 }
1292 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1293 {
1294 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1295 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001296 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001297 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001298 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001299 }
1300 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1301 {
1302 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1303 }
1304 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1305 {
1306 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1307 }
1308 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1309 {
1310 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1311 }
1312 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1313 {
1314 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001315 }
1316
1317 std::string enumeratorString;
1318 for(auto const& string : strings)
1319 {
1320 enumeratorString += string;
1321
1322 if(string != strings.back())
1323 {
1324 enumeratorString += '|';
1325 }
1326 }
1327
1328 return enumeratorString;
1329}
1330
1331static
Chia-I Wua4594202015-10-27 19:54:37 +08001332bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001333{
Chia-I Wua4594202015-10-27 19:54:37 +08001334 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1335 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1336 VK_ACCESS_INDEX_READ_BIT |
1337 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1338 VK_ACCESS_UNIFORM_READ_BIT |
1339 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1340 VK_ACCESS_SHADER_READ_BIT |
1341 VK_ACCESS_SHADER_WRITE_BIT |
1342 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1343 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1344 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1345 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1346 VK_ACCESS_TRANSFER_READ_BIT |
1347 VK_ACCESS_TRANSFER_WRITE_BIT |
1348 VK_ACCESS_HOST_READ_BIT |
1349 VK_ACCESS_HOST_WRITE_BIT |
1350 VK_ACCESS_MEMORY_READ_BIT |
1351 VK_ACCESS_MEMORY_WRITE_BIT);
1352
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001353 if(enumerator & (~allFlags))
1354 {
1355 return false;
1356 }
1357
1358 return true;
1359}
1360
1361static
Chia-I Wua4594202015-10-27 19:54:37 +08001362std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001363{
1364 if(!ValidateEnumerator(enumerator))
1365 {
1366 return "unrecognized enumerator";
1367 }
1368
1369 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001370 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001371 {
Chia-I Wua4594202015-10-27 19:54:37 +08001372 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001373 }
Chia-I Wua4594202015-10-27 19:54:37 +08001374 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001375 {
Chia-I Wua4594202015-10-27 19:54:37 +08001376 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001377 }
Chia-I Wua4594202015-10-27 19:54:37 +08001378 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001379 {
Chia-I Wua4594202015-10-27 19:54:37 +08001380 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001381 }
Chia-I Wua4594202015-10-27 19:54:37 +08001382 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001383 {
Chia-I Wua4594202015-10-27 19:54:37 +08001384 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001385 }
Chia-I Wua4594202015-10-27 19:54:37 +08001386 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001387 {
Chia-I Wua4594202015-10-27 19:54:37 +08001388 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001389 }
Chia-I Wua4594202015-10-27 19:54:37 +08001390 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001391 {
Chia-I Wua4594202015-10-27 19:54:37 +08001392 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001393 }
Chia-I Wua4594202015-10-27 19:54:37 +08001394 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001395 {
Chia-I Wua4594202015-10-27 19:54:37 +08001396 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001397 }
Chia-I Wua4594202015-10-27 19:54:37 +08001398 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001399 {
Chia-I Wua4594202015-10-27 19:54:37 +08001400 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001401 }
Chia-I Wua4594202015-10-27 19:54:37 +08001402 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001403 {
Chia-I Wua4594202015-10-27 19:54:37 +08001404 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001405 }
Chia-I Wua4594202015-10-27 19:54:37 +08001406 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001407 {
Chia-I Wua4594202015-10-27 19:54:37 +08001408 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001409 }
Chia-I Wua4594202015-10-27 19:54:37 +08001410 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001411 {
Chia-I Wua4594202015-10-27 19:54:37 +08001412 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001413 }
Chia-I Wua4594202015-10-27 19:54:37 +08001414 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001415 {
Chia-I Wua4594202015-10-27 19:54:37 +08001416 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001417 }
Chia-I Wua4594202015-10-27 19:54:37 +08001418 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001419 {
Chia-I Wua4594202015-10-27 19:54:37 +08001420 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001421 }
Chia-I Wua4594202015-10-27 19:54:37 +08001422 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001423 {
Chia-I Wua4594202015-10-27 19:54:37 +08001424 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001425 }
Chia-I Wua4594202015-10-27 19:54:37 +08001426 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001427 {
Chia-I Wua4594202015-10-27 19:54:37 +08001428 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001429 }
Chia-I Wua4594202015-10-27 19:54:37 +08001430 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001431 {
Chia-I Wua4594202015-10-27 19:54:37 +08001432 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001433 }
Chia-I Wua4594202015-10-27 19:54:37 +08001434 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001435 {
Chia-I Wua4594202015-10-27 19:54:37 +08001436 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001437 }
1438
1439 std::string enumeratorString;
1440 for(auto const& string : strings)
1441 {
1442 enumeratorString += string;
1443
1444 if(string != strings.back())
1445 {
1446 enumeratorString += '|';
1447 }
1448 }
1449
1450 return enumeratorString;
1451}
1452
1453static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001454bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001455{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001456 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1457 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001458 if(enumerator & (~allFlags))
1459 {
1460 return false;
1461 }
1462
1463 return true;
1464}
1465
1466static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001467std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001468{
1469 if(!ValidateEnumerator(enumerator))
1470 {
1471 return "unrecognized enumerator";
1472 }
1473
1474 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001475 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001476 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001477 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001478 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001479 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001480 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001481 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001482 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001483
1484 std::string enumeratorString;
1485 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001486 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001487 enumeratorString += string;
1488
1489 if(string != strings.back())
1490 {
1491 enumeratorString += '|';
1492 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001493 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001494
1495 return enumeratorString;
1496}
1497
1498static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001499bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001500{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001501 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001502 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001503 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001504 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001505 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001506
1507 return true;
1508}
1509
1510static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001511std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001512{
1513 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001514 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001515 return "unrecognized enumerator";
1516 }
1517
1518 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001519 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001520 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001521 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001522 }
1523
1524 std::string enumeratorString;
1525 for(auto const& string : strings)
1526 {
1527 enumeratorString += string;
1528
1529 if(string != strings.back())
1530 {
1531 enumeratorString += '|';
1532 }
1533 }
1534
1535 return enumeratorString;
1536}
1537
1538static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001539bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001540{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001541 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1542 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1543 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001544 if(enumerator & (~allFlags))
1545 {
1546 return false;
1547 }
1548
1549 return true;
1550}
1551
1552static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001553std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001554{
1555 if(!ValidateEnumerator(enumerator))
1556 {
1557 return "unrecognized enumerator";
1558 }
1559
1560 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001561 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001562 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001563 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001564 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001565 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001566 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001567 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001568 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001569 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001570 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001571 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001572 }
1573
1574 std::string enumeratorString;
1575 for(auto const& string : strings)
1576 {
1577 enumeratorString += string;
1578
1579 if(string != strings.back())
1580 {
1581 enumeratorString += '|';
1582 }
1583 }
1584
1585 return enumeratorString;
1586}
1587
1588static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001589bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001590{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001591 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001592 if(enumerator & (~allFlags))
1593 {
1594 return false;
1595 }
1596
1597 return true;
1598}
1599
1600static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001601std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001602{
1603 if(!ValidateEnumerator(enumerator))
1604 {
1605 return "unrecognized enumerator";
1606 }
1607
1608 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001609 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001610 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001611 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001612 }
1613
1614 std::string enumeratorString;
1615 for(auto const& string : strings)
1616 {
1617 enumeratorString += string;
1618
1619 if(string != strings.back())
1620 {
1621 enumeratorString += '|';
1622 }
1623 }
1624
1625 return enumeratorString;
1626}
1627
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001628static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001629bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001630{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001631 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1632 VK_IMAGE_ASPECT_STENCIL_BIT |
1633 VK_IMAGE_ASPECT_DEPTH_BIT |
1634 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001635 if(enumerator & (~allFlags))
1636 {
1637 return false;
1638 }
1639
1640 return true;
1641}
1642
1643static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001644std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001645{
1646 if(!ValidateEnumerator(enumerator))
1647 {
1648 return "unrecognized enumerator";
1649 }
1650
1651 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001652 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001653 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001654 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1655 }
1656 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1657 {
1658 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1659 }
1660 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1661 {
1662 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1663 }
1664 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1665 {
1666 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1667 }
1668
1669 std::string enumeratorString;
1670 for(auto const& string : strings)
1671 {
1672 enumeratorString += string;
1673
1674 if(string != strings.back())
1675 {
1676 enumeratorString += '|';
1677 }
1678 }
1679
1680 return enumeratorString;
1681}
1682
1683static
1684bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1685{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001686 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001687 if(enumerator & (~allFlags))
1688 {
1689 return false;
1690 }
1691
1692 return true;
1693}
1694
1695static
1696std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1697{
1698 if(!ValidateEnumerator(enumerator))
1699 {
1700 return "unrecognized enumerator";
1701 }
1702
1703 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001704 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001705 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001706 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001707 }
1708
1709 std::string enumeratorString;
1710 for(auto const& string : strings)
1711 {
1712 enumeratorString += string;
1713
1714 if(string != strings.back())
1715 {
1716 enumeratorString += '|';
1717 }
1718 }
1719
1720 return enumeratorString;
1721}
1722
Jeremy Hayes99a96322015-06-26 12:48:09 -06001723VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1724 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001725 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001726 VkInstance* pInstance)
1727{
1728 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001729 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001730
1731 if (result == VK_SUCCESS) {
1732 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Chia-I Wud50a7d72015-10-26 20:48:51 +08001733 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001734 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001735
1736 InitParamChecker(data);
1737 }
1738
1739 return result;
1740}
1741
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001742VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001743 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001744 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001745{
1746 // Grab the key before the instance is destroyed.
1747 dispatch_key key = get_dispatch_key(instance);
1748 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001749 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001750
1751 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001752 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1753 while (my_data->logging_callback.size() > 0) {
1754 VkDbgMsgCallback callback = my_data->logging_callback.back();
1755 layer_destroy_msg_callback(my_data->report_data, callback);
1756 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001757 }
1758
1759 layer_debug_report_destroy_instance(mid(instance));
1760 layer_data_map.erase(pTable);
1761
1762 pc_instance_table_map.erase(key);
1763 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001764}
1765
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001766bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001767 VkInstance instance,
1768 uint32_t* pPhysicalDeviceCount,
1769 VkPhysicalDevice* pPhysicalDevices,
1770 VkResult result)
1771{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001772
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001773 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001774 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001775 }
1776
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001777 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001778 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001779 }
1780
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001781 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001782 {
1783 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001784 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1785 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001786 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001787
1788 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001789}
1790
1791VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1792 VkInstance instance,
1793 uint32_t* pPhysicalDeviceCount,
1794 VkPhysicalDevice* pPhysicalDevices)
1795{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001796 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1797
1798 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1799
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001800 return result;
1801}
1802
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001803bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001804 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001805 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001806{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001807
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001808 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001809 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001810 }
1811
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001812 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001813}
1814
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001815VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001816 VkPhysicalDevice physicalDevice,
1817 VkPhysicalDeviceFeatures* pFeatures)
1818{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001819 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001820
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001821 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001822}
1823
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001824bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001825 VkPhysicalDevice physicalDevice,
1826 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001827 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001828{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001829
1830 if(format < VK_FORMAT_BEGIN_RANGE ||
1831 format > VK_FORMAT_END_RANGE)
1832 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001833 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001834 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001835 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001836 }
1837
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001838 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001839 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001840 }
1841
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001842 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001843}
1844
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001845VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001846 VkPhysicalDevice physicalDevice,
1847 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001848 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001849{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001850 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001851
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001852 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001853}
1854
1855bool PostGetPhysicalDeviceImageFormatProperties(
1856 VkPhysicalDevice physicalDevice,
1857 VkFormat format,
1858 VkImageType type,
1859 VkImageTiling tiling,
1860 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001861 VkImageCreateFlags flags,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001862 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001863{
1864
1865 if(format < VK_FORMAT_BEGIN_RANGE ||
1866 format > VK_FORMAT_END_RANGE)
1867 {
1868 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1869 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1870 return false;
1871 }
1872
1873 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1874 type > VK_IMAGE_TYPE_END_RANGE)
1875 {
1876 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1877 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1878 return false;
1879 }
1880
1881 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1882 tiling > VK_IMAGE_TILING_END_RANGE)
1883 {
1884 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1885 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1886 return false;
1887 }
1888
1889
1890 if(pImageFormatProperties != nullptr)
1891 {
1892 }
1893
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001894 return true;
1895}
1896
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001897VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001898 VkPhysicalDevice physicalDevice,
1899 VkFormat format,
1900 VkImageType type,
1901 VkImageTiling tiling,
1902 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001903 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001904 VkImageFormatProperties* pImageFormatProperties)
1905{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001906 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001907
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001908 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001909}
1910
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001911bool PostGetPhysicalDeviceProperties(
1912 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001913 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001914{
1915
1916 if(pProperties != nullptr)
1917 {
1918 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1919 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1920 {
1921 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1922 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1923 return false;
1924 }
1925 }
1926
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001927 return true;
1928}
1929
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001930VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001931 VkPhysicalDevice physicalDevice,
1932 VkPhysicalDeviceProperties* pProperties)
1933{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001934 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001935
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001936 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001937}
1938
Cody Northropd0802882015-08-03 17:04:53 -06001939bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001940 VkPhysicalDevice physicalDevice,
1941 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001942 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001943{
1944
Cody Northropd0802882015-08-03 17:04:53 -06001945 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001946 {
1947 }
1948
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001949 if(pQueueProperties != nullptr)
1950 {
1951 }
1952
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001953 return true;
1954}
1955
Courtney Goeltzenleuchter9a63f442015-10-27 11:19:02 -06001956VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001957 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06001958 uint32_t* pCount,
1959 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001960{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001961 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001962
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001963 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001964}
1965
1966bool PostGetPhysicalDeviceMemoryProperties(
1967 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001968 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001969{
1970
1971 if(pMemoryProperties != nullptr)
1972 {
1973 }
1974
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001975 return true;
1976}
1977
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001978VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001979 VkPhysicalDevice physicalDevice,
1980 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
1981{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001982 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001983
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001984 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001985}
1986
Jeremy Hayes99a96322015-06-26 12:48:09 -06001987VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
1988 VkPhysicalDevice physicalDevice,
1989 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001990 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001991 VkDevice* pDevice)
1992{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06001993 /*
1994 * NOTE: The loader fills in the ICD's device object in *pDevice.
1995 * Use that object to get the dispatch table.
1996 *
1997 * NOTE: We do not validate physicalDevice or any dispatchable
1998 * object as the first parameter. We couldn't get here if it was wrong!
1999 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002000 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wuf7458c52015-10-26 21:10:41 +08002001 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002002 if(result == VK_SUCCESS)
2003 {
2004 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2005 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2006 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2007 }
2008
2009 return result;
2010}
2011
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002012VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002013 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002014 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002015{
2016 layer_debug_report_destroy_device(device);
2017
2018 dispatch_key key = get_dispatch_key(device);
2019#if DISPATCH_MAP_DEBUG
2020 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2021#endif
2022
Chia-I Wuf7458c52015-10-26 21:10:41 +08002023 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002024 pc_device_table_map.erase(key);
2025 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002026}
2027
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002028bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002029 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002030 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002031 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002032 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002033{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002034
2035
2036
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002037 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002038 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002039 }
2040
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002041 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002042}
2043
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002044VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002045 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002046 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002047 uint32_t queueIndex,
2048 VkQueue* pQueue)
2049{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002050 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002051
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002052 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002053}
2054
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002055bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002056 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002057 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002058{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002059 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
2060 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002061 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002062 return false;
2063 }
2064
2065 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002066 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002067 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002068
2069 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002070}
2071
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002072bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002073 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002074 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002075 VkFence fence,
2076 VkResult result)
2077{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002078
2079
Jeremy Hayes99a96322015-06-26 12:48:09 -06002080
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002081 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002082 {
2083 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002084 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2085 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002086 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002087
2088 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002089}
2090
2091VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2092 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002093 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002094 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002095 VkFence fence)
2096{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002097 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002098 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002099 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002100
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002101 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002102
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002103 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002104
2105 return result;
2106}
2107
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002108bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002109 VkQueue queue,
2110 VkResult result)
2111{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002112
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002113 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002114 {
2115 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002116 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2117 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002118 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002119
2120 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002121}
2122
2123VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2124 VkQueue queue)
2125{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002126 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2127
2128 PostQueueWaitIdle(queue, result);
2129
2130 return result;
2131}
2132
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002133bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002134 VkDevice device,
2135 VkResult result)
2136{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002137
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002138 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002139 {
2140 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002141 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2142 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002143 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002144
2145 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002146}
2147
2148VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2149 VkDevice device)
2150{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002151 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2152
2153 PostDeviceWaitIdle(device, result);
2154
2155 return result;
2156}
2157
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002158bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002159 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002160 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002161{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002162 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002163 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002164 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002165 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002166 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002167 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002168 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002169 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002170 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002171
2172 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002173}
2174
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002175bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002176 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002177 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002178 VkResult result)
2179{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002180
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002181 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002183 }
2184
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002185 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002186 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002187 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002188 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2189 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002190 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002191
2192 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002193}
2194
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002195VK_LAYER_EXPORT VkResult VKAPI vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002197 const VkMemoryAllocateInfo* pAllocateInfo,
2198 const VkAllocationCallbacks* pAllocator,
2199 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002200{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002201 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002202
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002203 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002205 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002206
2207 return result;
2208}
2209
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002210bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002211 VkDevice device,
2212 VkDeviceMemory mem,
2213 VkDeviceSize offset,
2214 VkDeviceSize size,
2215 VkMemoryMapFlags flags,
2216 void** ppData,
2217 VkResult result)
2218{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002219
Jeremy Hayes99a96322015-06-26 12:48:09 -06002220
2221
2222
2223
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002224 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002225 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002226 }
2227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002228 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002229 {
2230 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002231 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2232 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002233 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002234
2235 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002236}
2237
2238VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2239 VkDevice device,
2240 VkDeviceMemory mem,
2241 VkDeviceSize offset,
2242 VkDeviceSize size,
2243 VkMemoryMapFlags flags,
2244 void** ppData)
2245{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002246 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2247
2248 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2249
2250 return result;
2251}
2252
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002253bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002254 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002255 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002256{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002257 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002258 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002259 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002260 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002262 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002263 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002264 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002265 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002266
2267 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002268}
2269
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002270bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002271 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002272 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002273 VkResult result)
2274{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002275
2276
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002277 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002278 {
2279 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002280 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2281 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002282 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002283
2284 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002285}
2286
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002287VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002288 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002289 uint32_t memoryRangeCount,
2290 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002291{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002292 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002293
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002294 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002295
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002296 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002297
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002298 return result;
2299}
2300
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002301bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002302 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002303 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002304{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002305 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002306 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002307 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002308 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002309 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002310 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002311 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002312 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002313 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002314
2315 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002316}
2317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002318bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002319 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002320 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002321 VkResult result)
2322{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323
2324
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002325 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002326 {
2327 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002328 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2329 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002330 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002331
2332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002333}
2334
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002335VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002336 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002337 uint32_t memoryRangeCount,
2338 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002339{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002340 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002341
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002342 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002343
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002344 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002345
Tony Barbourb1250542015-04-16 19:23:13 -06002346 return result;
2347}
2348
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002349bool PostGetDeviceMemoryCommitment(
2350 VkDevice device,
2351 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002352 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002353{
2354
2355
2356 if(pCommittedMemoryInBytes != nullptr)
2357 {
2358 }
2359
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002360 return true;
2361}
2362
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002363VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002364 VkDevice device,
2365 VkDeviceMemory memory,
2366 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002367{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002368 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002369
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002370 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002371}
2372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002373bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002374 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002375 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002376 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002377 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002378 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002379{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002380
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002381
Jeremy Hayes99a96322015-06-26 12:48:09 -06002382
2383
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002384 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002385 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002386 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2387 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2388 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002389 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002390
2391 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002392}
2393
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002394VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002395 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002396 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002397 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002398 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002399{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002400 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002401
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002402 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002403
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002404 return result;
2405}
2406
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002407bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002408 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002409 VkImage image,
2410 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002411 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002412 VkResult result)
2413{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002414
2415
2416
2417
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002418 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002419 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002420 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2422 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423 }
2424
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002425 return true;
2426}
2427
2428VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2429 VkDevice device,
2430 VkImage image,
2431 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002432 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002433{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002434 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002435
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002436 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002437
2438 return result;
2439}
2440
2441bool PostGetBufferMemoryRequirements(
2442 VkDevice device,
2443 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002444 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002445{
2446
2447
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002448 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002449 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002450 }
2451
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002452 return true;
2453}
2454
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002455VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002456 VkDevice device,
2457 VkBuffer buffer,
2458 VkMemoryRequirements* pMemoryRequirements)
2459{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002460 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002461
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002462 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002463}
2464
2465bool PostGetImageMemoryRequirements(
2466 VkDevice device,
2467 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002468 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002469{
2470
2471
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002472 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002473 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002474 }
2475
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002476 return true;
2477}
2478
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002479VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002480 VkDevice device,
2481 VkImage image,
2482 VkMemoryRequirements* pMemoryRequirements)
2483{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002484 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002485
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002486 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002487}
2488
2489bool PostGetImageSparseMemoryRequirements(
2490 VkDevice device,
2491 VkImage image,
2492 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002493 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002494{
2495
2496
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002497 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002498 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002499 }
2500
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002501 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002502 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002503 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002504 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002505 {
2506 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002507 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002508 return false;
2509 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002510 }
2511
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002512 return true;
2513}
2514
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002515VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002516 VkDevice device,
2517 VkImage image,
2518 uint32_t* pNumRequirements,
2519 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2520{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002521 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002522
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002523 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002524}
2525
2526bool PostGetPhysicalDeviceSparseImageFormatProperties(
2527 VkPhysicalDevice physicalDevice,
2528 VkFormat format,
2529 VkImageType type,
2530 uint32_t samples,
2531 VkImageUsageFlags usage,
2532 VkImageTiling tiling,
2533 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002534 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002535{
2536
2537 if(format < VK_FORMAT_BEGIN_RANGE ||
2538 format > VK_FORMAT_END_RANGE)
2539 {
2540 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002541 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002542 return false;
2543 }
2544
2545 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2546 type > VK_IMAGE_TYPE_END_RANGE)
2547 {
2548 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002549 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002550 return false;
2551 }
2552
2553
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002554
2555 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2556 tiling > VK_IMAGE_TILING_END_RANGE)
2557 {
2558 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002559 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002560 return false;
2561 }
2562
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002563 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002564 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002565 }
2566
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002567 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002568 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002569 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002570 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002571 {
2572 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002573 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002574 return false;
2575 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002576 }
2577
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002578 return true;
2579}
2580
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002581VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002582 VkPhysicalDevice physicalDevice,
2583 VkFormat format,
2584 VkImageType type,
2585 uint32_t samples,
2586 VkImageUsageFlags usage,
2587 VkImageTiling tiling,
2588 uint32_t* pNumProperties,
2589 VkSparseImageFormatProperties* pProperties)
2590{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002591 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002592
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002593 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002594}
2595
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002596bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002597 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002598 uint32_t bindInfoCount,
2599 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002600{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002601 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002602 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002603 }
2604
2605 return true;
2606}
2607
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002608bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002609 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002610 uint32_t bindInfoCount,
2611 const VkBindSparseInfo* pBindInfo,
2612 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002613 VkResult result)
2614{
2615
2616
2617
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002618 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002619 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002620 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002621 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2622 return false;
2623 }
2624
2625 return true;
2626}
2627
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002628VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002629 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002630 uint32_t bindInfoCount,
2631 const VkBindSparseInfo* pBindInfo,
2632 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002633{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002634 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002635
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002636 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002637
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002638 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002639
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002640 return result;
2641}
2642
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002643bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002644 VkDevice device,
2645 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002646{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002647 if(pCreateInfo != nullptr)
2648 {
2649 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002650 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002651 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002652 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002653 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002654 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002655 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002656
2657 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002658}
2659
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002660bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002661 VkDevice device,
2662 VkFence* pFence,
2663 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002664{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002665
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002666 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002667 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002668 }
2669
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002670 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002671 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002672 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002673 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2674 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002675 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002676
2677 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002678}
2679
2680VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2681 VkDevice device,
2682 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002683 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002684 VkFence* pFence)
2685{
2686 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002687
Chia-I Wuf7458c52015-10-26 21:10:41 +08002688 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002689
2690 PostCreateFence(device, pFence, result);
2691
2692 return result;
2693}
2694
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002695bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002696 VkDevice device,
2697 const VkFence* pFences)
2698{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002699 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002700 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002701 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002702
2703 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002704}
2705
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002706bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002707 VkDevice device,
2708 uint32_t fenceCount,
2709 VkResult result)
2710{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002711
2712
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002713 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002714 {
2715 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002716 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2717 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002718 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002719
2720 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002721}
2722
2723VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2724 VkDevice device,
2725 uint32_t fenceCount,
2726 const VkFence* pFences)
2727{
2728 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002729
Jeremy Hayes99a96322015-06-26 12:48:09 -06002730 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2731
2732 PostResetFences(device, fenceCount, result);
2733
2734 return result;
2735}
2736
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002737bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002738 VkDevice device,
2739 VkFence fence,
2740 VkResult result)
2741{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002742
Jeremy Hayes99a96322015-06-26 12:48:09 -06002743
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002744 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002745 {
2746 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002747 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2748 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002749 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002750
2751 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002752}
2753
2754VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2755 VkDevice device,
2756 VkFence fence)
2757{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002758 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2759
2760 PostGetFenceStatus(device, fence, result);
2761
2762 return result;
2763}
2764
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002765bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002766 VkDevice device,
2767 const VkFence* pFences)
2768{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002769 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002770 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002771 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002772
2773 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002774}
2775
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002776bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002777 VkDevice device,
2778 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002779 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002780 uint64_t timeout,
2781 VkResult result)
2782{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002783
2784
2785
2786
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002787 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002788 {
2789 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002790 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2791 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002792 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002793
2794 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002795}
2796
2797VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2798 VkDevice device,
2799 uint32_t fenceCount,
2800 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002801 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002802 uint64_t timeout)
2803{
2804 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002805
Jeremy Hayes99a96322015-06-26 12:48:09 -06002806 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2807
2808 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2809
2810 return result;
2811}
2812
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002813bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002814 VkDevice device,
2815 const VkSemaphoreCreateInfo* pCreateInfo)
2816{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002817 if(pCreateInfo != nullptr)
2818 {
2819 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002821 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002822 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002823 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002824 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002825 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002826
2827 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002828}
2829
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002830bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002831 VkDevice device,
2832 VkSemaphore* pSemaphore,
2833 VkResult result)
2834{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002835
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002836 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002837 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002838 }
2839
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002840 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002841 {
2842 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002843 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2844 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002845 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002846
2847 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002848}
2849
2850VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
2851 VkDevice device,
2852 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002853 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002854 VkSemaphore* pSemaphore)
2855{
2856 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002857
Chia-I Wuf7458c52015-10-26 21:10:41 +08002858 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002859
2860 PostCreateSemaphore(device, pSemaphore, result);
2861
2862 return result;
2863}
2864
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002865bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002866 VkDevice device,
2867 const VkEventCreateInfo* pCreateInfo)
2868{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002869 if(pCreateInfo != nullptr)
2870 {
2871 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002872 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002873 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002874 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002875 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002876 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002877 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002878
2879 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002880}
2881
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002882bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002883 VkDevice device,
2884 VkEvent* pEvent,
2885 VkResult result)
2886{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002887
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002888 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002889 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002890 }
2891
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002892 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002893 {
2894 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002895 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2896 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002897 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002898
2899 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002900}
2901
2902VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
2903 VkDevice device,
2904 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002905 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002906 VkEvent* pEvent)
2907{
2908 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002909
Chia-I Wuf7458c52015-10-26 21:10:41 +08002910 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002911
2912 PostCreateEvent(device, pEvent, result);
2913
2914 return result;
2915}
2916
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002917bool PostGetEventStatus(
2918 VkDevice device,
2919 VkEvent event,
2920 VkResult result)
2921{
2922
Jeremy Hayes99a96322015-06-26 12:48:09 -06002923
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002924 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002925 {
2926 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002927 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2928 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002929 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002930
2931 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002932}
2933
2934VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
2935 VkDevice device,
2936 VkEvent event)
2937{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002938 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2939
2940 PostGetEventStatus(device, event, result);
2941
2942 return result;
2943}
2944
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002945bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002946 VkDevice device,
2947 VkEvent event,
2948 VkResult result)
2949{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002950
Jeremy Hayes99a96322015-06-26 12:48:09 -06002951
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002952 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002953 {
2954 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2956 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002957 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002958
2959 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002960}
2961
2962VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
2963 VkDevice device,
2964 VkEvent event)
2965{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002966 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
2967
2968 PostSetEvent(device, event, result);
2969
2970 return result;
2971}
2972
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002973bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002974 VkDevice device,
2975 VkEvent event,
2976 VkResult result)
2977{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002978
Jeremy Hayes99a96322015-06-26 12:48:09 -06002979
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002980 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002981 {
2982 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002983 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2984 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002985 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002986
2987 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002988}
2989
2990VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
2991 VkDevice device,
2992 VkEvent event)
2993{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002994 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
2995
2996 PostResetEvent(device, event, result);
2997
2998 return result;
2999}
3000
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003001bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003002 VkDevice device,
3003 const VkQueryPoolCreateInfo* pCreateInfo)
3004{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003005 if(pCreateInfo != nullptr)
3006 {
3007 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003008 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003009 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003010 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003011 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003012 }
3013 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3014 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3015 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003017 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003018 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003019 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003020 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003021
3022 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003023}
3024
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003025bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003026 VkDevice device,
3027 VkQueryPool* pQueryPool,
3028 VkResult result)
3029{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003030
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003031 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003032 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033 }
3034
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003035 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003036 {
3037 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003038 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3039 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003040 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003041
3042 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003043}
3044
3045VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3046 VkDevice device,
3047 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003048 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003049 VkQueryPool* pQueryPool)
3050{
3051 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003052
Chia-I Wuf7458c52015-10-26 21:10:41 +08003053 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003054
3055 PostCreateQueryPool(device, pQueryPool, result);
3056
3057 return result;
3058}
3059
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003060bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003061 VkDevice device,
3062 VkQueryPool queryPool,
3063 uint32_t startQuery,
3064 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003065 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003066 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003067 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003068 VkQueryResultFlags flags,
3069 VkResult result)
3070{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071
Jeremy Hayes99a96322015-06-26 12:48:09 -06003072
3073
3074
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003075 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003076 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003077 }
3078
Jeremy Hayes99a96322015-06-26 12:48:09 -06003079
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003080 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003081 {
3082 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003083 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3084 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003085 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003086
3087 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003088}
3089
3090VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3091 VkDevice device,
3092 VkQueryPool queryPool,
3093 uint32_t startQuery,
3094 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003095 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003096 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003097 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003098 VkQueryResultFlags flags)
3099{
Chia-I Wuccc93a72015-10-26 18:36:20 +08003100 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003101
Chia-I Wuccc93a72015-10-26 18:36:20 +08003102 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003103
3104 return result;
3105}
3106
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003107bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003108 VkDevice device,
3109 const VkBufferCreateInfo* pCreateInfo)
3110{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003111 if(pCreateInfo != nullptr)
3112 {
3113 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003114 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003116 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003117 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003118 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003119 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3120 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003122 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003123 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003124 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003125 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003126 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003127 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003128 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003129 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003130
3131 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003132}
3133
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003134bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003135 VkDevice device,
3136 VkBuffer* pBuffer,
3137 VkResult result)
3138{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003139
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003140 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003142 }
3143
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003144 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003145 {
3146 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3148 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003149 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003150
3151 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003152}
3153
3154VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3155 VkDevice device,
3156 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003157 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003158 VkBuffer* pBuffer)
3159{
3160 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003161
Chia-I Wuf7458c52015-10-26 21:10:41 +08003162 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003163
3164 PostCreateBuffer(device, pBuffer, result);
3165
3166 return result;
3167}
3168
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003169bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003170 VkDevice device,
3171 const VkBufferViewCreateInfo* pCreateInfo)
3172{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003173 if(pCreateInfo != nullptr)
3174 {
3175 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003176 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003177 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003178 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003179 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003180 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003181 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3182 pCreateInfo->format > VK_FORMAT_END_RANGE)
3183 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003184 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003185 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003186 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003187 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003188 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003189
3190 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003191}
3192
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003193bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003194 VkDevice device,
3195 VkBufferView* pView,
3196 VkResult result)
3197{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003198
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003199 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003200 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003201 }
3202
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003203 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003204 {
3205 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003206 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3207 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003208 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003209
3210 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003211}
3212
3213VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3214 VkDevice device,
3215 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003216 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003217 VkBufferView* pView)
3218{
3219 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003220
Chia-I Wuf7458c52015-10-26 21:10:41 +08003221 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003222
3223 PostCreateBufferView(device, pView, result);
3224
3225 return result;
3226}
3227
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003228bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003229 VkDevice device,
3230 const VkImageCreateInfo* pCreateInfo)
3231{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003232 if(pCreateInfo != nullptr)
3233 {
3234 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003235 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003236 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003237 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003238 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003239 }
3240 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3241 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3242 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003243 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003244 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003245 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003246 }
3247 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3248 pCreateInfo->format > VK_FORMAT_END_RANGE)
3249 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003251 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003252 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003253 }
3254 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3255 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3256 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003258 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003259 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003260 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003261 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3262 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003263 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003264 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3265 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003266 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003267 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003268 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003269 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003270 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003271 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003272
3273 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003274}
3275
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003276bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003277 VkDevice device,
3278 VkImage* pImage,
3279 VkResult result)
3280{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003281
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003282 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003283 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003284 }
3285
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003286 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003287 {
3288 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003289 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3290 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003291 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003292
3293 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003294}
3295
Jeremy Hayes99a96322015-06-26 12:48:09 -06003296VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3297 VkDevice device,
3298 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003299 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003300 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003301{
3302 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003303
Chia-I Wuf7458c52015-10-26 21:10:41 +08003304 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003305
3306 PostCreateImage(device, pImage, result);
3307
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003308 return result;
3309}
3310
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003311bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003312 VkDevice device,
3313 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003314{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003315 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003317 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003318 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003319 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003320 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003321 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003322 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003323 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003324 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003325
3326 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003327}
3328
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003329bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003330 VkDevice device,
3331 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003332 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003333{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003334
Jeremy Hayes99a96322015-06-26 12:48:09 -06003335
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003336 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003337 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003338 }
3339
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003340 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003341}
3342
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003343VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003344 VkDevice device,
3345 VkImage image,
3346 const VkImageSubresource* pSubresource,
3347 VkSubresourceLayout* pLayout)
3348{
3349 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003350
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003351 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003352
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003353 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003354}
3355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003356bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003357 VkDevice device,
3358 const VkImageViewCreateInfo* pCreateInfo)
3359{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003360 if(pCreateInfo != nullptr)
3361 {
3362 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003363 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003365 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003366 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003367 }
3368 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3369 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3370 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003371 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003372 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003373 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003374 }
3375 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3376 pCreateInfo->format > VK_FORMAT_END_RANGE)
3377 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003378 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003379 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003380 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003381 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003382 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3383 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003384 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003385 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003386 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003387 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003388 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003389 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3390 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003391 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003392 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003393 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003394 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003395 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003396 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3397 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003398 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003399 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003400 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003401 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003402 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003403 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3404 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003405 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003406 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003407 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003408 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003409 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003410 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003411
3412 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003413}
3414
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003415bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003416 VkDevice device,
3417 VkImageView* pView,
3418 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003419{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003420
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003421 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003422 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003423 }
3424
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003425 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003426 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003427 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003428 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3429 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003430 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003431
3432 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003433}
3434
3435VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3436 VkDevice device,
3437 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003438 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003439 VkImageView* pView)
3440{
3441 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003442
Chia-I Wuf7458c52015-10-26 21:10:41 +08003443 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003444
3445 PostCreateImageView(device, pView, result);
3446
3447 return result;
3448}
3449
Michael Lentine03d8e572015-09-15 14:59:14 -05003450bool PreCreateShaderModule(
3451 VkDevice device,
3452 const VkShaderModuleCreateInfo* pCreateInfo)
3453{
3454 if(pCreateInfo) {
3455 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3456 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3457 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3458 return false;
3459 }
3460 if(!pCreateInfo->pCode) {
3461 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3462 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3463 return false;
3464 }
3465 } else {
3466 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3467 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3468 return false;
3469 }
3470
3471 return true;
3472}
3473
3474bool PostCreateShaderModule(
3475 VkDevice device,
3476 VkShaderModule* pShaderModule,
3477 VkResult result)
3478{
3479 if(result < VK_SUCCESS) {
3480 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3481 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3482 return false;
3483 }
3484
3485 return true;
3486}
3487
3488VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3489 VkDevice device,
3490 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003491 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003492 VkShaderModule* pShaderModule)
3493{
3494 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003495 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003496 PostCreateShaderModule(device, pShaderModule, result);
3497 return result;
3498}
3499
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003500bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003501 VkDevice device,
3502 const VkShaderCreateInfo* pCreateInfo)
3503{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003504 if(pCreateInfo != nullptr)
3505 {
3506 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003507 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003508 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003509 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003510 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003511 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003512 if(pCreateInfo->pName != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003513 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003514 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003515 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003516
3517 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003518}
3519
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003520bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003521 VkDevice device,
3522 VkShader* pShader,
3523 VkResult result)
3524{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003525
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003526 if(pShader != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003527 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003528 }
3529
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003530 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003531 {
3532 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003533 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3534 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003535 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003536
3537 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003538}
3539
3540VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3541 VkDevice device,
3542 const VkShaderCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003543 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003544 VkShader* pShader)
3545{
3546 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003547
Chia-I Wuf7458c52015-10-26 21:10:41 +08003548 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pAllocator, pShader);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003549
3550 PostCreateShader(device, pShader, result);
3551
3552 return result;
3553}
3554
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003555bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003556 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003557 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003558{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003559 if(pCreateInfo != nullptr)
3560 {
3561 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003562 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003563 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003564 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003565 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003566 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003567 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003568 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003569 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003570 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003571
3572 return true;
3573}
3574
3575bool PostCreatePipelineCache(
3576 VkDevice device,
3577 VkPipelineCache* pPipelineCache,
3578 VkResult result)
3579{
3580
3581 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003582 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003583 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003584
3585 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003586 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003587 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003588 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3589 return false;
3590 }
3591
3592 return true;
3593}
3594
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003595VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003596 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003597 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003598 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003599 VkPipelineCache* pPipelineCache)
3600{
3601 PreCreatePipelineCache(device, pCreateInfo);
3602
Chia-I Wuf7458c52015-10-26 21:10:41 +08003603 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003604
3605 PostCreatePipelineCache(device, pPipelineCache, result);
3606
3607 return result;
3608}
3609
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003610bool PostGetPipelineCacheData(
3611 VkDevice device,
3612 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003613 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003614 void* pData,
3615 VkResult result)
3616{
3617
3618
Chia-I Wub16facd2015-10-26 19:17:06 +08003619 if(pDataSize != nullptr)
3620 {
3621 }
3622
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003623 if(pData != nullptr)
3624 {
3625 }
3626
3627 if(result < VK_SUCCESS)
3628 {
3629 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3631 return false;
3632 }
3633
3634 return true;
3635}
3636
3637VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3638 VkDevice device,
3639 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003640 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003641 void* pData)
3642{
Chia-I Wub16facd2015-10-26 19:17:06 +08003643 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003644
Chia-I Wub16facd2015-10-26 19:17:06 +08003645 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003646
3647 return result;
3648}
3649
3650bool PreMergePipelineCaches(
3651 VkDevice device,
3652 const VkPipelineCache* pSrcCaches)
3653{
3654 if(pSrcCaches != nullptr)
3655 {
3656 }
3657
3658 return true;
3659}
3660
3661bool PostMergePipelineCaches(
3662 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003663 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003664 uint32_t srcCacheCount,
3665 VkResult result)
3666{
3667
3668
3669
3670 if(result < VK_SUCCESS)
3671 {
3672 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3673 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3674 return false;
3675 }
3676
3677 return true;
3678}
3679
3680VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3681 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003682 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003683 uint32_t srcCacheCount,
3684 const VkPipelineCache* pSrcCaches)
3685{
3686 PreMergePipelineCaches(device, pSrcCaches);
3687
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003688 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003689
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003690 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003691
3692 return result;
3693}
3694
3695bool PreCreateGraphicsPipelines(
3696 VkDevice device,
3697 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3698{
3699 if(pCreateInfos != nullptr)
3700 {
3701 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3702 {
3703 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3704 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3705 return false;
3706 }
3707 if(pCreateInfos->pStages != nullptr)
3708 {
3709 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3710 {
3711 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3712 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3713 return false;
3714 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003715 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3716 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003717 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003718 {
3719 }
3720 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3721 {
3722 }
3723 }
3724 }
3725 if(pCreateInfos->pVertexInputState != nullptr)
3726 {
3727 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3728 {
3729 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3730 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3731 return false;
3732 }
3733 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3734 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003735 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3736 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003737 {
3738 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003739 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003740 return false;
3741 }
3742 }
3743 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3744 {
3745 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3746 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3747 {
3748 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3749 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3750 return false;
3751 }
3752 }
3753 }
3754 if(pCreateInfos->pInputAssemblyState != nullptr)
3755 {
3756 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3757 {
3758 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3759 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3760 return false;
3761 }
3762 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3763 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3764 {
3765 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3766 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3767 return false;
3768 }
3769 }
3770 if(pCreateInfos->pTessellationState != nullptr)
3771 {
3772 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3773 {
3774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3775 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3776 return false;
3777 }
3778 }
3779 if(pCreateInfos->pViewportState != nullptr)
3780 {
3781 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3782 {
3783 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3784 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3785 return false;
3786 }
3787 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003788 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003789 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003790 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003791 {
3792 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003793 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003794 return false;
3795 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003796 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3797 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003798 {
3799 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003800 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003801 return false;
3802 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003803 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003804 {
3805 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003806 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003807 return false;
3808 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003809 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3810 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003811 {
3812 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003813 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003814 return false;
3815 }
3816 }
3817 if(pCreateInfos->pMultisampleState != nullptr)
3818 {
3819 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3820 {
3821 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3822 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3823 return false;
3824 }
3825 }
3826 if(pCreateInfos->pDepthStencilState != nullptr)
3827 {
3828 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3829 {
3830 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3831 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3832 return false;
3833 }
3834 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3835 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3836 {
3837 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3838 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3839 return false;
3840 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003841 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3842 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003843 {
3844 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003845 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003846 return false;
3847 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003848 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3849 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003850 {
3851 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003852 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003853 return false;
3854 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003855 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3856 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003857 {
3858 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003859 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003860 return false;
3861 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003862 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3863 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003864 {
3865 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003866 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003867 return false;
3868 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003869 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3870 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003871 {
3872 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003873 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003874 return false;
3875 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003876 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3877 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003878 {
3879 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003880 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003881 return false;
3882 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003883 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3884 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003885 {
3886 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003887 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003888 return false;
3889 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003890 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3891 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003892 {
3893 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003894 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003895 return false;
3896 }
3897 }
3898 if(pCreateInfos->pColorBlendState != nullptr)
3899 {
3900 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3901 {
3902 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3903 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3904 return false;
3905 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003906 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3907 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003908 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3909 {
3910 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3911 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3912 return false;
3913 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003914 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003915 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003916 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3917 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003918 {
3919 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003920 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003921 return false;
3922 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003923 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3924 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003925 {
3926 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003927 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003928 return false;
3929 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003930 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3931 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003932 {
3933 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003934 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003935 return false;
3936 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003937 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3938 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003939 {
3940 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003941 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003942 return false;
3943 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003944 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3945 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003946 {
3947 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003948 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003949 return false;
3950 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003951 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3952 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003953 {
3954 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003955 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003956 return false;
3957 }
3958 }
3959 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003960 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3961 {
3962 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3963 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3964 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003965 }
3966
3967 return true;
3968}
3969
3970bool PostCreateGraphicsPipelines(
3971 VkDevice device,
3972 VkPipelineCache pipelineCache,
3973 uint32_t count,
3974 VkPipeline* pPipelines,
3975 VkResult result)
3976{
3977
3978
3979
3980 if(pPipelines != nullptr)
3981 {
3982 }
3983
3984 if(result < VK_SUCCESS)
3985 {
3986 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
3987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3988 return false;
3989 }
3990
3991 return true;
3992}
3993
3994VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
3995 VkDevice device,
3996 VkPipelineCache pipelineCache,
3997 uint32_t count,
3998 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003999 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004000 VkPipeline* pPipelines)
4001{
4002 PreCreateGraphicsPipelines(device, pCreateInfos);
4003
Chia-I Wuf7458c52015-10-26 21:10:41 +08004004 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004005
4006 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4007
4008 return result;
4009}
4010
4011bool PreCreateComputePipelines(
4012 VkDevice device,
4013 const VkComputePipelineCreateInfo* pCreateInfos)
4014{
4015 if(pCreateInfos != nullptr)
4016 {
4017 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4018 {
4019 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4020 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4021 return false;
4022 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004023 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004024 {
4025 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4026 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4027 return false;
4028 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004029 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004030 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004031 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004032 {
4033 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004034 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004035 {
4036 }
4037 }
4038 }
4039
4040 return true;
4041}
4042
4043bool PostCreateComputePipelines(
4044 VkDevice device,
4045 VkPipelineCache pipelineCache,
4046 uint32_t count,
4047 VkPipeline* pPipelines,
4048 VkResult result)
4049{
4050
4051
4052
4053 if(pPipelines != nullptr)
4054 {
4055 }
4056
4057 if(result < VK_SUCCESS)
4058 {
4059 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4060 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4061 return false;
4062 }
4063
4064 return true;
4065}
4066
4067VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4068 VkDevice device,
4069 VkPipelineCache pipelineCache,
4070 uint32_t count,
4071 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004072 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004073 VkPipeline* pPipelines)
4074{
4075 PreCreateComputePipelines(device, pCreateInfos);
4076
Chia-I Wuf7458c52015-10-26 21:10:41 +08004077 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004078
4079 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4080
4081 return result;
4082}
4083
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004084bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004085 VkDevice device,
4086 const VkPipelineLayoutCreateInfo* pCreateInfo)
4087{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004088 if(pCreateInfo != nullptr)
4089 {
4090 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004091 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004092 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004093 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4094 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004095 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004096 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004097 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004098 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004099 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004100 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004101 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004102 }
4103
4104 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004105}
4106
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004107bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004108 VkDevice device,
4109 VkPipelineLayout* pPipelineLayout,
4110 VkResult result)
4111{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004112
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004113 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004114 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004115 }
4116
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004117 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004118 {
4119 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004120 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4121 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004122 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004123
4124 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004125}
4126
4127VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4128 VkDevice device,
4129 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004130 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004131 VkPipelineLayout* pPipelineLayout)
4132{
4133 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004134
Chia-I Wuf7458c52015-10-26 21:10:41 +08004135 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004136
4137 PostCreatePipelineLayout(device, pPipelineLayout, result);
4138
4139 return result;
4140}
4141
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004142bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004143 VkDevice device,
4144 const VkSamplerCreateInfo* pCreateInfo)
4145{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004146 if(pCreateInfo != nullptr)
4147 {
4148 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004149 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004150 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004151 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004152 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004153 }
Chia-I Wub99df442015-10-26 16:49:32 +08004154 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4155 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004156 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004157 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004158 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004159 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004160 }
Chia-I Wub99df442015-10-26 16:49:32 +08004161 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4162 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004163 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004164 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004165 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004166 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004167 }
Chia-I Wub99df442015-10-26 16:49:32 +08004168 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4169 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004170 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004171 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004172 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004173 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004174 }
Chia-I Wub99df442015-10-26 16:49:32 +08004175 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4176 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004177 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004178 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004179 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004180 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004181 }
Chia-I Wub99df442015-10-26 16:49:32 +08004182 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4183 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004184 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004185 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004186 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004187 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004188 }
Chia-I Wub99df442015-10-26 16:49:32 +08004189 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4190 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004191 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004192 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004193 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004194 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004195 }
4196 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4197 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4198 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004199 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004200 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004201 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004202 }
4203 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4204 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4205 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004206 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004207 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004208 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004209 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004210 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004211
4212 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004213}
4214
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004215bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004216 VkDevice device,
4217 VkSampler* pSampler,
4218 VkResult result)
4219{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004220
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004221 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004222 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004223 }
4224
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004225 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004226 {
4227 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004228 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4229 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004230 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004231
4232 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004233}
4234
4235VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4236 VkDevice device,
4237 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004238 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004239 VkSampler* pSampler)
4240{
4241 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004242
Chia-I Wuf7458c52015-10-26 21:10:41 +08004243 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004244
4245 PostCreateSampler(device, pSampler, result);
4246
4247 return result;
4248}
4249
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004250bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004251 VkDevice device,
4252 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4253{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004254 if(pCreateInfo != nullptr)
4255 {
4256 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004257 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004258 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004259 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004260 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004261 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004262 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004263 {
Chia-I Wud50a7d72015-10-26 20:48:51 +08004264 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4265 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004266 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004267 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004268 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004269 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004270 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004271 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004272 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004273 }
4274 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004275 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004276
4277 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004278}
4279
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004280bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004281 VkDevice device,
4282 VkDescriptorSetLayout* pSetLayout,
4283 VkResult result)
4284{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004285
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004286 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004287 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004288 }
4289
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004290 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004291 {
4292 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004293 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4294 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004295 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004296
4297 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004298}
4299
4300VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4301 VkDevice device,
4302 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004303 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004304 VkDescriptorSetLayout* pSetLayout)
4305{
4306 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004307
Chia-I Wuf7458c52015-10-26 21:10:41 +08004308 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004309
4310 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4311
4312 return result;
4313}
4314
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004315bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004316 VkDevice device,
4317 const VkDescriptorPoolCreateInfo* pCreateInfo)
4318{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004319 if(pCreateInfo != nullptr)
4320 {
4321 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004322 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004323 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004324 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004325 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004326 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004327 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004328 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004329 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4330 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004331 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004332 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004333 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004334 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004335 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004336 }
4337 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004338
4339 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004340}
4341
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004342bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004343 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004344 uint32_t maxSets,
4345 VkDescriptorPool* pDescriptorPool,
4346 VkResult result)
4347{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004348
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004349 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004350
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004351 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004352 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004353 }
4354
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004355 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004356 {
4357 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004358 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4359 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004360 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004361
4362 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004363}
4364
4365VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4366 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004367 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004368 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004369 VkDescriptorPool* pDescriptorPool)
4370{
4371 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004372
Chia-I Wuf7458c52015-10-26 21:10:41 +08004373 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004374
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004375 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004376
4377 return result;
4378}
4379
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004380bool PostResetDescriptorPool(
4381 VkDevice device,
4382 VkDescriptorPool descriptorPool,
4383 VkResult result)
4384{
4385
Jeremy Hayes99a96322015-06-26 12:48:09 -06004386
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004387 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004388 {
4389 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004390 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4391 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004392 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004393
4394 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004395}
4396
4397VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4398 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004399 VkDescriptorPool descriptorPool,
4400 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004401{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004402 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004403
4404 PostResetDescriptorPool(device, descriptorPool, result);
4405
4406 return result;
4407}
4408
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004409bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004410 VkDevice device,
4411 const VkDescriptorSetLayout* pSetLayouts)
4412{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004413 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004414 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004415 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004416
4417 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004418}
4419
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004420bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004421 VkDevice device,
4422 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004423 uint32_t count,
4424 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004425 VkResult result)
4426{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004427
Jeremy Hayes99a96322015-06-26 12:48:09 -06004428
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004429 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004430 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004431 }
4432
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004433 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004434 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004435 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004436 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4437 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004438 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004439
4440 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004441}
4442
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004443VK_LAYER_EXPORT VkResult VKAPI vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004444 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004445 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004446 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004447{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004448 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004449
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004450 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004451
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004452 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004453
4454 return result;
4455}
4456
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004457bool PreFreeDescriptorSets(
4458 VkDevice device,
4459 const VkDescriptorSet* pDescriptorSets)
4460{
4461 if(pDescriptorSets != nullptr)
4462 {
4463 }
4464
4465 return true;
4466}
4467
4468bool PostFreeDescriptorSets(
4469 VkDevice device,
4470 VkDescriptorPool descriptorPool,
4471 uint32_t count,
4472 VkResult result)
4473{
4474
4475
4476
4477 if(result < VK_SUCCESS)
4478 {
4479 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4480 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4481 return false;
4482 }
4483
4484 return true;
4485}
4486
4487VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4488 VkDevice device,
4489 VkDescriptorPool descriptorPool,
4490 uint32_t count,
4491 const VkDescriptorSet* pDescriptorSets)
4492{
4493 PreFreeDescriptorSets(device, pDescriptorSets);
4494
4495 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4496
4497 PostFreeDescriptorSets(device, descriptorPool, count, result);
4498
4499 return result;
4500}
4501
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004502bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004503 VkDevice device,
4504 const VkWriteDescriptorSet* pDescriptorWrites,
4505 const VkCopyDescriptorSet* pDescriptorCopies)
4506{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004507 if(pDescriptorWrites != nullptr)
4508 {
4509 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004510 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004511 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004512 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004513 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004514 }
4515 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4516 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4517 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004518 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004519 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004520 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004521 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004522 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4523 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4524 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004525 {
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004526 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4527 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004528 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004529 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004530 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004531 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004532 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004533 }
4534 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004535
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004536 if(pDescriptorCopies != nullptr)
4537 {
4538 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004539 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004540 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004541 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004542 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004543 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004544 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004545
4546 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004547}
4548
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004549VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004550 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004551 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004552 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004553 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004554 const VkCopyDescriptorSet* pDescriptorCopies)
4555{
4556 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004557
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004558 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004559}
4560
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004561bool PreCreateFramebuffer(
4562 VkDevice device,
4563 const VkFramebufferCreateInfo* pCreateInfo)
4564{
4565 if(pCreateInfo != nullptr)
4566 {
4567 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4568 {
4569 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4570 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4571 return false;
4572 }
4573 if(pCreateInfo->pAttachments != nullptr)
4574 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004575 }
4576 }
4577
4578 return true;
4579}
4580
4581bool PostCreateFramebuffer(
4582 VkDevice device,
4583 VkFramebuffer* pFramebuffer,
4584 VkResult result)
4585{
4586
4587 if(pFramebuffer != nullptr)
4588 {
4589 }
4590
4591 if(result < VK_SUCCESS)
4592 {
4593 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4594 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4595 return false;
4596 }
4597
4598 return true;
4599}
4600
4601VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4602 VkDevice device,
4603 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004604 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004605 VkFramebuffer* pFramebuffer)
4606{
4607 PreCreateFramebuffer(device, pCreateInfo);
4608
Chia-I Wuf7458c52015-10-26 21:10:41 +08004609 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004610
4611 PostCreateFramebuffer(device, pFramebuffer, result);
4612
4613 return result;
4614}
4615
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004616bool PreCreateRenderPass(
4617 VkDevice device,
4618 const VkRenderPassCreateInfo* pCreateInfo)
4619{
4620 if(pCreateInfo != nullptr)
4621 {
4622 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4623 {
4624 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4625 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4626 return false;
4627 }
4628 if(pCreateInfo->pAttachments != nullptr)
4629 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004630 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4631 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4632 {
4633 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4634 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4635 return false;
4636 }
4637 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4638 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4639 {
4640 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4641 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4642 return false;
4643 }
4644 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4645 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4646 {
4647 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4648 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4649 return false;
4650 }
4651 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4652 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4653 {
4654 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4655 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4656 return false;
4657 }
4658 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4659 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4660 {
4661 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4662 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4663 return false;
4664 }
4665 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4666 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4667 {
4668 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4669 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4670 return false;
4671 }
4672 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4673 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4674 {
4675 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4676 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4677 return false;
4678 }
4679 }
4680 if(pCreateInfo->pSubpasses != nullptr)
4681 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004682 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4683 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4684 {
4685 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4686 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4687 return false;
4688 }
Cody Northropa505dda2015-08-04 11:16:41 -06004689 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004690 {
Cody Northropa505dda2015-08-04 11:16:41 -06004691 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4692 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004693 {
4694 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004695 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004696 return false;
4697 }
4698 }
Cody Northropa505dda2015-08-04 11:16:41 -06004699 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004700 {
Cody Northropa505dda2015-08-04 11:16:41 -06004701 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4702 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004703 {
4704 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004705 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004706 return false;
4707 }
4708 }
Cody Northropa505dda2015-08-04 11:16:41 -06004709 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004710 {
Cody Northropa505dda2015-08-04 11:16:41 -06004711 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4712 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004713 {
4714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004715 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004716 return false;
4717 }
4718 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004719 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4720 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4721 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004722 {
4723 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004724 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004725 return false;
4726 }
Cody Northropa505dda2015-08-04 11:16:41 -06004727 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004728 {
Cody Northropa505dda2015-08-04 11:16:41 -06004729 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4730 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004731 {
4732 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004733 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004734 return false;
4735 }
4736 }
4737 }
4738 if(pCreateInfo->pDependencies != nullptr)
4739 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004740 }
4741 }
4742
4743 return true;
4744}
4745
4746bool PostCreateRenderPass(
4747 VkDevice device,
4748 VkRenderPass* pRenderPass,
4749 VkResult result)
4750{
4751
4752 if(pRenderPass != nullptr)
4753 {
4754 }
4755
4756 if(result < VK_SUCCESS)
4757 {
4758 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
4759 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4760 return false;
4761 }
4762
4763 return true;
4764}
4765
4766VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
4767 VkDevice device,
4768 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004769 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004770 VkRenderPass* pRenderPass)
4771{
4772 PreCreateRenderPass(device, pCreateInfo);
4773
Chia-I Wuf7458c52015-10-26 21:10:41 +08004774 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004775
4776 PostCreateRenderPass(device, pRenderPass, result);
4777
4778 return result;
4779}
4780
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004781bool PostGetRenderAreaGranularity(
4782 VkDevice device,
4783 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004784 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004785{
4786
4787
4788 if(pGranularity != nullptr)
4789 {
4790 }
4791
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004792 return true;
4793}
4794
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004795VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004796 VkDevice device,
4797 VkRenderPass renderPass,
4798 VkExtent2D* pGranularity)
4799{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004800 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004801
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004802 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004803}
4804
4805bool PreCreateCommandPool(
4806 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004807 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004808{
4809 if(pCreateInfo != nullptr)
4810 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004811 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004812 {
4813 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4814 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4815 return false;
4816 }
4817 }
4818
4819 return true;
4820}
4821
4822bool PostCreateCommandPool(
4823 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004824 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004825 VkResult result)
4826{
4827
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004828 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004829 {
4830 }
4831
4832 if(result < VK_SUCCESS)
4833 {
4834 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4835 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4836 return false;
4837 }
4838
4839 return true;
4840}
4841
4842VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
4843 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004844 const VkCommandPoolCreateInfo* pCreateInfo,
4845 const VkAllocationCallbacks* pAllocator,
4846 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004847{
4848 PreCreateCommandPool(device, pCreateInfo);
4849
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004850 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004851
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004852 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004853
4854 return result;
4855}
4856
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004857bool PostResetCommandPool(
4858 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004859 VkCommandPool commandPool,
4860 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004861 VkResult result)
4862{
4863
4864
4865
4866 if(result < VK_SUCCESS)
4867 {
4868 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4869 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4870 return false;
4871 }
4872
4873 return true;
4874}
4875
4876VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
4877 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004878 VkCommandPool commandPool,
4879 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004880{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004881 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004882
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004883 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004884
4885 return result;
4886}
4887
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004888bool PreCreateCommandBuffer(
4889 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004890 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004891{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004892 if(pCreateInfo != nullptr)
4893 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004894 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004895 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004896 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004897 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004898 return false;
4899 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004900 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4901 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004902 {
4903 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004904 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004905 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004906 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004907 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004908
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004909 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004910}
4911
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004912bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004913 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004914 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004915 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004916{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004917
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004918 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004919 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004920 }
4921
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004922 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004923 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004924 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004925 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4926 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004927 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004928
4929 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004930}
4931
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004932VK_LAYER_EXPORT VkResult VKAPI vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004933 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004934 const VkCommandBufferAllocateInfo* pCreateInfo,
4935 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004936{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004937 PreCreateCommandBuffer(device, pCreateInfo);
4938
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004939 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004940
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004941 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004942
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004943 return result;
4944}
4945
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004946bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004947 VkCommandBuffer commandBuffer,
4948 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004949{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004950 if(pBeginInfo != nullptr)
4951 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004952 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004953 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004954 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004955 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004956 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004957 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004958 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004959
4960 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004961}
4962
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004963bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004964 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004965 VkResult result)
4966{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004967
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004968 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004969 {
4970 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004971 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004972 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004973 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004974
4975 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004976}
4977
4978VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004979 VkCommandBuffer commandBuffer,
4980 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004981{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004982 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004983
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004984 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004985
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004986 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004987
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004988 return result;
4989}
4990
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004991bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004992 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004993 VkResult result)
4994{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004995
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004996 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004997 {
4998 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004999 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005000 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005001 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005002
5003 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005004}
5005
5006VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005007 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005008{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005009 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005010
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005011 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005012
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005013 return result;
5014}
5015
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005016bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005017 VkCommandBuffer commandBuffer,
5018 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005019 VkResult result)
5020{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005021
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005022
5023 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005024 {
5025 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005026 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005027 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005029
5030 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005031}
5032
5033VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005034 VkCommandBuffer commandBuffer,
5035 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005036{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005037 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005038
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005039 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005040
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005041 return result;
5042}
5043
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005044bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005045 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005046 VkPipelineBindPoint pipelineBindPoint,
5047 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005048{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005049
5050 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5051 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5052 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005053 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005054 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005055 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005056 }
5057
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005058
5059 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005060}
5061
Jeremy Hayes99a96322015-06-26 12:48:09 -06005062VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005063 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005064 VkPipelineBindPoint pipelineBindPoint,
5065 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005066{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005067 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005068
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005069 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005070}
5071
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005072VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005073{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005074 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005075}
5076
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005077VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005078{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005079 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005080}
5081
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005082VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005083{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005084 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005085}
5086
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005087VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005088{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005089 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005090}
5091
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005092VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005093{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005094 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005095}
5096
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005097VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005098{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005099 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005100}
5101
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005102VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005103{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005104 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005105}
5106
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005107VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005108{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005109 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005110}
5111
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005112VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005113{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005114 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005115}
5116
5117bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005118 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005119 const VkDescriptorSet* pDescriptorSets,
5120 const uint32_t* pDynamicOffsets)
5121{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005122 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005123 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005124 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005125
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005126 if(pDynamicOffsets != nullptr)
5127 {
5128 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005129
5130 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005131}
5132
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005133bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005134 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005135 VkPipelineBindPoint pipelineBindPoint,
5136 VkPipelineLayout layout,
5137 uint32_t firstSet,
5138 uint32_t setCount,
5139 uint32_t dynamicOffsetCount)
5140{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005141
5142 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5143 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5144 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005145 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005146 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005147 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005148 }
5149
5150
5151
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005152
5153
5154 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005155}
5156
5157VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005158 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005159 VkPipelineBindPoint pipelineBindPoint,
5160 VkPipelineLayout layout,
5161 uint32_t firstSet,
5162 uint32_t setCount,
5163 const VkDescriptorSet* pDescriptorSets,
5164 uint32_t dynamicOffsetCount,
5165 const uint32_t* pDynamicOffsets)
5166{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005167 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005168
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005169 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005170
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005171 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005172}
5173
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005174bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005175 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005176 VkBuffer buffer,
5177 VkDeviceSize offset,
5178 VkIndexType indexType)
5179{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005180
Jeremy Hayes99a96322015-06-26 12:48:09 -06005181
5182
5183 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5184 indexType > VK_INDEX_TYPE_END_RANGE)
5185 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005186 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005187 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005188 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005189 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005190
5191 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005192}
5193
5194VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005195 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005196 VkBuffer buffer,
5197 VkDeviceSize offset,
5198 VkIndexType indexType)
5199{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005200 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005201
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005202 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005203}
5204
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005205bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005206 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005207 const VkBuffer* pBuffers,
5208 const VkDeviceSize* pOffsets)
5209{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005210 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005211 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005212 }
5213
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005214 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005215 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005216 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005217
5218 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005219}
5220
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005221bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005222 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005223 uint32_t startBinding,
5224 uint32_t bindingCount)
5225{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005226
5227
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005228
5229 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005230}
5231
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005232VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005233 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005234 uint32_t startBinding,
5235 uint32_t bindingCount,
5236 const VkBuffer* pBuffers,
5237 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005238{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005239 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005240
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005241 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005242
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005243 PostCmdBindVertexBuffers(commandBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005244}
5245
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005246bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005247 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005248 uint32_t firstVertex,
5249 uint32_t vertexCount,
5250 uint32_t firstInstance,
5251 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005252{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005253
5254
5255
5256
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005257
5258 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005259}
5260
Jeremy Hayes99a96322015-06-26 12:48:09 -06005261VK_LAYER_EXPORT void VKAPI vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005262 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005263 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005264 uint32_t instanceCount,
5265 uint32_t firstVertex,
5266 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005267{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005268 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005269
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005270 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005271}
5272
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005273bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005274 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005275 uint32_t firstIndex,
5276 uint32_t indexCount,
5277 int32_t vertexOffset,
5278 uint32_t firstInstance,
5279 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005280{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005281
5282
5283
5284
5285
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005286
5287 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005288}
5289
Jeremy Hayes99a96322015-06-26 12:48:09 -06005290VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005291 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005292 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005293 uint32_t instanceCount,
5294 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005295 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005296 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005297{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005298 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005299
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005300 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005301}
5302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005303bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005304 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005305 VkBuffer buffer,
5306 VkDeviceSize offset,
5307 uint32_t count,
5308 uint32_t stride)
5309{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005310
5311
5312
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005313
5314
5315 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005316}
5317
5318VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005319 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005320 VkBuffer buffer,
5321 VkDeviceSize offset,
5322 uint32_t count,
5323 uint32_t stride)
5324{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005325 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005326
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005327 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005328}
5329
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005330bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005331 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005332 VkBuffer buffer,
5333 VkDeviceSize offset,
5334 uint32_t count,
5335 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005336{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005337
5338
5339
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005340
5341
5342 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005343}
5344
Jeremy Hayes99a96322015-06-26 12:48:09 -06005345VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005346 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005347 VkBuffer buffer,
5348 VkDeviceSize offset,
5349 uint32_t count,
5350 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005351{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005352 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005353
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005354 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005355}
5356
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005357bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005358 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005359 uint32_t x,
5360 uint32_t y,
5361 uint32_t z)
5362{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005363
5364
5365
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005366
5367 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005368}
5369
5370VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005371 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005372 uint32_t x,
5373 uint32_t y,
5374 uint32_t z)
5375{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005376 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005377
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005378 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005379}
5380
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005381bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005382 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005383 VkBuffer buffer,
5384 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005385{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005386
Jeremy Hayes99a96322015-06-26 12:48:09 -06005387
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005388
5389 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005390}
5391
Jeremy Hayes99a96322015-06-26 12:48:09 -06005392VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005393 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005394 VkBuffer buffer,
5395 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005396{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005397 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005398
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005399 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005400}
5401
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005402bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005403 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005404 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005405{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005406 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005407 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005408 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005409
5410 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005411}
5412
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005413bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005414 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005415 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005416 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005417 uint32_t regionCount)
5418{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005419
Jeremy Hayes99a96322015-06-26 12:48:09 -06005420
Jeremy Hayes99a96322015-06-26 12:48:09 -06005421
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005422
5423 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005424}
5425
5426VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005427 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005428 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005429 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005430 uint32_t regionCount,
5431 const VkBufferCopy* pRegions)
5432{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005433 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005434
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005435 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005436
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005437 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005438}
5439
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005440bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005441 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005442 const VkImageCopy* pRegions)
5443{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005444 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005445 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005446 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005447 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005448 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005449 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005450 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005451 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005452 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005453 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005454 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005455 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005456 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005457 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005458 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005459 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005460 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005461
5462 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005463}
5464
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005465bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005466 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005467 VkImage srcImage,
5468 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005469 VkImage dstImage,
5470 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005471 uint32_t regionCount)
5472{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005473
Jeremy Hayes99a96322015-06-26 12:48:09 -06005474
5475 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5476 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5477 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005478 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005479 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005480 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005481 }
5482
Jeremy Hayes99a96322015-06-26 12:48:09 -06005483
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005484 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5485 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005486 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005487 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5488 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005489 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005490 }
5491
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005492
5493 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005494}
5495
5496VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005497 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005498 VkImage srcImage,
5499 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005500 VkImage dstImage,
5501 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005502 uint32_t regionCount,
5503 const VkImageCopy* pRegions)
5504{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005505 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005506
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005507 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005508
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005509 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005510}
5511
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005512bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005513 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005514 const VkImageBlit* pRegions)
5515{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005516 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005517 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005518 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005519 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005520 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005521 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005522 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005523 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005524 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005525 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005526 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005527 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005528 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005529 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005530 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005531 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005532 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005533
5534 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005535}
5536
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005537bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005538 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005539 VkImage srcImage,
5540 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005541 VkImage dstImage,
5542 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005543 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005544 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005545{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005546
Jeremy Hayes99a96322015-06-26 12:48:09 -06005547
5548 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5549 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5550 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005551 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005552 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005553 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005554 }
5555
Jeremy Hayes99a96322015-06-26 12:48:09 -06005556
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005557 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5558 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005559 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005560 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5561 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005562 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005563 }
5564
5565
Chia-I Wub99df442015-10-26 16:49:32 +08005566 if(filter < VK_FILTER_BEGIN_RANGE ||
5567 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005568 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005569 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005570 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005571 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005572 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005573
5574 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005575}
5576
5577VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005578 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005579 VkImage srcImage,
5580 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005581 VkImage dstImage,
5582 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005583 uint32_t regionCount,
5584 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005585 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005586{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005587 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005588
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005589 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005590
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005591 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005592}
5593
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005594bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005595 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005596 const VkBufferImageCopy* pRegions)
5597{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005598 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005599 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005600 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005601 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005602 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005603 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005604 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005605 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005606 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005607 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005608
5609 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005610}
5611
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005612bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005613 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005614 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005615 VkImage dstImage,
5616 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005617 uint32_t regionCount)
5618{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005619
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620
Jeremy Hayes99a96322015-06-26 12:48:09 -06005621
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005622 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5623 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005624 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005625 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5626 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005627 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005628 }
5629
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005630
5631 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005632}
5633
5634VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005635 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005636 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005637 VkImage dstImage,
5638 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005639 uint32_t regionCount,
5640 const VkBufferImageCopy* pRegions)
5641{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005642 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005643
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005644 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005645
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005646 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005647}
5648
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005649bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005650 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005651 const VkBufferImageCopy* pRegions)
5652{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005653 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005654 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005655 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005656 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005657 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005658 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005659 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005660 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005661 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005662 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005663
5664 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005665}
5666
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005667bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005668 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005669 VkImage srcImage,
5670 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005671 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005672 uint32_t regionCount)
5673{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005674
Jeremy Hayes99a96322015-06-26 12:48:09 -06005675
5676 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5677 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5678 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005679 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005680 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005681 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005682 }
5683
Jeremy Hayes99a96322015-06-26 12:48:09 -06005684
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005685
5686 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005687}
5688
5689VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005690 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005691 VkImage srcImage,
5692 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005693 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005694 uint32_t regionCount,
5695 const VkBufferImageCopy* pRegions)
5696{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005697 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005698
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005699 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005700
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005701 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005702}
5703
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005704bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005705 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005706 const uint32_t* pData)
5707{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005708 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005709 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005710 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005711
5712 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005713}
5714
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005715bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005716 VkCommandBuffer commandBuffer,
5717 VkBuffer dstBuffer,
5718 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005719 VkDeviceSize dataSize)
5720{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005721
5722
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005723
5724
5725 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005726}
5727
5728VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005729 VkCommandBuffer commandBuffer,
5730 VkBuffer dstBuffer,
5731 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005732 VkDeviceSize dataSize,
5733 const uint32_t* pData)
5734{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005735 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005736
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005737 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005738
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005739 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005740}
5741
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005742bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005743 VkCommandBuffer commandBuffer,
5744 VkBuffer dstBuffer,
5745 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005746 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005747 uint32_t data)
5748{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005749
5750
5751
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005752
5753
5754 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005755}
5756
5757VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005758 VkCommandBuffer commandBuffer,
5759 VkBuffer dstBuffer,
5760 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005761 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005762 uint32_t data)
5763{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005764 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005765
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005766 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005767}
5768
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005769bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005770 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005771 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005772 const VkImageSubresourceRange* pRanges)
5773{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005774 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005775 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005776 }
5777
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005778 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005779 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005780 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005781 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005782
5783 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005784}
5785
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005786bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005787 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005788 VkImage image,
5789 VkImageLayout imageLayout,
5790 uint32_t rangeCount)
5791{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005792
Jeremy Hayes99a96322015-06-26 12:48:09 -06005793
5794 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5795 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5796 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005797 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005798 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005799 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005800 }
5801
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005802
5803 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005804}
5805
5806VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005807 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005808 VkImage image,
5809 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005810 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005811 uint32_t rangeCount,
5812 const VkImageSubresourceRange* pRanges)
5813{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005814 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005815
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005816 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005817
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005818 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005819}
5820
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005821bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005822 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005823 const VkImageSubresourceRange* pRanges)
5824{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005825 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005826 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005827 /*
5828 * TODO: How do we validation pRanges->aspectMask?
5829 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5830 * VK_IMAGE_ASPECT_STENCIL_BIT.
5831 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005832 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005833
5834 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005835}
5836
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005837bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005838 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005839 VkImage image,
5840 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005841 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005842 uint32_t rangeCount)
5843{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005844
Jeremy Hayes99a96322015-06-26 12:48:09 -06005845
5846 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5847 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5848 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005849 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005850 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005851 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005852 }
5853
5854
5855
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005856
5857 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005858}
5859
Chris Forbesd9be82b2015-06-22 17:21:59 +12005860VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005861 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005862 VkImage image,
5863 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005864 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005865 uint32_t rangeCount,
5866 const VkImageSubresourceRange* pRanges)
5867{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005868 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005869
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005870 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005871
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005872 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005873}
5874
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005875bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005876 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005877 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005878 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005879{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005880 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005881 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005882 }
5883
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005884 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005885 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005886 }
5887
5888 return true;
5889}
5890
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005891VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005892 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005893 uint32_t attachmentCount,
5894 const VkClearAttachment* pAttachments,
5895 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005896 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005897{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005898 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005899 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005900 }
5901
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005902 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005903}
5904
5905bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005906 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005907 const VkImageResolve* pRegions)
5908{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005909 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005910 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005911 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005912 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005913 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005914 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005915 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005916 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005917 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005918 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005919 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005920 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005921 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005922 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005923 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005924 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005925 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005926
5927 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005928}
5929
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005930bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005931 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005932 VkImage srcImage,
5933 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005934 VkImage dstImage,
5935 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005936 uint32_t regionCount)
5937{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005938
Jeremy Hayes99a96322015-06-26 12:48:09 -06005939
5940 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5941 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5942 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005943 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005944 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005945 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005946 }
5947
Jeremy Hayes99a96322015-06-26 12:48:09 -06005948
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005949 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5950 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005951 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005952 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5953 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005954 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005955 }
5956
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005957
5958 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005959}
5960
5961VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005962 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005963 VkImage srcImage,
5964 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005965 VkImage dstImage,
5966 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005967 uint32_t regionCount,
5968 const VkImageResolve* pRegions)
5969{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005970 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005971
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005972 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005973
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005974 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005975}
5976
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005977bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005978 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005979 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005980 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005981{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005982
Jeremy Hayes99a96322015-06-26 12:48:09 -06005983
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005984
5985 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986}
5987
5988VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005989 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005990 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005991 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005992{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005993 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005994
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005995 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005996}
5997
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005998bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005999 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006000 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006001 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006002{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003
Jeremy Hayes99a96322015-06-26 12:48:09 -06006004
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006005
6006 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007}
6008
6009VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006010 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006011 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006012 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006013{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006014 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006015
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006016 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006017}
6018
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006019bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006020 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006021 const VkEvent* pEvents,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006022 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006023{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006024 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006025 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006026 }
6027
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006028 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006029 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006030 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006031
6032 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006033}
6034
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006035bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006036 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006038 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006039 VkPipelineStageFlags dstStageMask,
6040 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006041{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006042
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006043
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044
6045
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006046
6047 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006048}
6049
6050VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006051 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006052 uint32_t eventCount,
6053 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006054 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006055 VkPipelineStageFlags dstStageMask,
6056 uint32_t memoryBarrierCount,
6057 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006058{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006059 PreCmdWaitEvents(commandBuffer, pEvents, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006060
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006061 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006062
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006063 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006064}
6065
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006066bool PreCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006067 VkCommandBuffer commandBuffer,
6068 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006069{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006070 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006071 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006072 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006073
6074 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006075}
6076
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006077bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006078 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006079 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006080 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006081 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006082 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006083{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006085
Jeremy Hayes99a96322015-06-26 12:48:09 -06006086
6087
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006088
6089 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006090}
6091
6092VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006093 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006094 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006095 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006096 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006097 uint32_t memoryBarrierCount,
6098 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006099{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006100 PreCmdPipelineBarrier(commandBuffer, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006101
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006102 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006103
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006104 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006105}
6106
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006107bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006108 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006109 VkQueryPool queryPool,
6110 uint32_t slot,
6111 VkQueryControlFlags flags)
6112{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006113
Jeremy Hayes99a96322015-06-26 12:48:09 -06006114
6115
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006116
6117 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006118}
6119
6120VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006121 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006122 VkQueryPool queryPool,
6123 uint32_t slot,
6124 VkQueryControlFlags flags)
6125{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006126 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006127
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006128 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006129}
6130
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006131bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006132 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006133 VkQueryPool queryPool,
6134 uint32_t slot)
6135{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006136
Jeremy Hayes99a96322015-06-26 12:48:09 -06006137
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006138
6139 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006140}
6141
6142VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006143 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006144 VkQueryPool queryPool,
6145 uint32_t slot)
6146{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006147 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006148
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006149 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006150}
6151
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006152bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006153 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006154 VkQueryPool queryPool,
6155 uint32_t startQuery,
6156 uint32_t queryCount)
6157{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006158
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006159
6160
6161
6162 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006163}
6164
6165VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006166 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006167 VkQueryPool queryPool,
6168 uint32_t startQuery,
6169 uint32_t queryCount)
6170{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006171 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006172
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006173 PostCmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006174}
6175
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006176bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006177 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006178 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006179 VkQueryPool queryPool,
6180 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006181{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006182
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006183 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006184
6185 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006186}
6187
6188VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006189 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006190 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006191 VkQueryPool queryPool,
6192 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006193{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006194 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006195
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006196 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006197}
6198
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006199bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006200 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006201 VkQueryPool queryPool,
6202 uint32_t startQuery,
6203 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006204 VkBuffer dstBuffer,
6205 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006206 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207 VkQueryResultFlags flags)
6208{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006209
6210
6211
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006212
Jeremy Hayes99a96322015-06-26 12:48:09 -06006213
6214
6215
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006216
6217 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006218}
6219
Jeremy Hayesad367152015-04-17 10:36:53 -06006220VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006221 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006222 VkQueryPool queryPool,
6223 uint32_t startQuery,
6224 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006225 VkBuffer dstBuffer,
6226 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006227 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006228 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006229{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006230 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006231
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006232 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006233}
6234
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006235bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006236 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006237 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006238{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006239 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006240 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006241 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006242
6243 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006244}
6245
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006246bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006247 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006248 VkPipelineLayout layout,
6249 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006250 uint32_t offset,
6251 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006252{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006253
Jeremy Hayes99a96322015-06-26 12:48:09 -06006254
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006255
6256
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006257
6258 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006259}
6260
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006261VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006262 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006263 VkPipelineLayout layout,
6264 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006265 uint32_t offset,
6266 uint32_t size,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006267 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006268{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006269 PreCmdPushConstants(commandBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006270
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006271 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006272
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006273 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006274}
6275
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006276bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006277 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006278 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006279{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006280 if(pRenderPassBegin != nullptr)
6281 {
6282 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006283 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006284 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006285 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006286 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006287 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006288 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006289 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006290 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006291 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006292
6293 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006294}
6295
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006296bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006297 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006298 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006299{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006300
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006301 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6302 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006303 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006304 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006305 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006306 return false;
6307 }
6308
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006309 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006310}
6311
Jeremy Hayes99a96322015-06-26 12:48:09 -06006312VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006313 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006314 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006315 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006316{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006317 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006318
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006319 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006320
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006321 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006322}
6323
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006324bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006325 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006326 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006327{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006328
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006329 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6330 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006331 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006332 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006333 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006334 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006335 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006336
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006337 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006338}
6339
6340VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006341 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006342 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006343{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006344 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006345
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006346 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006347}
6348
6349bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006350 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006351{
6352
6353 return true;
6354}
6355
6356VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006357 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006358{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006359 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006360
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006361 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006362}
6363
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006364bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006365 VkCommandBuffer commandBuffer,
6366 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006367{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006368 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006369 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006370 }
6371
6372 return true;
6373}
6374
6375bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006376 VkCommandBuffer commandBuffer,
6377 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006378{
6379
6380
6381 return true;
6382}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006383
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006384VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006385 VkCommandBuffer commandBuffer,
6386 uint32_t commandBuffersCount,
6387 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006388{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006389 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006390
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006391 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006392
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006393 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006394}
6395
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006396VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006397{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006398 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006399 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006400 }
6401
Jon Ashburn8fd08252015-05-28 16:25:02 -06006402 /* loader uses this to force layer initialization; device object is wrapped */
6403 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006404 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006405 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006406 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006407
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006408 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006409 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006410 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006411 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006412 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006413 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006414 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006415 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006416 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006417 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006418 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006419 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006420 if (!strcmp(funcName, "vkAllocateMemory"))
6421 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006422 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006423 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006424 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006425 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006426 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006427 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006428 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006429 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006430 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006431 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006432 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006433 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006434 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006435 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006436 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006437 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006438 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006439 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006440 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006441 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006442 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006443 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006444 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006445 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006446 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006447 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006448 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006449 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006450 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006451 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006452 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006453 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006454 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006455 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006456 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006457 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006458 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006459 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006460 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006461 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine03d8e572015-09-15 14:59:14 -05006462 if (!strcmp(funcName, "vkCreateShaderModule"))
6463 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006464 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006465 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006466 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006467 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006468 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006469 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006470 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006471 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006472 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006473 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006474 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006475 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006476 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006477 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006478 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6479 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006480 if (!strcmp(funcName, "vkCmdSetViewport"))
6481 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006482 if (!strcmp(funcName, "vkCmdSetScissor"))
6483 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006484 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6485 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6486 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6487 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6488 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6489 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6490 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6491 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6492 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6493 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6494 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6495 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6496 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6497 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006498 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6499 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006500 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006501 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006502 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006503 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006504 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006505 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006506 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006507 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006508 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006509 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006510 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006511 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006512 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006513 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006514 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006515 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006516 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006517 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006518 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006519 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006520 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006521 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006522 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006523 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006524 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006525 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006526 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006527 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006528 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006529 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006530 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006531 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006532 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006533 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006534 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006535 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006536 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006537 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006538 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006539 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006540 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006541 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006542 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006543 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006544 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006545 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006546 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006547 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006548 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006549 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006550 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006551 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006553 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006555 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006557 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006558 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006559 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006561 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006562 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006563 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006565 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006566 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006567 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006568 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006569 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006570
Jon Ashburneab34492015-06-01 09:37:38 -06006571 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006572 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006573 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006574 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006575 }
6576}
6577
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006578VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006579{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006580 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006581 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006582 }
6583
Jon Ashburn8fd08252015-05-28 16:25:02 -06006584 /* loader uses this to force layer initialization; instance object is wrapped */
6585 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006586 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006588 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006589
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006592 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006593 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006594 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006595 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006596 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006597 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006598 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006599 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006600 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006601 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006602 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6603 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6604 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6605 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6606 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6607 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6608 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6609 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006610
Jeremy Hayes99a96322015-06-26 12:48:09 -06006611 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006612 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006613 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006614 return fptr;
6615
Jeremy Hayes99a96322015-06-26 12:48:09 -06006616 {
6617 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6618 return NULL;
6619 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6620 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006621}