blob: 3281ee2c650dc06f54b73a60b5e4dec383c42bed [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <iostream>
30#include <string>
31#include <sstream>
Mark Lobodzinski3723c512015-05-26 10:58:40 -050032#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060033#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060034
Tobin Ehlis7a51d902015-07-03 10:34:49 -060035#include "vk_loader_platform.h"
Tobin Ehlis2d1d9702015-07-03 09:42:57 -060036#include "vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060037#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060038#include "vk_enum_validate_helper.h"
39#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060040//The following is #included again to catch certain OS-specific functions being used:
Tobin Ehlis7a51d902015-07-03 10:34:49 -060041#include "vk_loader_platform.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060042
Tobin Ehlis56d204a2015-07-03 10:15:26 -060043#include "vk_layer_table.h"
44#include "vk_layer_data.h"
45#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060046#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060047
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060048typedef struct _layer_data {
49 debug_report_data *report_data;
50 VkDbgMsgCallback logging_callback;
51} layer_data;
Mark Lobodzinski3723c512015-05-26 10:58:40 -050052
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060053static std::unordered_map<void*, layer_data*> layer_data_map;
54static device_table_map pc_device_table_map;
55static instance_table_map pc_instance_table_map;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060056
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060057// "my instance data"
58debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060059{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060060 dispatch_key key = get_dispatch_key(object);
Tobin Ehlis8354e022015-09-01 11:46:36 -060061 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060062#if DISPATCH_MAP_DEBUG
63 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
64#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060065 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060066
67 return data->report_data;
68}
69
70// "my device data"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060071debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060072{
73 dispatch_key key = get_dispatch_key(object);
74 layer_data *data = get_my_data_ptr(key, layer_data_map);
75#if DISPATCH_MAP_DEBUG
76 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
77#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060078 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060079 return data->report_data;
80}
81
82static void InitParamChecker(layer_data *data)
83{
84 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
85
86 uint32_t debug_action = 0;
87 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
88 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
89 {
90 FILE *log_output = NULL;
91 const char* option_str = getLayerOption("ParamCheckerLogFilename");
92 if(option_str)
93 {
94 log_output = fopen(option_str, "w");
95 }
Tobin Ehlisaf14e9f2015-09-01 11:59:36 -060096 if (log_output == NULL) {
97 if (option_str)
98 std::cout << std::endl << "ParamChecker ERROR: Bad output filename specified: " << option_str << ". Writing to STDOUT instead" << std::endl << std::endl;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060099 log_output = stdout;
100 }
101
102 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void*)log_output, &data->logging_callback);
103 }
104}
105
106VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
107 VkInstance instance,
108 VkFlags msgFlags,
109 const PFN_vkDbgMsgCallback pfnMsgCallback,
110 void* pUserData,
111 VkDbgMsgCallback* pMsgCallback)
112{
113 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
114 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
115
116 if (result == VK_SUCCESS)
117 {
118 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
119 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
120 }
121
122 return result;
123}
124
125VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
126 VkInstance instance,
127 VkDbgMsgCallback msgCallback)
128{
129 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
130 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
131
132 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
133 layer_destroy_msg_callback(data->report_data, msgCallback);
134
135 return result;
136}
137
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600138static const VkLayerProperties pc_global_layers[] = {
139 {
140 "ParamChecker",
141 VK_API_VERSION,
142 VK_MAKE_VERSION(0, 1, 0),
143 "Validation layer: ParamChecker",
144 }
145};
Tony Barbour426b9052015-06-24 16:06:58 -0600146
147VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600148 const char *pLayerName,
149 uint32_t *pCount,
150 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600151{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600152 /* ParamChecker does not have any global extensions */
153 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600154}
155
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600156VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties(
157 uint32_t *pCount,
158 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600159{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600160 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
161 pc_global_layers,
162 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600163}
164
165VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600166 VkPhysicalDevice physicalDevice,
167 const char* pLayerName,
168 uint32_t* pCount,
169 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600170{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600171 /* ParamChecker does not have any physical device extensions */
172 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayescf469132015-04-17 10:36:53 -0600173}
174
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600175VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
176 VkPhysicalDevice physicalDevice,
177 uint32_t* pCount,
178 VkLayerProperties* pProperties)
179{
180 /* ParamChecker's physical device layers are the same as global */
181 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
182 pCount, pProperties);
183}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600184
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600185// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600186
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600187static
188std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600189{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600190 switch(enumerator)
191 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600192 case VK_RESULT_MAX_ENUM:
193 {
194 return "VK_RESULT_MAX_ENUM";
195 break;
196 }
197 case VK_ERROR_INVALID_LAYER:
198 {
199 return "VK_ERROR_INVALID_LAYER";
200 break;
201 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600202 case VK_ERROR_INCOMPATIBLE_DRIVER:
203 {
204 return "VK_ERROR_INCOMPATIBLE_DRIVER";
205 break;
206 }
207 case VK_ERROR_MEMORY_UNMAP_FAILED:
208 {
209 return "VK_ERROR_MEMORY_UNMAP_FAILED";
210 break;
211 }
212 case VK_ERROR_MEMORY_MAP_FAILED:
213 {
214 return "VK_ERROR_MEMORY_MAP_FAILED";
215 break;
216 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600217 case VK_INCOMPLETE:
218 {
219 return "VK_INCOMPLETE";
220 break;
221 }
222 case VK_ERROR_OUT_OF_HOST_MEMORY:
223 {
224 return "VK_ERROR_OUT_OF_HOST_MEMORY";
225 break;
226 }
227 case VK_ERROR_UNKNOWN:
228 {
229 return "VK_ERROR_UNKNOWN";
230 break;
231 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600232 case VK_ERROR_INITIALIZATION_FAILED:
233 {
234 return "VK_ERROR_INITIALIZATION_FAILED";
235 break;
236 }
237 case VK_NOT_READY:
238 {
239 return "VK_NOT_READY";
240 break;
241 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600242 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
243 {
244 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
245 break;
246 }
247 case VK_EVENT_SET:
248 {
249 return "VK_EVENT_SET";
250 break;
251 }
252 case VK_TIMEOUT:
253 {
254 return "VK_TIMEOUT";
255 break;
256 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600257 case VK_EVENT_RESET:
258 {
259 return "VK_EVENT_RESET";
260 break;
261 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600262 case VK_UNSUPPORTED:
263 {
264 return "VK_UNSUPPORTED";
265 break;
266 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600267 case VK_ERROR_INCOMPATIBLE_DEVICE:
268 {
269 return "VK_ERROR_INCOMPATIBLE_DEVICE";
270 break;
271 }
272 case VK_SUCCESS:
273 {
274 return "VK_SUCCESS";
275 break;
276 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600277 case VK_ERROR_INVALID_EXTENSION:
278 {
279 return "VK_ERROR_INVALID_EXTENSION";
280 break;
281 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600282 case VK_ERROR_DEVICE_LOST:
283 {
284 return "VK_ERROR_DEVICE_LOST";
285 break;
286 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600287 default:
288 {
289 return "unrecognized enumerator";
290 break;
291 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600292 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600293}
294
295static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600296bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
297{
298 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(VK_FORMAT_FEATURE_CONVERSION_BIT |
299 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
300 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
301 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
302 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
303 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
304 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
305 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
306 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
307 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600308 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
309 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
310 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600311 if(enumerator & (~allFlags))
312 {
313 return false;
314 }
315
316 return true;
317}
318
319static
320std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
321{
322 if(!ValidateEnumerator(enumerator))
323 {
324 return "unrecognized enumerator";
325 }
326
327 std::vector<std::string> strings;
328 if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT)
329 {
330 strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT");
331 }
332 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
333 {
334 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
335 }
336 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
337 {
338 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
339 }
340 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
341 {
342 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
343 }
344 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
345 {
346 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
347 }
348 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
349 {
350 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
351 }
352 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
353 {
354 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
355 }
356 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
357 {
358 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
359 }
360 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
361 {
362 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
363 }
364 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
365 {
366 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
367 }
368 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
369 {
370 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
371 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600372 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
373 {
374 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
375 }
376 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
377 {
378 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
379 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600380
381 std::string enumeratorString;
382 for(auto const& string : strings)
383 {
384 enumeratorString += string;
385
386 if(string != strings.back())
387 {
388 enumeratorString += '|';
389 }
390 }
391
392 return enumeratorString;
393}
394
395static
396bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
397{
398 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
399 VK_IMAGE_USAGE_DEPTH_STENCIL_BIT |
400 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
401 VK_IMAGE_USAGE_STORAGE_BIT |
402 VK_IMAGE_USAGE_SAMPLED_BIT |
403 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
404 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600405 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600406 if(enumerator & (~allFlags))
407 {
408 return false;
409 }
410
411 return true;
412}
413
414static
415std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
416{
417 if(!ValidateEnumerator(enumerator))
418 {
419 return "unrecognized enumerator";
420 }
421
422 std::vector<std::string> strings;
423 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
424 {
425 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
426 }
427 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
428 {
429 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
430 }
431 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
432 {
433 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
434 }
435 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
436 {
437 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
438 }
439 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
440 {
441 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
442 }
443 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
444 {
445 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
446 }
447 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
448 {
449 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
450 }
451 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
452 {
453 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
454 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600455
456 std::string enumeratorString;
457 for(auto const& string : strings)
458 {
459 enumeratorString += string;
460
461 if(string != strings.back())
462 {
463 enumeratorString += '|';
464 }
465 }
466
467 return enumeratorString;
468}
469
470static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600471bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
472{
473 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
474 VK_QUEUE_DMA_BIT |
475 VK_QUEUE_COMPUTE_BIT |
476 VK_QUEUE_SPARSE_MEMMGR_BIT |
477 VK_QUEUE_GRAPHICS_BIT);
478 if(enumerator & (~allFlags))
479 {
480 return false;
481 }
482
483 return true;
484}
485
486static
487std::string EnumeratorString(VkQueueFlagBits const& enumerator)
488{
489 if(!ValidateEnumerator(enumerator))
490 {
491 return "unrecognized enumerator";
492 }
493
494 std::vector<std::string> strings;
495 if(enumerator & VK_QUEUE_EXTENDED_BIT)
496 {
497 strings.push_back("VK_QUEUE_EXTENDED_BIT");
498 }
499 if(enumerator & VK_QUEUE_DMA_BIT)
500 {
501 strings.push_back("VK_QUEUE_DMA_BIT");
502 }
503 if(enumerator & VK_QUEUE_COMPUTE_BIT)
504 {
505 strings.push_back("VK_QUEUE_COMPUTE_BIT");
506 }
507 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
508 {
509 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
510 }
511 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
512 {
513 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
514 }
515
516 std::string enumeratorString;
517 for(auto const& string : strings)
518 {
519 enumeratorString += string;
520
521 if(string != strings.back())
522 {
523 enumeratorString += '|';
524 }
525 }
526
527 return enumeratorString;
528}
529
530static
531bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
532{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600533 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
534 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600535 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
536 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
537 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
538 VK_MEMORY_PROPERTY_DEVICE_ONLY);
539 if(enumerator & (~allFlags))
540 {
541 return false;
542 }
543
544 return true;
545}
546
547static
548std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
549{
550 if(!ValidateEnumerator(enumerator))
551 {
552 return "unrecognized enumerator";
553 }
554
555 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600556 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
557 {
558 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
559 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600560 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
561 {
562 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
563 }
564 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
565 {
566 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
567 }
568 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
569 {
570 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
571 }
572 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
573 {
574 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
575 }
576 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
577 {
578 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
579 }
580
581 std::string enumeratorString;
582 for(auto const& string : strings)
583 {
584 enumeratorString += string;
585
586 if(string != strings.back())
587 {
588 enumeratorString += '|';
589 }
590 }
591
592 return enumeratorString;
593}
594
595static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600596bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600597{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600598 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600599 if(enumerator & (~allFlags))
600 {
601 return false;
602 }
603
604 return true;
605}
606
607static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600608std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600609{
610 if(!ValidateEnumerator(enumerator))
611 {
612 return "unrecognized enumerator";
613 }
614
615 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600616 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600617 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600618 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600619 }
620
621 std::string enumeratorString;
622 for(auto const& string : strings)
623 {
624 enumeratorString += string;
625
626 if(string != strings.back())
627 {
628 enumeratorString += '|';
629 }
630 }
631
632 return enumeratorString;
633}
634
635static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600636bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
637{
638 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
639 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
640 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
641 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600642 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600643 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600644 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600645
646 return true;
647}
648
649static
650std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
651{
652 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600653 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600654 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600655 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600656
657 std::vector<std::string> strings;
658 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600659 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600660 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600661 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600662 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600663 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600664 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600665 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600666 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600667 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600668 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600669 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600670
671 std::string enumeratorString;
672 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600673 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600674 enumeratorString += string;
675
676 if(string != strings.back())
677 {
678 enumeratorString += '|';
679 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600680 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600681
682 return enumeratorString;
683}
684
685static
686bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
687{
688 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
689 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600690 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600691 return false;
692 }
693
694 return true;
695}
696
697static
698std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
699{
700 if(!ValidateEnumerator(enumerator))
701 {
702 return "unrecognized enumerator";
703 }
704
705 std::vector<std::string> strings;
706 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
707 {
708 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
709 }
710
711 std::string enumeratorString;
712 for(auto const& string : strings)
713 {
714 enumeratorString += string;
715
716 if(string != strings.back())
717 {
718 enumeratorString += '|';
719 }
720 }
721
722 return enumeratorString;
723}
724
725static
726bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
727{
728 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
729 if(enumerator & (~allFlags))
730 {
731 return false;
732 }
733
734 return true;
735}
736
737static
738std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
739{
740 if(!ValidateEnumerator(enumerator))
741 {
742 return "unrecognized enumerator";
743 }
744
745 std::vector<std::string> strings;
746 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
747 {
748 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
749 }
750
751 std::string enumeratorString;
752 for(auto const& string : strings)
753 {
754 enumeratorString += string;
755
756 if(string != strings.back())
757 {
758 enumeratorString += '|';
759 }
760 }
761
762 return enumeratorString;
763}
764
765static
766bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
767{
768 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
769 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
770 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
771 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
772 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
773 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
774 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
775 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
776 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
777 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
778 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
779 if(enumerator & (~allFlags))
780 {
781 return false;
782 }
783
784 return true;
785}
786
787static
788std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
789{
790 if(!ValidateEnumerator(enumerator))
791 {
792 return "unrecognized enumerator";
793 }
794
795 std::vector<std::string> strings;
796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
797 {
798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
799 }
800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
801 {
802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
803 }
804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
805 {
806 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
807 }
808 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
809 {
810 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
811 }
812 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
813 {
814 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
815 }
816 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
817 {
818 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
819 }
820 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
821 {
822 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
823 }
824 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
825 {
826 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
827 }
828 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
829 {
830 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
831 }
832 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
833 {
834 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
835 }
836 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
837 {
838 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
839 }
840
841 std::string enumeratorString;
842 for(auto const& string : strings)
843 {
844 enumeratorString += string;
845
846 if(string != strings.back())
847 {
848 enumeratorString += '|';
849 }
850 }
851
852 return enumeratorString;
853}
854
855static
856bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
857{
858 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
859 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
860 VK_QUERY_RESULT_WAIT_BIT |
861 VK_QUERY_RESULT_64_BIT |
862 VK_QUERY_RESULT_DEFAULT);
863 if(enumerator & (~allFlags))
864 {
865 return false;
866 }
867
868 return true;
869}
870
871static
872std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
873{
874 if(!ValidateEnumerator(enumerator))
875 {
876 return "unrecognized enumerator";
877 }
878
879 std::vector<std::string> strings;
880 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
881 {
882 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
883 }
884 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
885 {
886 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
887 }
888 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
889 {
890 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
891 }
892 if(enumerator & VK_QUERY_RESULT_64_BIT)
893 {
894 strings.push_back("VK_QUERY_RESULT_64_BIT");
895 }
896 if(enumerator & VK_QUERY_RESULT_DEFAULT)
897 {
898 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600899 }
900
901 std::string enumeratorString;
902 for(auto const& string : strings)
903 {
904 enumeratorString += string;
905
906 if(string != strings.back())
907 {
908 enumeratorString += '|';
909 }
910 }
911
912 return enumeratorString;
913}
914
915static
916bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
917{
918 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
919 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
920 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
921 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
922 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
923 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
924 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
925 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600926 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600927 if(enumerator & (~allFlags))
928 {
929 return false;
930 }
931
932 return true;
933}
934
935static
936std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
937{
938 if(!ValidateEnumerator(enumerator))
939 {
940 return "unrecognized enumerator";
941 }
942
943 std::vector<std::string> strings;
944 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
947 }
948 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
949 {
950 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
951 }
952 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
953 {
954 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
955 }
956 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
957 {
958 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
959 }
960 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
961 {
962 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
963 }
964 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
965 {
966 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
967 }
968 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
969 {
970 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
971 }
972 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
973 {
974 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
975 }
976 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
977 {
978 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
979 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600980
981 std::string enumeratorString;
982 for(auto const& string : strings)
983 {
984 enumeratorString += string;
985
986 if(string != strings.back())
987 {
988 enumeratorString += '|';
989 }
990 }
991
992 return enumeratorString;
993}
994
995static
996bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
997{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600998 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
999 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
1000 VK_BUFFER_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001001 if(enumerator & (~allFlags))
1002 {
1003 return false;
1004 }
1005
1006 return true;
1007}
1008
1009static
1010std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
1011{
1012 if(!ValidateEnumerator(enumerator))
1013 {
1014 return "unrecognized enumerator";
1015 }
1016
1017 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001018 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1019 {
1020 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1021 }
1022 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1023 {
1024 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1025 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001026 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
1027 {
1028 strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT");
1029 }
1030
1031 std::string enumeratorString;
1032 for(auto const& string : strings)
1033 {
1034 enumeratorString += string;
1035
1036 if(string != strings.back())
1037 {
1038 enumeratorString += '|';
1039 }
1040 }
1041
1042 return enumeratorString;
1043}
1044
1045static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001046bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1047{
1048 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001049 VK_IMAGE_CREATE_INVARIANT_DATA_BIT |
1050 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1051 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001052 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001053 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001054 if(enumerator & (~allFlags))
1055 {
1056 return false;
1057 }
1058
1059 return true;
1060}
1061
1062static
1063std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1064{
1065 if(!ValidateEnumerator(enumerator))
1066 {
1067 return "unrecognized enumerator";
1068 }
1069
1070 std::vector<std::string> strings;
1071 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1072 {
1073 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1074 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001075 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
1076 {
1077 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
1078 }
1079 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1080 {
1081 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1082 }
1083 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1084 {
1085 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1086 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001087 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1088 {
1089 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1090 }
1091 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
1092 {
1093 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
1094 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001095
1096 std::string enumeratorString;
1097 for(auto const& string : strings)
1098 {
1099 enumeratorString += string;
1100
1101 if(string != strings.back())
1102 {
1103 enumeratorString += '|';
1104 }
1105 }
1106
1107 return enumeratorString;
1108}
1109
1110static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001111bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001112{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001113 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1114 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001115 if(enumerator & (~allFlags))
1116 {
1117 return false;
1118 }
1119
1120 return true;
1121}
1122
1123static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001124std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001125{
1126 if(!ValidateEnumerator(enumerator))
1127 {
1128 return "unrecognized enumerator";
1129 }
1130
1131 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001132 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001133 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001134 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001135 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001136 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001137 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001138 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001139 }
1140
1141 std::string enumeratorString;
1142 for(auto const& string : strings)
1143 {
1144 enumeratorString += string;
1145
1146 if(string != strings.back())
1147 {
1148 enumeratorString += '|';
1149 }
1150 }
1151
1152 return enumeratorString;
1153}
1154
1155static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001156bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1157{
1158 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1159 VK_CHANNEL_B_BIT |
1160 VK_CHANNEL_G_BIT |
1161 VK_CHANNEL_R_BIT);
1162 if(enumerator & (~allFlags))
1163 {
1164 return false;
1165 }
1166
1167 return true;
1168}
1169
1170static
1171std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1172{
1173 if(!ValidateEnumerator(enumerator))
1174 {
1175 return "unrecognized enumerator";
1176 }
1177
1178 std::vector<std::string> strings;
1179 if(enumerator & VK_CHANNEL_A_BIT)
1180 {
1181 strings.push_back("VK_CHANNEL_A_BIT");
1182 }
1183 if(enumerator & VK_CHANNEL_B_BIT)
1184 {
1185 strings.push_back("VK_CHANNEL_B_BIT");
1186 }
1187 if(enumerator & VK_CHANNEL_G_BIT)
1188 {
1189 strings.push_back("VK_CHANNEL_G_BIT");
1190 }
1191 if(enumerator & VK_CHANNEL_R_BIT)
1192 {
1193 strings.push_back("VK_CHANNEL_R_BIT");
1194 }
1195
1196 std::string enumeratorString;
1197 for(auto const& string : strings)
1198 {
1199 enumeratorString += string;
1200
1201 if(string != strings.back())
1202 {
1203 enumeratorString += '|';
1204 }
1205 }
1206
1207 return enumeratorString;
1208}
1209
1210static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001211bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001212{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001213 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1214 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1215 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001216 if(enumerator & (~allFlags))
1217 {
1218 return false;
1219 }
1220
1221 return true;
1222}
1223
1224static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001225std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001226{
1227 if(!ValidateEnumerator(enumerator))
1228 {
1229 return "unrecognized enumerator";
1230 }
1231
1232 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001233 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001234 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001235 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1236 }
1237 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1238 {
1239 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1240 }
1241 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1242 {
1243 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001244 }
1245
1246 std::string enumeratorString;
1247 for(auto const& string : strings)
1248 {
1249 enumeratorString += string;
1250
1251 if(string != strings.back())
1252 {
1253 enumeratorString += '|';
1254 }
1255 }
1256
1257 return enumeratorString;
1258}
1259
1260static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001261bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001262{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001263 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1264 VK_SHADER_STAGE_FRAGMENT_BIT |
1265 VK_SHADER_STAGE_GEOMETRY_BIT |
1266 VK_SHADER_STAGE_COMPUTE_BIT |
1267 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1268 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1269 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001270 if(enumerator & (~allFlags))
1271 {
1272 return false;
1273 }
1274
1275 return true;
1276}
1277
1278static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001279std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001280{
1281 if(!ValidateEnumerator(enumerator))
1282 {
1283 return "unrecognized enumerator";
1284 }
1285
1286 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001287 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001288 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001289 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001290 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001291 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001292 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001293 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001294 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001295 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001296 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001297 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1298 }
1299 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1300 {
1301 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1302 }
1303 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1304 {
1305 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1306 }
1307 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1308 {
1309 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1310 }
1311 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1312 {
1313 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001314 }
1315
1316 std::string enumeratorString;
1317 for(auto const& string : strings)
1318 {
1319 enumeratorString += string;
1320
1321 if(string != strings.back())
1322 {
1323 enumeratorString += '|';
1324 }
1325 }
1326
1327 return enumeratorString;
1328}
1329
1330static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001331bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001332{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001333 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001334 if(enumerator & (~allFlags))
1335 {
1336 return false;
1337 }
1338
1339 return true;
1340}
1341
1342static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001343std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001344{
1345 if(!ValidateEnumerator(enumerator))
1346 {
1347 return "unrecognized enumerator";
1348 }
1349
1350 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001351 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001352 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001353 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001354 }
1355
1356 std::string enumeratorString;
1357 for(auto const& string : strings)
1358 {
1359 enumeratorString += string;
1360
1361 if(string != strings.back())
1362 {
1363 enumeratorString += '|';
1364 }
1365 }
1366
1367 return enumeratorString;
1368}
1369
1370static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001371bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001372{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001373 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1374 VK_PIPELINE_STAGE_HOST_BIT |
1375 VK_PIPELINE_STAGE_TRANSFER_BIT |
1376 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1377 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1378 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1379 VK_PIPELINE_STAGE_TRANSITION_BIT |
1380 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1381 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1382 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1383 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1384 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1385 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1386 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1387 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1388 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1389 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001390 if(enumerator & (~allFlags))
1391 {
1392 return false;
1393 }
1394
1395 return true;
1396}
1397
1398static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001399std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001400{
1401 if(!ValidateEnumerator(enumerator))
1402 {
1403 return "unrecognized enumerator";
1404 }
1405
1406 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001407 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001408 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001409 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001410 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001411 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001412 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001413 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001414 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001415 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001416 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001417 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001418 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001419 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001420 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001421 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001422 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001423 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001424 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001425 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001426 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001427 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001428 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001429 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001430 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001431 if(enumerator & VK_PIPELINE_STAGE_TRANSITION_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001432 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001433 strings.push_back("VK_PIPELINE_STAGE_TRANSITION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001434 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001435 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001436 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001438 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001440 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001441 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001442 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001443 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001444 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001445 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001446 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001448 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001449 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1450 }
1451 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1452 {
1453 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1454 }
1455 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1456 {
1457 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1458 }
1459 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1460 {
1461 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1462 }
1463 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1464 {
1465 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1466 }
1467 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1468 {
1469 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1470 }
1471 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1472 {
1473 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001474 }
1475
1476 std::string enumeratorString;
1477 for(auto const& string : strings)
1478 {
1479 enumeratorString += string;
1480
1481 if(string != strings.back())
1482 {
1483 enumeratorString += '|';
1484 }
1485 }
1486
1487 return enumeratorString;
1488}
1489
1490static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001491bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001492{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001493 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1494 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1495 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1496 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1497 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001498 if(enumerator & (~allFlags))
1499 {
1500 return false;
1501 }
1502
1503 return true;
1504}
1505
1506static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001507std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001508{
1509 if(!ValidateEnumerator(enumerator))
1510 {
1511 return "unrecognized enumerator";
1512 }
1513
1514 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001515 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001516 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001517 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001518 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001519 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001520 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001521 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001522 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001523 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001524 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001525 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1526 }
1527 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1528 {
1529 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1530 }
1531 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1532 {
1533 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001534 }
1535
1536 std::string enumeratorString;
1537 for(auto const& string : strings)
1538 {
1539 enumeratorString += string;
1540
1541 if(string != strings.back())
1542 {
1543 enumeratorString += '|';
1544 }
1545 }
1546
1547 return enumeratorString;
1548}
1549
1550static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001551bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001552{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001553 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1554 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1555 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1556 VK_MEMORY_INPUT_SHADER_READ_BIT |
1557 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1558 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1559 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1560 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1561 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1562 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001563 if(enumerator & (~allFlags))
1564 {
1565 return false;
1566 }
1567
1568 return true;
1569}
1570
1571static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001572std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001573{
1574 if(!ValidateEnumerator(enumerator))
1575 {
1576 return "unrecognized enumerator";
1577 }
1578
1579 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001580 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001581 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001582 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1583 }
1584 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1585 {
1586 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1587 }
1588 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1589 {
1590 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1591 }
1592 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1593 {
1594 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1595 }
1596 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1597 {
1598 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1599 }
1600 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1601 {
1602 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1603 }
1604 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1605 {
1606 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1607 }
1608 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1609 {
1610 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1611 }
1612 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1613 {
1614 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1615 }
1616 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1617 {
1618 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001619 }
1620
1621 std::string enumeratorString;
1622 for(auto const& string : strings)
1623 {
1624 enumeratorString += string;
1625
1626 if(string != strings.back())
1627 {
1628 enumeratorString += '|';
1629 }
1630 }
1631
1632 return enumeratorString;
1633}
1634
1635static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001636bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001637{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001638 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1639 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001640 if(enumerator & (~allFlags))
1641 {
1642 return false;
1643 }
1644
1645 return true;
1646}
1647
1648static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001649std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001650{
1651 if(!ValidateEnumerator(enumerator))
1652 {
1653 return "unrecognized enumerator";
1654 }
1655
1656 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001657 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001658 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001659 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001660 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001661 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001662 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001663 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001664 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001665
1666 std::string enumeratorString;
1667 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001668 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001669 enumeratorString += string;
1670
1671 if(string != strings.back())
1672 {
1673 enumeratorString += '|';
1674 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001675 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001676
1677 return enumeratorString;
1678}
1679
1680static
1681bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1682{
1683 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES);
1684 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001685 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001686 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001687 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001688
1689 return true;
1690}
1691
1692static
1693std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1694{
1695 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001696 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001697 return "unrecognized enumerator";
1698 }
1699
1700 std::vector<std::string> strings;
1701 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES)
1702 {
1703 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001704 }
1705
1706 std::string enumeratorString;
1707 for(auto const& string : strings)
1708 {
1709 enumeratorString += string;
1710
1711 if(string != strings.back())
1712 {
1713 enumeratorString += '|';
1714 }
1715 }
1716
1717 return enumeratorString;
1718}
1719
1720static
1721bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1722{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001723 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1724 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001725 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1726 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1727 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1728 if(enumerator & (~allFlags))
1729 {
1730 return false;
1731 }
1732
1733 return true;
1734}
1735
1736static
1737std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1738{
1739 if(!ValidateEnumerator(enumerator))
1740 {
1741 return "unrecognized enumerator";
1742 }
1743
1744 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001745 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1746 {
1747 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1748 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001749 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1750 {
1751 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1752 }
1753 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1754 {
1755 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1756 }
1757 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1758 {
1759 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1760 }
1761 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1762 {
1763 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1764 }
1765
1766 std::string enumeratorString;
1767 for(auto const& string : strings)
1768 {
1769 enumeratorString += string;
1770
1771 if(string != strings.back())
1772 {
1773 enumeratorString += '|';
1774 }
1775 }
1776
1777 return enumeratorString;
1778}
1779
1780static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001781bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001782{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001783 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001784 if(enumerator & (~allFlags))
1785 {
1786 return false;
1787 }
1788
1789 return true;
1790}
1791
1792static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001793std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001794{
1795 if(!ValidateEnumerator(enumerator))
1796 {
1797 return "unrecognized enumerator";
1798 }
1799
1800 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001801 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001802 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001803 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001804 }
1805
1806 std::string enumeratorString;
1807 for(auto const& string : strings)
1808 {
1809 enumeratorString += string;
1810
1811 if(string != strings.back())
1812 {
1813 enumeratorString += '|';
1814 }
1815 }
1816
1817 return enumeratorString;
1818}
1819
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001820static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001821bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001822{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001823 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1824 VK_IMAGE_ASPECT_STENCIL_BIT |
1825 VK_IMAGE_ASPECT_DEPTH_BIT |
1826 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001827 if(enumerator & (~allFlags))
1828 {
1829 return false;
1830 }
1831
1832 return true;
1833}
1834
1835static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001836std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001837{
1838 if(!ValidateEnumerator(enumerator))
1839 {
1840 return "unrecognized enumerator";
1841 }
1842
1843 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001844 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001845 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001846 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1847 }
1848 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1849 {
1850 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1851 }
1852 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1853 {
1854 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1855 }
1856 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1857 {
1858 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1859 }
1860
1861 std::string enumeratorString;
1862 for(auto const& string : strings)
1863 {
1864 enumeratorString += string;
1865
1866 if(string != strings.back())
1867 {
1868 enumeratorString += '|';
1869 }
1870 }
1871
1872 return enumeratorString;
1873}
1874
1875static
1876bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1877{
1878 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1879 if(enumerator & (~allFlags))
1880 {
1881 return false;
1882 }
1883
1884 return true;
1885}
1886
1887static
1888std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1889{
1890 if(!ValidateEnumerator(enumerator))
1891 {
1892 return "unrecognized enumerator";
1893 }
1894
1895 std::vector<std::string> strings;
1896 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1897 {
1898 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001899 }
1900
1901 std::string enumeratorString;
1902 for(auto const& string : strings)
1903 {
1904 enumeratorString += string;
1905
1906 if(string != strings.back())
1907 {
1908 enumeratorString += '|';
1909 }
1910 }
1911
1912 return enumeratorString;
1913}
1914
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001915VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1916 const VkInstanceCreateInfo* pCreateInfo,
1917 VkInstance* pInstance)
1918{
1919 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1920 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1921
1922 if (result == VK_SUCCESS) {
1923 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1924 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001925 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001926
1927 InitParamChecker(data);
1928 }
1929
1930 return result;
1931}
1932
1933VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(
1934 VkInstance instance)
1935{
1936 // Grab the key before the instance is destroyed.
1937 dispatch_key key = get_dispatch_key(instance);
1938 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
1939 VkResult result = pTable->DestroyInstance(instance);
1940
1941 // Clean up logging callback, if any
1942 layer_data *data = get_my_data_ptr(key, layer_data_map);
1943 if(data->logging_callback)
1944 {
1945 layer_destroy_msg_callback(data->report_data, data->logging_callback);
1946 }
1947
1948 layer_debug_report_destroy_instance(mid(instance));
1949 layer_data_map.erase(pTable);
1950
1951 pc_instance_table_map.erase(key);
1952 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
1953
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001954 return result;
1955}
1956
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001957bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001958 VkInstance instance,
1959 uint32_t* pPhysicalDeviceCount,
1960 VkPhysicalDevice* pPhysicalDevices,
1961 VkResult result)
1962{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001963
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001964 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001965 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001966 }
1967
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001968 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001969 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001970 }
1971
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001972 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001973 {
1974 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001975 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1976 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001977 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001978
1979 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001980}
1981
1982VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1983 VkInstance instance,
1984 uint32_t* pPhysicalDeviceCount,
1985 VkPhysicalDevice* pPhysicalDevices)
1986{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001987 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1988
1989 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1990
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001991 return result;
1992}
1993
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001994bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001995 VkPhysicalDevice physicalDevice,
1996 VkPhysicalDeviceFeatures* pFeatures,
1997 VkResult result)
1998{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001999
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002000 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002001 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002002 }
2003
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002004 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002005 {
2006 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002007 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2008 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002009 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002010
2011 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002012}
2013
2014VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
2015 VkPhysicalDevice physicalDevice,
2016 VkPhysicalDeviceFeatures* pFeatures)
2017{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002018 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
2019
2020 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
2021
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002022 return result;
2023}
2024
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002025bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002026 VkPhysicalDevice physicalDevice,
2027 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002028 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002029 VkResult result)
2030{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002031
2032 if(format < VK_FORMAT_BEGIN_RANGE ||
2033 format > VK_FORMAT_END_RANGE)
2034 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002035 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002036 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002037 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002038 }
2039
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002040 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002041 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002042 }
2043
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002044 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002045 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002046 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002047 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2048 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002049 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002050
2051 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002052}
2053
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002054VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002055 VkPhysicalDevice physicalDevice,
2056 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002057 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002058{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002059 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002060
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002061 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2062
2063 return result;
2064}
2065
2066bool PostGetPhysicalDeviceImageFormatProperties(
2067 VkPhysicalDevice physicalDevice,
2068 VkFormat format,
2069 VkImageType type,
2070 VkImageTiling tiling,
2071 VkImageUsageFlags usage,
2072 VkImageFormatProperties* pImageFormatProperties,
2073 VkResult result)
2074{
2075
2076 if(format < VK_FORMAT_BEGIN_RANGE ||
2077 format > VK_FORMAT_END_RANGE)
2078 {
2079 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2080 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2081 return false;
2082 }
2083
2084 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2085 type > VK_IMAGE_TYPE_END_RANGE)
2086 {
2087 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2088 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2089 return false;
2090 }
2091
2092 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2093 tiling > VK_IMAGE_TILING_END_RANGE)
2094 {
2095 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2096 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2097 return false;
2098 }
2099
2100
2101 if(pImageFormatProperties != nullptr)
2102 {
2103 }
2104
2105 if(result < VK_SUCCESS)
2106 {
2107 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2108 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2109 return false;
2110 }
2111
2112 return true;
2113}
2114
2115VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2116 VkPhysicalDevice physicalDevice,
2117 VkFormat format,
2118 VkImageType type,
2119 VkImageTiling tiling,
2120 VkImageUsageFlags usage,
2121 VkImageFormatProperties* pImageFormatProperties)
2122{
2123 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
2124
2125 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002126
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002127 return result;
2128}
2129
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002130bool PostGetPhysicalDeviceProperties(
2131 VkPhysicalDevice physicalDevice,
2132 VkPhysicalDeviceProperties* pProperties,
2133 VkResult result)
2134{
2135
2136 if(pProperties != nullptr)
2137 {
2138 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2139 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2140 {
2141 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2142 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2143 return false;
2144 }
2145 }
2146
2147 if(result < VK_SUCCESS)
2148 {
2149 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2150 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2151 return false;
2152 }
2153
2154 return true;
2155}
2156
2157VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2158 VkPhysicalDevice physicalDevice,
2159 VkPhysicalDeviceProperties* pProperties)
2160{
2161 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2162
2163 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2164
2165 return result;
2166}
2167
Cody Northropef72e2a2015-08-03 17:04:53 -06002168bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002169 VkPhysicalDevice physicalDevice,
2170 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002171 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002172 VkResult result)
2173{
2174
Cody Northropef72e2a2015-08-03 17:04:53 -06002175 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002176 {
2177 }
2178
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002179 if(pQueueProperties != nullptr)
2180 {
2181 }
2182
2183 if(result < VK_SUCCESS)
2184 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002185 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002186 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2187 return false;
2188 }
2189
2190 return true;
2191}
2192
2193VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2194 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002195 uint32_t* pCount,
2196 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002197{
Cody Northropef72e2a2015-08-03 17:04:53 -06002198 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002199
Cody Northropef72e2a2015-08-03 17:04:53 -06002200 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002201
2202 return result;
2203}
2204
2205bool PostGetPhysicalDeviceMemoryProperties(
2206 VkPhysicalDevice physicalDevice,
2207 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2208 VkResult result)
2209{
2210
2211 if(pMemoryProperties != nullptr)
2212 {
2213 }
2214
2215 if(result < VK_SUCCESS)
2216 {
2217 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2218 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2219 return false;
2220 }
2221
2222 return true;
2223}
2224
2225VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2226 VkPhysicalDevice physicalDevice,
2227 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2228{
2229 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2230
2231 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2232
2233 return result;
2234}
2235
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002236VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2237 VkPhysicalDevice physicalDevice,
2238 const VkDeviceCreateInfo* pCreateInfo,
2239 VkDevice* pDevice)
2240{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002241 /*
2242 * NOTE: The loader fills in the ICD's device object in *pDevice.
2243 * Use that object to get the dispatch table.
2244 *
2245 * NOTE: We do not validate physicalDevice or any dispatchable
2246 * object as the first parameter. We couldn't get here if it was wrong!
2247 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002248 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002249 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2250 if(result == VK_SUCCESS)
2251 {
2252 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2253 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2254 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2255 }
2256
2257 return result;
2258}
2259
2260VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
2261 VkDevice device)
2262{
2263 layer_debug_report_destroy_device(device);
2264
2265 dispatch_key key = get_dispatch_key(device);
2266#if DISPATCH_MAP_DEBUG
2267 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2268#endif
2269
2270 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
2271 pc_device_table_map.erase(key);
2272 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2273
2274 return result;
2275}
2276
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002277bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002278 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002279 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002280 uint32_t queueIndex,
2281 VkQueue* pQueue,
2282 VkResult result)
2283{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002284
2285
2286
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002287 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002288 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002289 }
2290
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002291 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002292 {
2293 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2295 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002296 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002297
2298 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002299}
2300
2301VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2302 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002303 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002304 uint32_t queueIndex,
2305 VkQueue* pQueue)
2306{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002307 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002308
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002309 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002310
2311 return result;
2312}
2313
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002314bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002315 VkQueue queue,
2316 const VkCmdBuffer* pCmdBuffers)
2317{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002318 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002319 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002320 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002321
2322 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002323}
2324
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002325bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002326 VkQueue queue,
2327 uint32_t cmdBufferCount,
2328 VkFence fence,
2329 VkResult result)
2330{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002331
2332
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002333
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002334 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002335 {
2336 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002337 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2338 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002339 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002340
2341 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002342}
2343
2344VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2345 VkQueue queue,
2346 uint32_t cmdBufferCount,
2347 const VkCmdBuffer* pCmdBuffers,
2348 VkFence fence)
2349{
2350 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002351
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002352 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2353
2354 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2355
2356 return result;
2357}
2358
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002359bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002360 VkQueue queue,
2361 VkResult result)
2362{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002363
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002364 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002365 {
2366 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002367 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2368 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002369 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002370
2371 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002372}
2373
2374VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2375 VkQueue queue)
2376{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002377 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2378
2379 PostQueueWaitIdle(queue, result);
2380
2381 return result;
2382}
2383
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002384bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002385 VkDevice device,
2386 VkResult result)
2387{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002388
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002389 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002390 {
2391 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002392 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2393 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002394 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002395
2396 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002397}
2398
2399VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2400 VkDevice device)
2401{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002402 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2403
2404 PostDeviceWaitIdle(device, result);
2405
2406 return result;
2407}
2408
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002409bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002410 VkDevice device,
2411 const VkMemoryAllocInfo* pAllocInfo)
2412{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002413 if(pAllocInfo != nullptr)
2414 {
2415 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002416 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002417 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002418 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002419 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002420 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002421 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002422
2423 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002424}
2425
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002426bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002427 VkDevice device,
2428 VkDeviceMemory* pMem,
2429 VkResult result)
2430{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002431
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002432 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002433 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002434 }
2435
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002436 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002437 {
2438 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002439 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2440 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002441 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002442
2443 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002444}
2445
2446VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2447 VkDevice device,
2448 const VkMemoryAllocInfo* pAllocInfo,
2449 VkDeviceMemory* pMem)
2450{
2451 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002452
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002453 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2454
2455 PostAllocMemory(device, pMem, result);
2456
2457 return result;
2458}
2459
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002460bool PostFreeMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002461 VkDevice device,
2462 VkDeviceMemory mem,
2463 VkResult result)
2464{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002465
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002466
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002467 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002468 {
2469 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002470 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2471 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002472 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002473
2474 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002475}
2476
2477VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2478 VkDevice device,
2479 VkDeviceMemory mem)
2480{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002481 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2482
2483 PostFreeMemory(device, mem, result);
2484
2485 return result;
2486}
2487
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002488bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002489 VkDevice device,
2490 VkDeviceMemory mem,
2491 VkDeviceSize offset,
2492 VkDeviceSize size,
2493 VkMemoryMapFlags flags,
2494 void** ppData,
2495 VkResult result)
2496{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002497
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002498
2499
2500
2501
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002502 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002503 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002504 }
2505
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002506 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002507 {
2508 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002509 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2510 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002511 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002512
2513 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002514}
2515
2516VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2517 VkDevice device,
2518 VkDeviceMemory mem,
2519 VkDeviceSize offset,
2520 VkDeviceSize size,
2521 VkMemoryMapFlags flags,
2522 void** ppData)
2523{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002524 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2525
2526 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2527
2528 return result;
2529}
2530
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002531bool PostUnmapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002532 VkDevice device,
2533 VkDeviceMemory mem,
2534 VkResult result)
2535{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002536
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002537
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002538 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002539 {
2540 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002541 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2542 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002543 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002544
2545 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002546}
2547
2548VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2549 VkDevice device,
2550 VkDeviceMemory mem)
2551{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002552 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2553
2554 PostUnmapMemory(device, mem, result);
2555
2556 return result;
2557}
2558
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002559bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002560 VkDevice device,
2561 const VkMappedMemoryRange* pMemRanges)
2562{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002563 if(pMemRanges != nullptr)
2564 {
2565 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002566 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002567 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002568 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002569 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002570 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002571 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002572
2573 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002574}
2575
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002576bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002577 VkDevice device,
2578 uint32_t memRangeCount,
2579 VkResult result)
2580{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002581
2582
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002583 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002584 {
2585 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002586 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2587 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002588 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002589
2590 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002591}
2592
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002593VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002594 VkDevice device,
2595 uint32_t memRangeCount,
2596 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002597{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002598 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002599
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002600 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002601
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002602 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2603
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002604 return result;
2605}
2606
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002607bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002608 VkDevice device,
2609 const VkMappedMemoryRange* pMemRanges)
2610{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002611 if(pMemRanges != nullptr)
2612 {
2613 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002614 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002615 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002616 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002617 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002618 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002619 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002620
2621 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002622}
2623
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002624bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002625 VkDevice device,
2626 uint32_t memRangeCount,
2627 VkResult result)
2628{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002629
2630
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002631 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002632 {
2633 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002634 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2635 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002636 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002637
2638 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002639}
2640
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002641VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002642 VkDevice device,
2643 uint32_t memRangeCount,
2644 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002645{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002646 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002647
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002648 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002649
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002650 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2651
Tony Barbour859ceab2015-04-16 19:23:13 -06002652 return result;
2653}
2654
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002655bool PostGetDeviceMemoryCommitment(
2656 VkDevice device,
2657 VkDeviceMemory memory,
2658 VkDeviceSize* pCommittedMemoryInBytes,
2659 VkResult result)
2660{
2661
2662
2663 if(pCommittedMemoryInBytes != nullptr)
2664 {
2665 }
2666
2667 if(result < VK_SUCCESS)
2668 {
2669 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2670 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2671 return false;
2672 }
2673
2674 return true;
2675}
2676
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002677VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002678 VkDevice device,
2679 VkDeviceMemory memory,
2680 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002681{
2682 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2683
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002684 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2685
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002686 return result;
2687}
2688
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002689bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002690 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002691 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002692 VkDeviceMemory mem,
2693 VkDeviceSize memOffset,
2694 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002695{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002696
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002697
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002698
2699
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002700 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002701 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002702 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2703 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2704 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002705 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002706
2707 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002708}
2709
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002710VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002711 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002712 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002713 VkDeviceMemory mem,
2714 VkDeviceSize memOffset)
2715{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002716 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002717
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002718 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002719
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002720 return result;
2721}
2722
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002723bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002724 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002725 VkImage image,
2726 VkDeviceMemory mem,
2727 VkDeviceSize memOffset,
2728 VkResult result)
2729{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002730
2731
2732
2733
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002734 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002735 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002736 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2737 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2738 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002739 }
2740
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002741 return true;
2742}
2743
2744VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2745 VkDevice device,
2746 VkImage image,
2747 VkDeviceMemory mem,
2748 VkDeviceSize memOffset)
2749{
2750 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2751
2752 PostBindImageMemory(device, image, mem, memOffset, result);
2753
2754 return result;
2755}
2756
2757bool PostGetBufferMemoryRequirements(
2758 VkDevice device,
2759 VkBuffer buffer,
2760 VkMemoryRequirements* pMemoryRequirements,
2761 VkResult result)
2762{
2763
2764
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002765 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002766 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002767 }
2768
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002769 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002770 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002771 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2772 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2773 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002774 }
2775
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002776 return true;
2777}
2778
2779VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2780 VkDevice device,
2781 VkBuffer buffer,
2782 VkMemoryRequirements* pMemoryRequirements)
2783{
2784 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2785
2786 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2787
2788 return result;
2789}
2790
2791bool PostGetImageMemoryRequirements(
2792 VkDevice device,
2793 VkImage image,
2794 VkMemoryRequirements* pMemoryRequirements,
2795 VkResult result)
2796{
2797
2798
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002799 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002800 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002801 }
2802
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002803 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002804 {
2805 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2806 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2807 return false;
2808 }
2809
2810 return true;
2811}
2812
2813VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2814 VkDevice device,
2815 VkImage image,
2816 VkMemoryRequirements* pMemoryRequirements)
2817{
2818 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2819
2820 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2821
2822 return result;
2823}
2824
2825bool PostGetImageSparseMemoryRequirements(
2826 VkDevice device,
2827 VkImage image,
2828 uint32_t* pNumRequirements,
2829 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2830 VkResult result)
2831{
2832
2833
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002834 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002835 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002836 }
2837
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002838 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002839 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002840 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2841 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2842 {
2843 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002844 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002845 return false;
2846 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002847 }
2848
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002849 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002850 {
2851 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2852 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2853 return false;
2854 }
2855
2856 return true;
2857}
2858
2859VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2860 VkDevice device,
2861 VkImage image,
2862 uint32_t* pNumRequirements,
2863 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2864{
2865 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2866
2867 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2868
2869 return result;
2870}
2871
2872bool PostGetPhysicalDeviceSparseImageFormatProperties(
2873 VkPhysicalDevice physicalDevice,
2874 VkFormat format,
2875 VkImageType type,
2876 uint32_t samples,
2877 VkImageUsageFlags usage,
2878 VkImageTiling tiling,
2879 uint32_t* pNumProperties,
2880 VkSparseImageFormatProperties* pProperties,
2881 VkResult result)
2882{
2883
2884 if(format < VK_FORMAT_BEGIN_RANGE ||
2885 format > VK_FORMAT_END_RANGE)
2886 {
2887 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002888 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002889 return false;
2890 }
2891
2892 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2893 type > VK_IMAGE_TYPE_END_RANGE)
2894 {
2895 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002896 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002897 return false;
2898 }
2899
2900
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002901
2902 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2903 tiling > VK_IMAGE_TILING_END_RANGE)
2904 {
2905 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002906 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002907 return false;
2908 }
2909
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002910 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002911 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002912 }
2913
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002914 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002915 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002916 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2917 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2918 {
2919 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002920 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002921 return false;
2922 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002923 }
2924
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002925 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002926 {
2927 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2928 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2929 return false;
2930 }
2931
2932 return true;
2933}
2934
2935VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2936 VkPhysicalDevice physicalDevice,
2937 VkFormat format,
2938 VkImageType type,
2939 uint32_t samples,
2940 VkImageUsageFlags usage,
2941 VkImageTiling tiling,
2942 uint32_t* pNumProperties,
2943 VkSparseImageFormatProperties* pProperties)
2944{
2945 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2946
2947 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2948
2949 return result;
2950}
2951
2952bool PreQueueBindSparseBufferMemory(
2953 VkQueue queue,
2954 const VkSparseMemoryBindInfo* pBindInfo)
2955{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002956 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002957 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002958 }
2959
2960 return true;
2961}
2962
2963bool PostQueueBindSparseBufferMemory(
2964 VkQueue queue,
2965 VkBuffer buffer,
2966 uint32_t numBindings,
2967 VkResult result)
2968{
2969
2970
2971
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002972 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002973 {
2974 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2975 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2976 return false;
2977 }
2978
2979 return true;
2980}
2981
2982VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2983 VkQueue queue,
2984 VkBuffer buffer,
2985 uint32_t numBindings,
2986 const VkSparseMemoryBindInfo* pBindInfo)
2987{
2988 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2989
2990 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2991
2992 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2993
2994 return result;
2995}
2996
2997bool PreQueueBindSparseImageOpaqueMemory(
2998 VkQueue queue,
2999 const VkSparseMemoryBindInfo* pBindInfo)
3000{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003001 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003002 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003003 }
3004
3005 return true;
3006}
3007
3008bool PostQueueBindSparseImageOpaqueMemory(
3009 VkQueue queue,
3010 VkImage image,
3011 uint32_t numBindings,
3012 VkResult result)
3013{
3014
3015
3016
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003017 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003018 {
3019 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
3020 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3021 return false;
3022 }
3023
3024 return true;
3025}
3026
3027VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
3028 VkQueue queue,
3029 VkImage image,
3030 uint32_t numBindings,
3031 const VkSparseMemoryBindInfo* pBindInfo)
3032{
3033 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
3034
3035 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
3036
3037 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
3038
3039 return result;
3040}
3041
3042bool PreQueueBindSparseImageMemory(
3043 VkQueue queue,
3044 const VkSparseImageMemoryBindInfo* pBindInfo)
3045{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003046 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003047 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003048 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3049 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
3050 {
3051 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003052 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003053 return false;
3054 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003055 }
3056
3057 return true;
3058}
3059
3060bool PostQueueBindSparseImageMemory(
3061 VkQueue queue,
3062 VkImage image,
3063 uint32_t numBindings,
3064 VkResult result)
3065{
3066
3067
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003068
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003069 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003070 {
3071 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003072 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3073 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003074 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003075
3076 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003077}
3078
3079VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003080 VkQueue queue,
3081 VkImage image,
3082 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003083 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003084{
3085 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003086
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003087 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003088
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003089 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003090
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003091 return result;
3092}
3093
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003094bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003095 VkDevice device,
3096 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003097{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003098 if(pCreateInfo != nullptr)
3099 {
3100 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003101 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003102 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003103 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003104 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003105 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003106 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003107
3108 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003109}
3110
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003111bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003112 VkDevice device,
3113 VkFence* pFence,
3114 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003115{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003116
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003117 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003118 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003119 }
3120
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003121 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003122 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003123 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003124 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3125 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003126 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003127
3128 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003129}
3130
3131VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3132 VkDevice device,
3133 const VkFenceCreateInfo* pCreateInfo,
3134 VkFence* pFence)
3135{
3136 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003137
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003138 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3139
3140 PostCreateFence(device, pFence, result);
3141
3142 return result;
3143}
3144
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003145bool PostDestroyFence(
3146 VkDevice device,
3147 VkFence fence,
3148 VkResult result)
3149{
3150
3151
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003152 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003153 {
3154 std::string reason = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3155 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3156 return false;
3157 }
3158
3159 return true;
3160}
3161
3162VK_LAYER_EXPORT VkResult VKAPI vkDestroyFence(
3163 VkDevice device,
3164 VkFence fence)
3165{
3166 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3167
3168 PostDestroyFence(device, fence, result);
3169
3170 return result;
3171}
3172
3173bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003174 VkDevice device,
3175 const VkFence* pFences)
3176{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003177 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003178 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003179 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003180
3181 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003182}
3183
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003184bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003185 VkDevice device,
3186 uint32_t fenceCount,
3187 VkResult result)
3188{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003189
3190
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003191 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003192 {
3193 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003194 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3195 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003196 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003197
3198 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003199}
3200
3201VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3202 VkDevice device,
3203 uint32_t fenceCount,
3204 const VkFence* pFences)
3205{
3206 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003207
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003208 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3209
3210 PostResetFences(device, fenceCount, result);
3211
3212 return result;
3213}
3214
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003215bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003216 VkDevice device,
3217 VkFence fence,
3218 VkResult result)
3219{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003220
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003221
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003222 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003223 {
3224 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003225 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3226 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003227 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003228
3229 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003230}
3231
3232VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3233 VkDevice device,
3234 VkFence fence)
3235{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003236 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3237
3238 PostGetFenceStatus(device, fence, result);
3239
3240 return result;
3241}
3242
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003243bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003244 VkDevice device,
3245 const VkFence* pFences)
3246{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003247 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003248 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003249 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003250
3251 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003252}
3253
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003254bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003255 VkDevice device,
3256 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003257 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003258 uint64_t timeout,
3259 VkResult result)
3260{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003261
3262
3263
3264
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003265 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003266 {
3267 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003268 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3269 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003270 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003271
3272 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003273}
3274
3275VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3276 VkDevice device,
3277 uint32_t fenceCount,
3278 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003279 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003280 uint64_t timeout)
3281{
3282 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003283
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003284 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3285
3286 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3287
3288 return result;
3289}
3290
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003291bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003292 VkDevice device,
3293 const VkSemaphoreCreateInfo* pCreateInfo)
3294{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003295 if(pCreateInfo != nullptr)
3296 {
3297 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003298 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003299 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003300 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003301 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003302 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003303 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003304
3305 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003306}
3307
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003308bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003309 VkDevice device,
3310 VkSemaphore* pSemaphore,
3311 VkResult result)
3312{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003313
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003314 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003315 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003316 }
3317
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003318 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003319 {
3320 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003321 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3322 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003323 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003324
3325 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003326}
3327
3328VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3329 VkDevice device,
3330 const VkSemaphoreCreateInfo* pCreateInfo,
3331 VkSemaphore* pSemaphore)
3332{
3333 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003334
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003335 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3336
3337 PostCreateSemaphore(device, pSemaphore, result);
3338
3339 return result;
3340}
3341
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003342bool PostDestroySemaphore(
3343 VkDevice device,
3344 VkSemaphore semaphore,
3345 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003346{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003347
3348
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003349 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003350 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003351 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3352 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3353 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003354 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003355
3356 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003357}
3358
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003359VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3360 VkDevice device,
3361 VkSemaphore semaphore)
3362{
3363 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3364
3365 PostDestroySemaphore(device, semaphore, result);
3366
3367 return result;
3368}
3369
3370bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003371 VkQueue queue,
3372 VkSemaphore semaphore,
3373 VkResult result)
3374{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003375
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003376
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003377 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003378 {
3379 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003380 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3381 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003382 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003383
3384 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003385}
3386
3387VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3388 VkQueue queue,
3389 VkSemaphore semaphore)
3390{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003391 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3392
3393 PostQueueSignalSemaphore(queue, semaphore, result);
3394
3395 return result;
3396}
3397
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003398bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003399 VkQueue queue,
3400 VkSemaphore semaphore,
3401 VkResult result)
3402{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003403
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003404
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003405 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003406 {
3407 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003408 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3409 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003410 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003411
3412 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003413}
3414
3415VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3416 VkQueue queue,
3417 VkSemaphore semaphore)
3418{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003419 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3420
3421 PostQueueWaitSemaphore(queue, semaphore, result);
3422
3423 return result;
3424}
3425
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003426bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003427 VkDevice device,
3428 const VkEventCreateInfo* pCreateInfo)
3429{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003430 if(pCreateInfo != nullptr)
3431 {
3432 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003433 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003434 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003435 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003436 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003437 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003438 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003439
3440 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441}
3442
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003443bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003444 VkDevice device,
3445 VkEvent* pEvent,
3446 VkResult result)
3447{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003448
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003449 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003450 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003451 }
3452
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003453 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003454 {
3455 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003456 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3457 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003458 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003459
3460 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003461}
3462
3463VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3464 VkDevice device,
3465 const VkEventCreateInfo* pCreateInfo,
3466 VkEvent* pEvent)
3467{
3468 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003469
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003470 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3471
3472 PostCreateEvent(device, pEvent, result);
3473
3474 return result;
3475}
3476
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003477bool PostDestroyEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003478 VkDevice device,
3479 VkEvent event,
3480 VkResult result)
3481{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003482
3483
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003484 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003485 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003486 std::string reason = "vkDestroyEvent parameter, VkResult result, is " + EnumeratorString(result);
3487 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3488 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003489 }
3490
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003491 return true;
3492}
3493
3494VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3495 VkDevice device,
3496 VkEvent event)
3497{
3498 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3499
3500 PostDestroyEvent(device, event, result);
3501
3502 return result;
3503}
3504
3505bool PostGetEventStatus(
3506 VkDevice device,
3507 VkEvent event,
3508 VkResult result)
3509{
3510
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003511
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003512 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003513 {
3514 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003515 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3516 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003517 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003518
3519 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003520}
3521
3522VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3523 VkDevice device,
3524 VkEvent event)
3525{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003526 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3527
3528 PostGetEventStatus(device, event, result);
3529
3530 return result;
3531}
3532
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003533bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003534 VkDevice device,
3535 VkEvent event,
3536 VkResult result)
3537{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003538
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003539
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003540 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003541 {
3542 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003543 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3544 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003545 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003546
3547 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003548}
3549
3550VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3551 VkDevice device,
3552 VkEvent event)
3553{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003554 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3555
3556 PostSetEvent(device, event, result);
3557
3558 return result;
3559}
3560
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003561bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003562 VkDevice device,
3563 VkEvent event,
3564 VkResult result)
3565{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003566
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003567
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003568 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003569 {
3570 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003571 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3572 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003573 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003574
3575 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003576}
3577
3578VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3579 VkDevice device,
3580 VkEvent event)
3581{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003582 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3583
3584 PostResetEvent(device, event, result);
3585
3586 return result;
3587}
3588
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003589bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003590 VkDevice device,
3591 const VkQueryPoolCreateInfo* pCreateInfo)
3592{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003593 if(pCreateInfo != nullptr)
3594 {
3595 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003596 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003597 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003598 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003599 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003600 }
3601 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3602 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3603 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003604 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003605 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003606 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003607 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003608 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003609
3610 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003611}
3612
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003613bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003614 VkDevice device,
3615 VkQueryPool* pQueryPool,
3616 VkResult result)
3617{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003618
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003619 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003620 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003621 }
3622
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003623 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003624 {
3625 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003626 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3627 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003628 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003629
3630 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003631}
3632
3633VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3634 VkDevice device,
3635 const VkQueryPoolCreateInfo* pCreateInfo,
3636 VkQueryPool* pQueryPool)
3637{
3638 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003639
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003640 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3641
3642 PostCreateQueryPool(device, pQueryPool, result);
3643
3644 return result;
3645}
3646
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003647bool PostDestroyQueryPool(
3648 VkDevice device,
3649 VkQueryPool queryPool,
3650 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003651{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003652
3653
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003654 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003655 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003656 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3657 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3658 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003659 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003660
3661 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003662}
3663
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003664VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3665 VkDevice device,
3666 VkQueryPool queryPool)
3667{
3668 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3669
3670 PostDestroyQueryPool(device, queryPool, result);
3671
3672 return result;
3673}
3674
3675bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003676 VkDevice device,
3677 VkQueryPool queryPool,
3678 uint32_t startQuery,
3679 uint32_t queryCount,
3680 size_t* pDataSize,
3681 void* pData,
3682 VkQueryResultFlags flags,
3683 VkResult result)
3684{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003685
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003686
3687
3688
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003689 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003690 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003691 }
3692
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003693 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003694 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003695 }
3696
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003697
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003698 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003699 {
3700 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003701 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3702 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003703 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003704
3705 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003706}
3707
3708VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3709 VkDevice device,
3710 VkQueryPool queryPool,
3711 uint32_t startQuery,
3712 uint32_t queryCount,
3713 size_t* pDataSize,
3714 void* pData,
3715 VkQueryResultFlags flags)
3716{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003717 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3718
3719 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3720
3721 return result;
3722}
3723
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003724bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003725 VkDevice device,
3726 const VkBufferCreateInfo* pCreateInfo)
3727{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003728 if(pCreateInfo != nullptr)
3729 {
3730 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003731 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003732 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003733 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003734 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003735 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003736 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3737 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003738 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003739 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003740 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003741 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003742 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003743 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003744 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003745 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003746 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003747
3748 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003749}
3750
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003751bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003752 VkDevice device,
3753 VkBuffer* pBuffer,
3754 VkResult result)
3755{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003756
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003757 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003758 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003759 }
3760
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003761 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003762 {
3763 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003764 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3765 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003766 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767
3768 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003769}
3770
3771VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3772 VkDevice device,
3773 const VkBufferCreateInfo* pCreateInfo,
3774 VkBuffer* pBuffer)
3775{
3776 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003777
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003778 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3779
3780 PostCreateBuffer(device, pBuffer, result);
3781
3782 return result;
3783}
3784
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003785bool PostDestroyBuffer(
3786 VkDevice device,
3787 VkBuffer buffer,
3788 VkResult result)
3789{
3790
3791
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003792 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003793 {
3794 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3795 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3796 return false;
3797 }
3798
3799 return true;
3800}
3801
3802VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3803 VkDevice device,
3804 VkBuffer buffer)
3805{
3806 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
3807
3808 PostDestroyBuffer(device, buffer, result);
3809
3810 return result;
3811}
3812
3813bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003814 VkDevice device,
3815 const VkBufferViewCreateInfo* pCreateInfo)
3816{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003817 if(pCreateInfo != nullptr)
3818 {
3819 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003820 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003821 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003822 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003823 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003824 }
3825 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3826 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3827 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003828 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003829 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003830 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003831 }
3832 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3833 pCreateInfo->format > VK_FORMAT_END_RANGE)
3834 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003835 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003836 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003837 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003838 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003839 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003840
3841 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003842}
3843
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003844bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003845 VkDevice device,
3846 VkBufferView* pView,
3847 VkResult result)
3848{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003849
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003850 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003851 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003852 }
3853
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003854 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003855 {
3856 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003857 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3858 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003859 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003860
3861 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003862}
3863
3864VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3865 VkDevice device,
3866 const VkBufferViewCreateInfo* pCreateInfo,
3867 VkBufferView* pView)
3868{
3869 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003870
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003871 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3872
3873 PostCreateBufferView(device, pView, result);
3874
3875 return result;
3876}
3877
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003878bool PostDestroyBufferView(
3879 VkDevice device,
3880 VkBufferView bufferView,
3881 VkResult result)
3882{
3883
3884
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003885 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003886 {
3887 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
3888 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3889 return false;
3890 }
3891
3892 return true;
3893}
3894
3895VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
3896 VkDevice device,
3897 VkBufferView bufferView)
3898{
3899 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
3900
3901 PostDestroyBufferView(device, bufferView, result);
3902
3903 return result;
3904}
3905
3906bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003907 VkDevice device,
3908 const VkImageCreateInfo* pCreateInfo)
3909{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003910 if(pCreateInfo != nullptr)
3911 {
3912 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003913 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003914 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003915 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003916 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003917 }
3918 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3919 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3920 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003921 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003922 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003923 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003924 }
3925 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3926 pCreateInfo->format > VK_FORMAT_END_RANGE)
3927 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003928 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003929 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003930 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003931 }
3932 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3933 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3934 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003936 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003937 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003938 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003939 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3940 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003941 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3943 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003944 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003945 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003946 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003947 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003948 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003949 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003950
3951 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003952}
3953
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003954bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003955 VkDevice device,
3956 VkImage* pImage,
3957 VkResult result)
3958{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003959
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003960 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003961 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003962 }
3963
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003964 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003965 {
3966 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003967 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3968 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003969 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003970
3971 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003972}
3973
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003974VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3975 VkDevice device,
3976 const VkImageCreateInfo* pCreateInfo,
3977 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003978{
3979 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003980
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003981 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3982
3983 PostCreateImage(device, pImage, result);
3984
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003985 return result;
3986}
3987
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003988bool PostDestroyImage(
3989 VkDevice device,
3990 VkImage image,
3991 VkResult result)
3992{
3993
3994
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003995 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003996 {
3997 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
3998 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3999 return false;
4000 }
4001
4002 return true;
4003}
4004
4005VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
4006 VkDevice device,
4007 VkImage image)
4008{
4009 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
4010
4011 PostDestroyImage(device, image, result);
4012
4013 return result;
4014}
4015
4016bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004017 VkDevice device,
4018 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004019{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004020 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004021 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004022 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4023 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4024 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004025 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004026 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004027 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004028 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004029 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004030
4031 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004032}
4033
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004034bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004035 VkDevice device,
4036 VkImage image,
4037 VkSubresourceLayout* pLayout,
4038 VkResult result)
4039{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004040
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004041
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004042 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004043 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004044 }
4045
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004046 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004047 {
4048 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004049 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4050 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004051 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004052
4053 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004054}
4055
4056VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4057 VkDevice device,
4058 VkImage image,
4059 const VkImageSubresource* pSubresource,
4060 VkSubresourceLayout* pLayout)
4061{
4062 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004063
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004064 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4065
4066 PostGetImageSubresourceLayout(device, image, pLayout, result);
4067
4068 return result;
4069}
4070
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004071bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004072 VkDevice device,
4073 const VkImageViewCreateInfo* pCreateInfo)
4074{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004075 if(pCreateInfo != nullptr)
4076 {
4077 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004078 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004079 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004080 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004081 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004082 }
4083 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4084 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4085 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004086 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004087 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004088 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004089 }
4090 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4091 pCreateInfo->format > VK_FORMAT_END_RANGE)
4092 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004093 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004094 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004095 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004096 }
4097 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4098 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4099 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004100 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004101 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004102 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004103 }
4104 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4105 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4106 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004107 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004108 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004109 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004110 }
4111 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4112 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4113 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004114 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004115 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004116 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004117 }
4118 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4119 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4120 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004121 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004122 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004123 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004124 }
4125 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4126 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4127 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004128 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004129 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004130 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004131 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004132 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004133
4134 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004135}
4136
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004137bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004138 VkDevice device,
4139 VkImageView* pView,
4140 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004141{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004142
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004143 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004144 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004145 }
4146
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004147 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004148 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004149 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004150 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4151 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004152 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004153
4154 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004155}
4156
4157VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4158 VkDevice device,
4159 const VkImageViewCreateInfo* pCreateInfo,
4160 VkImageView* pView)
4161{
4162 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004163
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004164 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4165
4166 PostCreateImageView(device, pView, result);
4167
4168 return result;
4169}
4170
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004171bool PostDestroyImageView(
4172 VkDevice device,
4173 VkImageView imageView,
4174 VkResult result)
4175{
4176
4177
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004178 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004179 {
4180 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4181 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4182 return false;
4183 }
4184
4185 return true;
4186}
4187
4188VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4189 VkDevice device,
4190 VkImageView imageView)
4191{
4192 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4193
4194 PostDestroyImageView(device, imageView, result);
4195
4196 return result;
4197}
4198
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004199bool PostDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004200 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004201 VkShaderModule shaderModule,
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004202 VkResult result)
4203{
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004204
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004205
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004206 if(result < VK_SUCCESS)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004207 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004208 std::string reason = "vkDestroyShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4209 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4210 return false;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004211 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004212
4213 return true;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004214}
4215
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004216VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004217 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004218 VkShaderModule shaderModule)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004219{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004220 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004221
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004222 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004223
4224 return result;
4225}
4226
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004227bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004228 VkDevice device,
4229 const VkShaderCreateInfo* pCreateInfo)
4230{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004231 if(pCreateInfo != nullptr)
4232 {
4233 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004234 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004236 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004237 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004238 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004239 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004240 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004241 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004242 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004243
4244 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004245}
4246
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004247bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004248 VkDevice device,
4249 VkShader* pShader,
4250 VkResult result)
4251{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004252
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004253 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004254 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004255 }
4256
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004257 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004258 {
4259 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004260 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4261 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004262 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004263
4264 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004265}
4266
4267VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4268 VkDevice device,
4269 const VkShaderCreateInfo* pCreateInfo,
4270 VkShader* pShader)
4271{
4272 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004273
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004274 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4275
4276 PostCreateShader(device, pShader, result);
4277
4278 return result;
4279}
4280
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004281bool PostDestroyShader(
4282 VkDevice device,
4283 VkShader shader,
4284 VkResult result)
4285{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004286
4287
4288 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004289 {
4290 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4291 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4292 return false;
4293 }
4294
4295 return true;
4296}
4297
4298VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4299 VkDevice device,
4300 VkShader shader)
4301{
4302 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4303
4304 PostDestroyShader(device, shader, result);
4305
4306 return result;
4307}
4308
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004309bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004310 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004311 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004312{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004313 if(pCreateInfo != nullptr)
4314 {
4315 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004316 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004317 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004318 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004319 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004320 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004321 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004322 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004323 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004324 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004325
4326 return true;
4327}
4328
4329bool PostCreatePipelineCache(
4330 VkDevice device,
4331 VkPipelineCache* pPipelineCache,
4332 VkResult result)
4333{
4334
4335 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004336 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004337 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004338
4339 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004340 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004341 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004342 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4343 return false;
4344 }
4345
4346 return true;
4347}
4348
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004349VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06004350 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004351 const VkPipelineCacheCreateInfo* pCreateInfo,
4352 VkPipelineCache* pPipelineCache)
4353{
4354 PreCreatePipelineCache(device, pCreateInfo);
4355
4356 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4357
4358 PostCreatePipelineCache(device, pPipelineCache, result);
4359
4360 return result;
4361}
4362
4363bool PostDestroyPipelineCache(
4364 VkDevice device,
4365 VkPipelineCache pipelineCache,
Tony Barboure307f582015-07-10 15:29:03 -06004366 VkResult result)
4367{
4368
Tony Barboure307f582015-07-10 15:29:03 -06004369
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004370 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004371 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004372 std::string reason = "vkDestroyPipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004373 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4374 return false;
4375 }
4376
4377 return true;
4378}
4379
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004380VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineCache(
4381 VkDevice device,
4382 VkPipelineCache pipelineCache)
4383{
4384 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache);
4385
4386 PostDestroyPipelineCache(device, pipelineCache, result);
4387
4388 return result;
4389}
4390
4391bool PostGetPipelineCacheSize(
4392 VkDevice device,
4393 VkPipelineCache pipelineCache)
4394{
4395
4396
4397 return true;
4398}
4399
4400VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4401 VkDevice device,
4402 VkPipelineCache pipelineCache)
4403{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004404 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004405
4406 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004407
4408 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004409}
4410
4411bool PostGetPipelineCacheData(
4412 VkDevice device,
4413 VkPipelineCache pipelineCache,
4414 void* pData,
4415 VkResult result)
4416{
4417
4418
4419 if(pData != nullptr)
4420 {
4421 }
4422
4423 if(result < VK_SUCCESS)
4424 {
4425 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4426 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4427 return false;
4428 }
4429
4430 return true;
4431}
4432
4433VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4434 VkDevice device,
4435 VkPipelineCache pipelineCache,
4436 void* pData)
4437{
4438 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4439
4440 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4441
4442 return result;
4443}
4444
4445bool PreMergePipelineCaches(
4446 VkDevice device,
4447 const VkPipelineCache* pSrcCaches)
4448{
4449 if(pSrcCaches != nullptr)
4450 {
4451 }
4452
4453 return true;
4454}
4455
4456bool PostMergePipelineCaches(
4457 VkDevice device,
4458 VkPipelineCache destCache,
4459 uint32_t srcCacheCount,
4460 VkResult result)
4461{
4462
4463
4464
4465 if(result < VK_SUCCESS)
4466 {
4467 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4468 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4469 return false;
4470 }
4471
4472 return true;
4473}
4474
4475VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4476 VkDevice device,
4477 VkPipelineCache destCache,
4478 uint32_t srcCacheCount,
4479 const VkPipelineCache* pSrcCaches)
4480{
4481 PreMergePipelineCaches(device, pSrcCaches);
4482
4483 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4484
4485 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4486
4487 return result;
4488}
4489
4490bool PreCreateGraphicsPipelines(
4491 VkDevice device,
4492 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4493{
4494 if(pCreateInfos != nullptr)
4495 {
4496 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4497 {
4498 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4499 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4500 return false;
4501 }
4502 if(pCreateInfos->pStages != nullptr)
4503 {
4504 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4505 {
4506 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4507 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4508 return false;
4509 }
4510 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4511 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4512 {
4513 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4514 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4515 return false;
4516 }
4517 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4518 {
4519 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4520 {
4521 }
4522 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4523 {
4524 }
4525 }
4526 }
4527 if(pCreateInfos->pVertexInputState != nullptr)
4528 {
4529 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4530 {
4531 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4532 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4533 return false;
4534 }
4535 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4536 {
4537 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4538 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4539 {
4540 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4541 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4542 return false;
4543 }
4544 }
4545 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4546 {
4547 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4548 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4549 {
4550 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4551 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4552 return false;
4553 }
4554 }
4555 }
4556 if(pCreateInfos->pInputAssemblyState != nullptr)
4557 {
4558 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4559 {
4560 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4561 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4562 return false;
4563 }
4564 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4565 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4566 {
4567 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4568 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4569 return false;
4570 }
4571 }
4572 if(pCreateInfos->pTessellationState != nullptr)
4573 {
4574 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4575 {
4576 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4577 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4578 return false;
4579 }
4580 }
4581 if(pCreateInfos->pViewportState != nullptr)
4582 {
4583 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4584 {
4585 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4586 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4587 return false;
4588 }
4589 }
4590 if(pCreateInfos->pRasterState != nullptr)
4591 {
4592 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4593 {
4594 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4595 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4596 return false;
4597 }
4598 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4599 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4600 {
4601 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4602 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4603 return false;
4604 }
4605 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4606 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4607 {
4608 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4609 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4610 return false;
4611 }
4612 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4613 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4614 {
4615 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4616 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4617 return false;
4618 }
4619 }
4620 if(pCreateInfos->pMultisampleState != nullptr)
4621 {
4622 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4623 {
4624 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4625 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4626 return false;
4627 }
4628 }
4629 if(pCreateInfos->pDepthStencilState != nullptr)
4630 {
4631 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4632 {
4633 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4634 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4635 return false;
4636 }
4637 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4638 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4639 {
4640 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4641 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4642 return false;
4643 }
4644 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4645 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4646 {
4647 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4648 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4649 return false;
4650 }
4651 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4652 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4653 {
4654 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4655 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4656 return false;
4657 }
4658 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4659 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4660 {
4661 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4662 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4663 return false;
4664 }
4665 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4666 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4667 {
4668 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4669 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4670 return false;
4671 }
4672 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4673 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4674 {
4675 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4676 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4677 return false;
4678 }
4679 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4680 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4681 {
4682 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4683 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4684 return false;
4685 }
4686 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4687 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4688 {
4689 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4690 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4691 return false;
4692 }
4693 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4694 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4695 {
4696 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4697 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4698 return false;
4699 }
4700 }
4701 if(pCreateInfos->pColorBlendState != nullptr)
4702 {
4703 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4704 {
4705 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4706 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4707 return false;
4708 }
4709 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4710 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4711 {
4712 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4713 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4714 return false;
4715 }
4716 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4717 {
4718 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4719 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4720 {
4721 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4722 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4723 return false;
4724 }
4725 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4726 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4727 {
4728 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4729 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4730 return false;
4731 }
4732 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4733 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4734 {
4735 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4736 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4737 return false;
4738 }
4739 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4740 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4741 {
4742 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4743 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4744 return false;
4745 }
4746 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4747 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4748 {
4749 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4750 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4751 return false;
4752 }
4753 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4754 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4755 {
4756 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4757 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4758 return false;
4759 }
4760 }
4761 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004762 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4763 {
4764 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4765 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4766 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004767 }
4768
4769 return true;
4770}
4771
4772bool PostCreateGraphicsPipelines(
4773 VkDevice device,
4774 VkPipelineCache pipelineCache,
4775 uint32_t count,
4776 VkPipeline* pPipelines,
4777 VkResult result)
4778{
4779
4780
4781
4782 if(pPipelines != nullptr)
4783 {
4784 }
4785
4786 if(result < VK_SUCCESS)
4787 {
4788 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4789 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4790 return false;
4791 }
4792
4793 return true;
4794}
4795
4796VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4797 VkDevice device,
4798 VkPipelineCache pipelineCache,
4799 uint32_t count,
4800 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4801 VkPipeline* pPipelines)
4802{
4803 PreCreateGraphicsPipelines(device, pCreateInfos);
4804
4805 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4806
4807 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4808
4809 return result;
4810}
4811
4812bool PreCreateComputePipelines(
4813 VkDevice device,
4814 const VkComputePipelineCreateInfo* pCreateInfos)
4815{
4816 if(pCreateInfos != nullptr)
4817 {
4818 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4819 {
4820 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4821 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4822 return false;
4823 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004824 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004825 {
4826 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4827 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4828 return false;
4829 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004830 if(pCreateInfos->stage.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4831 pCreateInfos->stage.stage > VK_SHADER_STAGE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004832 {
4833 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4834 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4835 return false;
4836 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004837 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004838 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004839 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004840 {
4841 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004842 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004843 {
4844 }
4845 }
4846 }
4847
4848 return true;
4849}
4850
4851bool PostCreateComputePipelines(
4852 VkDevice device,
4853 VkPipelineCache pipelineCache,
4854 uint32_t count,
4855 VkPipeline* pPipelines,
4856 VkResult result)
4857{
4858
4859
4860
4861 if(pPipelines != nullptr)
4862 {
4863 }
4864
4865 if(result < VK_SUCCESS)
4866 {
4867 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4868 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4869 return false;
4870 }
4871
4872 return true;
4873}
4874
4875VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4876 VkDevice device,
4877 VkPipelineCache pipelineCache,
4878 uint32_t count,
4879 const VkComputePipelineCreateInfo* pCreateInfos,
4880 VkPipeline* pPipelines)
4881{
4882 PreCreateComputePipelines(device, pCreateInfos);
4883
4884 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4885
4886 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4887
4888 return result;
4889}
4890
Tony Barboure307f582015-07-10 15:29:03 -06004891bool PostDestroyPipeline(
4892 VkDevice device,
4893 VkPipeline pipeline,
4894 VkResult result)
4895{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004896
4897
4898 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004899 {
4900 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
4901 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4902 return false;
4903 }
4904
4905 return true;
4906}
4907
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004908VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
4909 VkDevice device,
4910 VkPipeline pipeline)
4911{
4912 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
4913
4914 PostDestroyPipeline(device, pipeline, result);
4915
4916 return result;
4917}
4918
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004919bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004920 VkDevice device,
4921 const VkPipelineLayoutCreateInfo* pCreateInfo)
4922{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004923 if(pCreateInfo != nullptr)
4924 {
4925 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004926 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004927 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004928 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4929 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004930 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004931 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004932 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004933 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004934 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004935 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004936 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004937 }
4938
4939 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004940}
4941
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004942bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004943 VkDevice device,
4944 VkPipelineLayout* pPipelineLayout,
4945 VkResult result)
4946{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004947
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004948 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004949 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004950 }
4951
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004952 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004953 {
4954 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4956 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004957 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004958
4959 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004960}
4961
4962VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4963 VkDevice device,
4964 const VkPipelineLayoutCreateInfo* pCreateInfo,
4965 VkPipelineLayout* pPipelineLayout)
4966{
4967 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004968
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004969 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4970
4971 PostCreatePipelineLayout(device, pPipelineLayout, result);
4972
4973 return result;
4974}
4975
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004976bool PostDestroyPipelineLayout(
4977 VkDevice device,
4978 VkPipelineLayout pipelineLayout,
4979 VkResult result)
4980{
4981
4982
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004983 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004984 {
4985 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
4986 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4987 return false;
4988 }
4989
4990 return true;
4991}
4992
4993VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
4994 VkDevice device,
4995 VkPipelineLayout pipelineLayout)
4996{
4997 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
4998
4999 PostDestroyPipelineLayout(device, pipelineLayout, result);
5000
5001 return result;
5002}
5003
5004bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005005 VkDevice device,
5006 const VkSamplerCreateInfo* pCreateInfo)
5007{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005008 if(pCreateInfo != nullptr)
5009 {
5010 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005011 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005012 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005013 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005014 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005015 }
5016 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5017 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5018 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005019 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005020 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005021 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005022 }
5023 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5024 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5025 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005026 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005027 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005028 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005029 }
5030 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5031 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5032 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005033 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005034 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005035 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005036 }
5037 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5038 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5039 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005040 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005041 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005042 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005043 }
5044 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5045 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5046 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005047 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005048 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005049 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005050 }
5051 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5052 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5053 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005054 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005055 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005056 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005057 }
5058 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5059 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5060 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005061 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005062 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005063 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005064 }
5065 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5066 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5067 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005068 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005069 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005070 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005071 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005072 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005073
5074 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005075}
5076
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005077bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005078 VkDevice device,
5079 VkSampler* pSampler,
5080 VkResult result)
5081{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005082
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005083 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005084 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005085 }
5086
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005087 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005088 {
5089 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005090 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5091 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005092 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005093
5094 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005095}
5096
5097VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5098 VkDevice device,
5099 const VkSamplerCreateInfo* pCreateInfo,
5100 VkSampler* pSampler)
5101{
5102 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005103
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005104 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5105
5106 PostCreateSampler(device, pSampler, result);
5107
5108 return result;
5109}
5110
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005111bool PostDestroySampler(
5112 VkDevice device,
5113 VkSampler sampler,
5114 VkResult result)
5115{
5116
5117
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005118 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005119 {
5120 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5121 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5122 return false;
5123 }
5124
5125 return true;
5126}
5127
5128VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5129 VkDevice device,
5130 VkSampler sampler)
5131{
5132 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5133
5134 PostDestroySampler(device, sampler, result);
5135
5136 return result;
5137}
5138
5139bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005140 VkDevice device,
5141 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5142{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005143 if(pCreateInfo != nullptr)
5144 {
5145 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005146 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005148 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005149 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005150 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005151 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005152 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005153 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5154 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5155 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005156 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005157 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005158 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005159 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005160 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005161 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005162 }
5163 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005164 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005165
5166 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005167}
5168
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005169bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005170 VkDevice device,
5171 VkDescriptorSetLayout* pSetLayout,
5172 VkResult result)
5173{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005174
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005175 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005176 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005177 }
5178
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005179 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005180 {
5181 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005182 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5183 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005184 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005185
5186 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005187}
5188
5189VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5190 VkDevice device,
5191 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5192 VkDescriptorSetLayout* pSetLayout)
5193{
5194 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005195
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005196 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5197
5198 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5199
5200 return result;
5201}
5202
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005203bool PostDestroyDescriptorSetLayout(
5204 VkDevice device,
5205 VkDescriptorSetLayout descriptorSetLayout,
5206 VkResult result)
5207{
5208
5209
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005210 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005211 {
5212 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5213 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5214 return false;
5215 }
5216
5217 return true;
5218}
5219
5220VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5221 VkDevice device,
5222 VkDescriptorSetLayout descriptorSetLayout)
5223{
5224 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5225
5226 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5227
5228 return result;
5229}
5230
5231bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005232 VkDevice device,
5233 const VkDescriptorPoolCreateInfo* pCreateInfo)
5234{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005235 if(pCreateInfo != nullptr)
5236 {
5237 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005238 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005239 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005240 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005241 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005242 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005243 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005244 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005245 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5246 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5247 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005248 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005249 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005250 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005251 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005252 }
5253 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005254
5255 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005256}
5257
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005258bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005259 VkDevice device,
5260 VkDescriptorPoolUsage poolUsage,
5261 uint32_t maxSets,
5262 VkDescriptorPool* pDescriptorPool,
5263 VkResult result)
5264{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005265
5266 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5267 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5268 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005269 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005270 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005271 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005272 }
5273
5274
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005275 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005276 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005277 }
5278
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005279 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005280 {
5281 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5283 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005284 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005285
5286 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005287}
5288
5289VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5290 VkDevice device,
5291 VkDescriptorPoolUsage poolUsage,
5292 uint32_t maxSets,
5293 const VkDescriptorPoolCreateInfo* pCreateInfo,
5294 VkDescriptorPool* pDescriptorPool)
5295{
5296 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005297
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005298 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5299
5300 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5301
5302 return result;
5303}
5304
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005305bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005306 VkDevice device,
5307 VkDescriptorPool descriptorPool,
5308 VkResult result)
5309{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005310
5311
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005312 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005313 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005314 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5315 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5316 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005317 }
5318
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005319 return true;
5320}
5321
5322VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5323 VkDevice device,
5324 VkDescriptorPool descriptorPool)
5325{
5326 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5327
5328 PostDestroyDescriptorPool(device, descriptorPool, result);
5329
5330 return result;
5331}
5332
5333bool PostResetDescriptorPool(
5334 VkDevice device,
5335 VkDescriptorPool descriptorPool,
5336 VkResult result)
5337{
5338
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005339
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005340 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005341 {
5342 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005343 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5344 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005345 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005346
5347 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005348}
5349
5350VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5351 VkDevice device,
5352 VkDescriptorPool descriptorPool)
5353{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005354 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5355
5356 PostResetDescriptorPool(device, descriptorPool, result);
5357
5358 return result;
5359}
5360
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005361bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005362 VkDevice device,
5363 const VkDescriptorSetLayout* pSetLayouts)
5364{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005365 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005366 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005367 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005368
5369 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005370}
5371
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005372bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005373 VkDevice device,
5374 VkDescriptorPool descriptorPool,
5375 VkDescriptorSetUsage setUsage,
5376 uint32_t count,
5377 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005378 VkResult result)
5379{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005380
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005381
5382 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5383 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5384 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005385 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005386 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005387 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005388 }
5389
5390
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005391 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005392 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005393 }
5394
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005395 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005396 {
5397 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005398 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5399 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005400 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005401
5402 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005403}
5404
5405VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5406 VkDevice device,
5407 VkDescriptorPool descriptorPool,
5408 VkDescriptorSetUsage setUsage,
5409 uint32_t count,
5410 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06005411 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005412{
5413 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005414
Cody Northropc8aa4a52015-08-03 12:47:29 -06005415 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005416
Cody Northropc8aa4a52015-08-03 12:47:29 -06005417 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005418
5419 return result;
5420}
5421
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005422bool PreFreeDescriptorSets(
5423 VkDevice device,
5424 const VkDescriptorSet* pDescriptorSets)
5425{
5426 if(pDescriptorSets != nullptr)
5427 {
5428 }
5429
5430 return true;
5431}
5432
5433bool PostFreeDescriptorSets(
5434 VkDevice device,
5435 VkDescriptorPool descriptorPool,
5436 uint32_t count,
5437 VkResult result)
5438{
5439
5440
5441
5442 if(result < VK_SUCCESS)
5443 {
5444 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5446 return false;
5447 }
5448
5449 return true;
5450}
5451
5452VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
5453 VkDevice device,
5454 VkDescriptorPool descriptorPool,
5455 uint32_t count,
5456 const VkDescriptorSet* pDescriptorSets)
5457{
5458 PreFreeDescriptorSets(device, pDescriptorSets);
5459
5460 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
5461
5462 PostFreeDescriptorSets(device, descriptorPool, count, result);
5463
5464 return result;
5465}
5466
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005467bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005468 VkDevice device,
5469 const VkWriteDescriptorSet* pDescriptorWrites,
5470 const VkCopyDescriptorSet* pDescriptorCopies)
5471{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005472 if(pDescriptorWrites != nullptr)
5473 {
5474 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005475 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005476 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005477 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005478 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005479 }
5480 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5481 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5482 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005483 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005484 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005485 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005486 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005487 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005488 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005489 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5490 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5491 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005492 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005493 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005494 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005495 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005496 }
5497 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005498
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005499 if(pDescriptorCopies != nullptr)
5500 {
5501 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005502 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005503 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005504 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005505 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005506 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005507 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005508
5509 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005510}
5511
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005512bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005513 VkDevice device,
5514 uint32_t writeCount,
5515 uint32_t copyCount,
5516 VkResult result)
5517{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005518
5519
5520
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005521 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005522 {
5523 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005524 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5525 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005526 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005527
5528 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529}
5530
5531VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
5532 VkDevice device,
5533 uint32_t writeCount,
5534 const VkWriteDescriptorSet* pDescriptorWrites,
5535 uint32_t copyCount,
5536 const VkCopyDescriptorSet* pDescriptorCopies)
5537{
5538 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005539
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005540 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
5541
5542 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
5543
5544 return result;
5545}
5546
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005547bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005548 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005549 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005550{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005551 if(pCreateInfo != nullptr)
5552 {
5553 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005554 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005555 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005556 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005557 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005558 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005559 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005560 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005561 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005562 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005563 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005564 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005565 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005566
5567 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005568}
5569
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005570bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005571 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005572 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005573 VkResult result)
5574{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005575
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005576 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005577 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005578 }
5579
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005580 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005581 {
5582 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005583 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5584 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005585 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005586
5587 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005588}
5589
5590VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5591 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005592 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5593 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005594{
5595 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005596
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005597 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5598
5599 PostCreateDynamicViewportState(device, pState, result);
5600
5601 return result;
5602}
5603
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005604bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005605 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005606 VkDynamicViewportState dynamicViewportState,
5607 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005608{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005609
5610
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005611 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005612 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005613 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
5614 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5615 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005616 }
5617
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005618 return true;
5619}
5620
5621VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
5622 VkDevice device,
5623 VkDynamicViewportState dynamicViewportState)
5624{
5625 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
5626
5627 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
5628
5629 return result;
5630}
5631
Cody Northrope4bc6942015-08-26 10:01:32 -06005632bool PreCreateDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005633 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005634 const VkDynamicLineWidthStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005635{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005636 if(pCreateInfo != nullptr)
5637 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005638 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005639 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005640 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005641 "vkCreateDynamicLineWidthState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005642 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005643 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005644 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005645
5646 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005647}
5648
Cody Northrope4bc6942015-08-26 10:01:32 -06005649bool PostCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005650 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005651 VkDynamicLineWidthState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005652 VkResult result)
5653{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005654
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005655 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005656 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005657 }
5658
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005659 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005660 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005661 std::string reason = "vkCreateDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005662 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5663 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005664 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005665
5666 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005667}
5668
Cody Northrope4bc6942015-08-26 10:01:32 -06005669VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005670 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005671 const VkDynamicLineWidthStateCreateInfo* pCreateInfo,
5672 VkDynamicLineWidthState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005673{
Cody Northrope4bc6942015-08-26 10:01:32 -06005674 PreCreateDynamicLineWidthState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005675
Cody Northrope4bc6942015-08-26 10:01:32 -06005676 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005677
Cody Northrope4bc6942015-08-26 10:01:32 -06005678 PostCreateDynamicLineWidthState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005679
5680 return result;
5681}
5682
Cody Northrope4bc6942015-08-26 10:01:32 -06005683bool PostDestroyDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005684 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005685 VkDynamicLineWidthState dynamicLineWidthState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005686 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005687{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005688
5689
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005690 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005691 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005692 std::string reason = "vkDestroyDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005693 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5694 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005695 }
5696
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005697 return true;
5698}
5699
Cody Northrope4bc6942015-08-26 10:01:32 -06005700VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005701 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005702 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005703{
Cody Northrope4bc6942015-08-26 10:01:32 -06005704 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicLineWidthState(device, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005705
Cody Northrope4bc6942015-08-26 10:01:32 -06005706 PostDestroyDynamicLineWidthState(device, dynamicLineWidthState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005707
5708 return result;
5709}
5710
Cody Northrope4bc6942015-08-26 10:01:32 -06005711bool PreCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005712 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005713 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo)
Cody Northropf5bd2252015-08-17 11:10:49 -06005714{
5715 if(pCreateInfo != nullptr)
5716 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005717 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO)
Cody Northropf5bd2252015-08-17 11:10:49 -06005718 {
5719 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005720 "vkCreateDynamicDepthBiasState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Cody Northropf5bd2252015-08-17 11:10:49 -06005721 return false;
5722 }
5723 }
5724
5725 return true;
5726}
5727
Cody Northrope4bc6942015-08-26 10:01:32 -06005728bool PostCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005729 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005730 VkDynamicDepthBiasState* pState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005731 VkResult result)
5732{
5733
5734 if(pState != nullptr)
5735 {
5736 }
5737
5738 if(result < VK_SUCCESS)
5739 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005740 std::string reason = "vkCreateDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005741 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5742 return false;
5743 }
5744
5745 return true;
5746}
5747
Cody Northrope4bc6942015-08-26 10:01:32 -06005748VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005749 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005750 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo,
5751 VkDynamicDepthBiasState* pState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005752{
Cody Northrope4bc6942015-08-26 10:01:32 -06005753 PreCreateDynamicDepthBiasState(device, pCreateInfo);
Cody Northropf5bd2252015-08-17 11:10:49 -06005754
Cody Northrope4bc6942015-08-26 10:01:32 -06005755 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005756
Cody Northrope4bc6942015-08-26 10:01:32 -06005757 PostCreateDynamicDepthBiasState(device, pState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005758
5759 return result;
5760}
5761
Cody Northrope4bc6942015-08-26 10:01:32 -06005762bool PostDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005763 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005764 VkDynamicDepthBiasState dynamicDepthBiasState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005765 VkResult result)
5766{
5767
5768
5769 if(result < VK_SUCCESS)
5770 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005771 std::string reason = "vkDestroyDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005772 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5773 return false;
5774 }
5775
5776 return true;
5777}
5778
Cody Northrope4bc6942015-08-26 10:01:32 -06005779VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005780 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005781 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005782{
Cody Northrope4bc6942015-08-26 10:01:32 -06005783 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBiasState(device, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005784
Cody Northrope4bc6942015-08-26 10:01:32 -06005785 PostDestroyDynamicDepthBiasState(device, dynamicDepthBiasState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005786
5787 return result;
5788}
5789
Cody Northrope4bc6942015-08-26 10:01:32 -06005790bool PreCreateDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005791 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005792 const VkDynamicBlendStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005793{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005794 if(pCreateInfo != nullptr)
5795 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005796 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005797 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005798 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005799 "vkCreateDynamicBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005800 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005801 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005803
5804 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005805}
5806
Cody Northrope4bc6942015-08-26 10:01:32 -06005807bool PostCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005808 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005809 VkDynamicBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005810 VkResult result)
5811{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005812
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005813 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005814 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005815 }
5816
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005817 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005818 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005819 std::string reason = "vkCreateDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005820 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5821 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005822 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005823
5824 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005825}
5826
Cody Northrope4bc6942015-08-26 10:01:32 -06005827VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005828 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005829 const VkDynamicBlendStateCreateInfo* pCreateInfo,
5830 VkDynamicBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005831{
Cody Northrope4bc6942015-08-26 10:01:32 -06005832 PreCreateDynamicBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005833
Cody Northrope4bc6942015-08-26 10:01:32 -06005834 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005835
Cody Northrope4bc6942015-08-26 10:01:32 -06005836 PostCreateDynamicBlendState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005837
5838 return result;
5839}
5840
Cody Northrope4bc6942015-08-26 10:01:32 -06005841bool PostDestroyDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005842 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005843 VkDynamicBlendState dynamicBlendState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005844 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005845{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005846
5847
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005848 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005849 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005850 std::string reason = "vkDestroyDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005851 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5852 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005853 }
5854
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005855 return true;
5856}
5857
Cody Northrope4bc6942015-08-26 10:01:32 -06005858VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005859 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005860 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005861{
Cody Northrope4bc6942015-08-26 10:01:32 -06005862 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicBlendState(device, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005863
Cody Northrope4bc6942015-08-26 10:01:32 -06005864 PostDestroyDynamicBlendState(device, dynamicBlendState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005865
5866 return result;
5867}
5868
Cody Northrope4bc6942015-08-26 10:01:32 -06005869bool PreCreateDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005870 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005871 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005872{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005873 if(pCreateInfo != nullptr)
5874 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005875 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005876 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005877 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005878 "vkCreateDynamicDepthBoundsState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005879 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005880 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005881 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005882
5883 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005884}
5885
Cody Northrope4bc6942015-08-26 10:01:32 -06005886bool PostCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005887 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005888 VkDynamicDepthBoundsState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005889 VkResult result)
5890{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005891
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005892 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005893 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005894 }
5895
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005896 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005897 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005898 std::string reason = "vkCreateDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005899 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5900 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005901 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005902
5903 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005904}
5905
Cody Northrope4bc6942015-08-26 10:01:32 -06005906VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005907 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005908 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo,
5909 VkDynamicDepthBoundsState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005910{
Cody Northrope4bc6942015-08-26 10:01:32 -06005911 PreCreateDynamicDepthBoundsState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005912
Cody Northrope4bc6942015-08-26 10:01:32 -06005913 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005914
Cody Northrope4bc6942015-08-26 10:01:32 -06005915 PostCreateDynamicDepthBoundsState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005916
5917 return result;
5918}
5919
Cody Northrope4bc6942015-08-26 10:01:32 -06005920bool PostDestroyDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005921 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005922 VkDynamicDepthBoundsState dynamicDepthBoundsState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005923 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005924{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005925 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005926 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005927 std::string reason = "vkDestroyDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005928 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5929 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005930 }
5931
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005932 return true;
5933}
5934
Cody Northrope4bc6942015-08-26 10:01:32 -06005935VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005936 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005937 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005938{
Cody Northrope4bc6942015-08-26 10:01:32 -06005939 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005940
Cody Northrope4bc6942015-08-26 10:01:32 -06005941 PostDestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState, result);
Cody Northrop2605cb02015-08-18 15:21:16 -06005942
5943 return result;
5944}
5945
5946bool PreCreateDynamicStencilState(
5947 VkDevice device,
5948 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
5949 const VkDynamicStencilStateCreateInfo* pCreateInfoBack)
5950{
5951 if(pCreateInfoFront != nullptr)
5952 {
5953 if(pCreateInfoFront->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
5954 {
5955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5956 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoFront->sType, is an invalid enumerator");
5957 return false;
5958 }
5959 }
5960
5961 if(pCreateInfoBack != nullptr)
5962 {
5963 if(pCreateInfoBack->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
5964 {
5965 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5966 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoBack->sType, is an invalid enumerator");
5967 return false;
5968 }
5969 }
5970
5971 return true;
5972}
5973
5974bool PostCreateDynamicStencilState(
5975 VkDevice device,
5976 VkDynamicStencilState* pState,
5977 VkResult result)
5978{
5979
5980 if(pState != nullptr)
5981 {
5982 }
5983
5984 if(result < VK_SUCCESS)
5985 {
5986 std::string reason = "vkCreateDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
5987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5988 return false;
5989 }
5990
5991 return true;
5992}
5993
5994VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
5995 VkDevice device,
5996 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
5997 const VkDynamicStencilStateCreateInfo* pCreateInfoBack,
5998 VkDynamicStencilState* pState)
5999{
6000 PreCreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack);
6001
6002 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
6003
6004 PostCreateDynamicStencilState(device, pState, result);
6005
6006 return result;
6007}
6008
6009bool PostDestroyDynamicStencilState(
6010 VkDevice device,
6011 VkDynamicStencilState dynamicStencilState,
6012 VkResult result)
6013{
6014 if(result < VK_SUCCESS)
6015 {
6016 std::string reason = "vkDestroyDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6017 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6018 return false;
6019 }
6020
6021 return true;
6022}
6023
6024VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicStencilState(
6025 VkDevice device,
6026 VkDynamicStencilState dynamicStencilState)
6027{
6028 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicStencilState(device, dynamicStencilState);
6029
6030 PostDestroyDynamicStencilState(device, dynamicStencilState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006031
6032 return result;
6033}
6034
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006035bool PreCreateFramebuffer(
6036 VkDevice device,
6037 const VkFramebufferCreateInfo* pCreateInfo)
6038{
6039 if(pCreateInfo != nullptr)
6040 {
6041 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
6042 {
6043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6044 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6045 return false;
6046 }
6047 if(pCreateInfo->pAttachments != nullptr)
6048 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006049 }
6050 }
6051
6052 return true;
6053}
6054
6055bool PostCreateFramebuffer(
6056 VkDevice device,
6057 VkFramebuffer* pFramebuffer,
6058 VkResult result)
6059{
6060
6061 if(pFramebuffer != nullptr)
6062 {
6063 }
6064
6065 if(result < VK_SUCCESS)
6066 {
6067 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6068 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6069 return false;
6070 }
6071
6072 return true;
6073}
6074
6075VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
6076 VkDevice device,
6077 const VkFramebufferCreateInfo* pCreateInfo,
6078 VkFramebuffer* pFramebuffer)
6079{
6080 PreCreateFramebuffer(device, pCreateInfo);
6081
6082 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
6083
6084 PostCreateFramebuffer(device, pFramebuffer, result);
6085
6086 return result;
6087}
6088
6089bool PostDestroyFramebuffer(
6090 VkDevice device,
6091 VkFramebuffer framebuffer,
6092 VkResult result)
6093{
6094
6095
6096 if(result < VK_SUCCESS)
6097 {
6098 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6099 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6100 return false;
6101 }
6102
6103 return true;
6104}
6105
6106VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
6107 VkDevice device,
6108 VkFramebuffer framebuffer)
6109{
6110 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
6111
6112 PostDestroyFramebuffer(device, framebuffer, result);
6113
6114 return result;
6115}
6116
6117bool PreCreateRenderPass(
6118 VkDevice device,
6119 const VkRenderPassCreateInfo* pCreateInfo)
6120{
6121 if(pCreateInfo != nullptr)
6122 {
6123 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
6124 {
6125 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6126 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6127 return false;
6128 }
6129 if(pCreateInfo->pAttachments != nullptr)
6130 {
6131 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
6132 {
6133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6134 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
6135 return false;
6136 }
6137 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
6138 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
6139 {
6140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6141 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
6142 return false;
6143 }
6144 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6145 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6146 {
6147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6148 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
6149 return false;
6150 }
6151 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6152 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6153 {
6154 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6155 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
6156 return false;
6157 }
6158 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6159 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6160 {
6161 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6162 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
6163 return false;
6164 }
6165 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6166 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6167 {
6168 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6169 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
6170 return false;
6171 }
6172 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6173 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
6174 {
6175 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6176 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
6177 return false;
6178 }
6179 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6180 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
6181 {
6182 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6183 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
6184 return false;
6185 }
6186 }
6187 if(pCreateInfo->pSubpasses != nullptr)
6188 {
6189 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
6190 {
6191 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6192 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
6193 return false;
6194 }
6195 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6196 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6197 {
6198 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6199 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
6200 return false;
6201 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006202 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006203 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006204 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6205 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006206 {
6207 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006208 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006209 return false;
6210 }
6211 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006212 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006213 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006214 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6215 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006216 {
6217 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006218 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006219 return false;
6220 }
6221 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006222 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006223 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006224 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6225 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006226 {
6227 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006228 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006229 return false;
6230 }
6231 }
6232 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6233 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
6234 {
6235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6236 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
6237 return false;
6238 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006239 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006240 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006241 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6242 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006243 {
6244 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006245 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006246 return false;
6247 }
6248 }
6249 }
6250 if(pCreateInfo->pDependencies != nullptr)
6251 {
6252 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
6253 {
6254 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6255 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
6256 return false;
6257 }
6258 }
6259 }
6260
6261 return true;
6262}
6263
6264bool PostCreateRenderPass(
6265 VkDevice device,
6266 VkRenderPass* pRenderPass,
6267 VkResult result)
6268{
6269
6270 if(pRenderPass != nullptr)
6271 {
6272 }
6273
6274 if(result < VK_SUCCESS)
6275 {
6276 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6277 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6278 return false;
6279 }
6280
6281 return true;
6282}
6283
6284VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
6285 VkDevice device,
6286 const VkRenderPassCreateInfo* pCreateInfo,
6287 VkRenderPass* pRenderPass)
6288{
6289 PreCreateRenderPass(device, pCreateInfo);
6290
6291 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
6292
6293 PostCreateRenderPass(device, pRenderPass, result);
6294
6295 return result;
6296}
6297
6298bool PostDestroyRenderPass(
6299 VkDevice device,
6300 VkRenderPass renderPass,
6301 VkResult result)
6302{
6303
6304
6305 if(result < VK_SUCCESS)
6306 {
6307 std::string reason = "vkDestroyRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6308 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6309 return false;
6310 }
6311
6312 return true;
6313}
6314
6315VK_LAYER_EXPORT VkResult VKAPI vkDestroyRenderPass(
6316 VkDevice device,
6317 VkRenderPass renderPass)
6318{
6319 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass);
6320
6321 PostDestroyRenderPass(device, renderPass, result);
6322
6323 return result;
6324}
6325
6326bool PostGetRenderAreaGranularity(
6327 VkDevice device,
6328 VkRenderPass renderPass,
6329 VkExtent2D* pGranularity,
6330 VkResult result)
6331{
6332
6333
6334 if(pGranularity != nullptr)
6335 {
6336 }
6337
6338 if(result < VK_SUCCESS)
6339 {
6340 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
6341 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6342 return false;
6343 }
6344
6345 return true;
6346}
6347
6348VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
6349 VkDevice device,
6350 VkRenderPass renderPass,
6351 VkExtent2D* pGranularity)
6352{
6353 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
6354
6355 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
6356
6357 return result;
6358}
6359
6360bool PreCreateCommandPool(
6361 VkDevice device,
6362 const VkCmdPoolCreateInfo* pCreateInfo)
6363{
6364 if(pCreateInfo != nullptr)
6365 {
6366 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
6367 {
6368 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6369 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6370 return false;
6371 }
6372 }
6373
6374 return true;
6375}
6376
6377bool PostCreateCommandPool(
6378 VkDevice device,
6379 VkCmdPool* pCmdPool,
6380 VkResult result)
6381{
6382
6383 if(pCmdPool != nullptr)
6384 {
6385 }
6386
6387 if(result < VK_SUCCESS)
6388 {
6389 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6390 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6391 return false;
6392 }
6393
6394 return true;
6395}
6396
6397VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
6398 VkDevice device,
6399 const VkCmdPoolCreateInfo* pCreateInfo,
6400 VkCmdPool* pCmdPool)
6401{
6402 PreCreateCommandPool(device, pCreateInfo);
6403
6404 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
6405
6406 PostCreateCommandPool(device, pCmdPool, result);
6407
6408 return result;
6409}
6410
6411bool PostDestroyCommandPool(
6412 VkDevice device,
6413 VkCmdPool cmdPool,
6414 VkResult result)
6415{
6416
6417
6418 if(result < VK_SUCCESS)
6419 {
6420 std::string reason = "vkDestroyCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6422 return false;
6423 }
6424
6425 return true;
6426}
6427
6428VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandPool(
6429 VkDevice device,
6430 VkCmdPool cmdPool)
6431{
6432 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, cmdPool);
6433
6434 PostDestroyCommandPool(device, cmdPool, result);
6435
6436 return result;
6437}
6438
6439bool PostResetCommandPool(
6440 VkDevice device,
6441 VkCmdPool cmdPool,
6442 VkCmdPoolResetFlags flags,
6443 VkResult result)
6444{
6445
6446
6447
6448 if(result < VK_SUCCESS)
6449 {
6450 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6451 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6452 return false;
6453 }
6454
6455 return true;
6456}
6457
6458VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
6459 VkDevice device,
6460 VkCmdPool cmdPool,
6461 VkCmdPoolResetFlags flags)
6462{
6463 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
6464
6465 PostResetCommandPool(device, cmdPool, flags, result);
6466
6467 return result;
6468}
6469
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006470bool PreCreateCommandBuffer(
6471 VkDevice device,
6472 const VkCmdBufferCreateInfo* pCreateInfo)
6473{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006474 if(pCreateInfo != nullptr)
6475 {
6476 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006477 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006478 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006479 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006480 return false;
6481 }
6482 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6483 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6484 {
6485 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006486 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006487 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006488 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006489 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006490
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006491 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006492}
6493
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006494bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006495 VkDevice device,
6496 VkCmdBuffer* pCmdBuffer,
6497 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006498{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006499
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006500 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006501 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006502 }
6503
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006504 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006505 {
6506 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006507 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6508 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006509 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006510
6511 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006512}
6513
6514VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6515 VkDevice device,
6516 const VkCmdBufferCreateInfo* pCreateInfo,
6517 VkCmdBuffer* pCmdBuffer)
6518{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006519 PreCreateCommandBuffer(device, pCreateInfo);
6520
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006521 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6522
6523 PostCreateCommandBuffer(device, pCmdBuffer, result);
6524
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006525 return result;
6526}
6527
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006528bool PostDestroyCommandBuffer(
6529 VkDevice device,
6530 VkCmdBuffer commandBuffer,
6531 VkResult result)
6532{
6533
6534
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006535 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006536 {
6537 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6538 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6539 return false;
6540 }
6541
6542 return true;
6543}
6544
6545VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6546 VkDevice device,
6547 VkCmdBuffer commandBuffer)
6548{
6549 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6550
6551 PostDestroyCommandBuffer(device, commandBuffer, result);
6552
6553 return result;
6554}
6555
6556bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006557 VkCmdBuffer cmdBuffer,
6558 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006559{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006560 if(pBeginInfo != nullptr)
6561 {
6562 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006563 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006564 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006565 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006566 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006567 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006568 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006569
6570 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006571}
6572
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006573bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006574 VkCmdBuffer cmdBuffer,
6575 VkResult result)
6576{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006577
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006578 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006579 {
6580 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006581 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6582 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006583 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006584
6585 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006586}
6587
6588VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6589 VkCmdBuffer cmdBuffer,
6590 const VkCmdBufferBeginInfo* pBeginInfo)
6591{
6592 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006593
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006594 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6595
6596 PostBeginCommandBuffer(cmdBuffer, result);
6597
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006598 return result;
6599}
6600
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006601bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006602 VkCmdBuffer cmdBuffer,
6603 VkResult result)
6604{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006605
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006606 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006607 {
6608 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006609 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6610 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006611 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006612
6613 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006614}
6615
6616VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6617 VkCmdBuffer cmdBuffer)
6618{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006619 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6620
6621 PostEndCommandBuffer(cmdBuffer, result);
6622
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006623 return result;
6624}
6625
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006626bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006627 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006628 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006629 VkResult result)
6630{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006631
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006632
6633 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006634 {
6635 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006636 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6637 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006638 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006639
6640 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006641}
6642
6643VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006644 VkCmdBuffer cmdBuffer,
6645 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006646{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006647 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006648
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006649 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006650
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006651 return result;
6652}
6653
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006654bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006655 VkCmdBuffer cmdBuffer,
6656 VkPipelineBindPoint pipelineBindPoint,
6657 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006658{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006659
6660 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6661 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6662 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006663 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006664 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006665 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006666 }
6667
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006668
6669 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006670}
6671
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006672VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6673 VkCmdBuffer cmdBuffer,
6674 VkPipelineBindPoint pipelineBindPoint,
6675 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006676{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006677 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6678
6679 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6680}
6681
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006682bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006683 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006684 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006685{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006686
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006687
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006688 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006689}
6690
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006691VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006692 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006693 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006694{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006695 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006696
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006697 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006698}
6699
Cody Northrope4bc6942015-08-26 10:01:32 -06006700bool PostCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006701 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006702 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006703{
6704
6705
6706 return true;
6707}
6708
Cody Northrope4bc6942015-08-26 10:01:32 -06006709VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006710 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006711 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006712{
Cody Northrope4bc6942015-08-26 10:01:32 -06006713 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006714
Cody Northrope4bc6942015-08-26 10:01:32 -06006715 PostCmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006716}
6717
Cody Northrope4bc6942015-08-26 10:01:32 -06006718bool PostCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006719 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006720 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006721{
6722
6723
6724 return true;
6725}
6726
Cody Northrope4bc6942015-08-26 10:01:32 -06006727VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006728 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006729 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006730{
Cody Northrope4bc6942015-08-26 10:01:32 -06006731 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006732
Cody Northrope4bc6942015-08-26 10:01:32 -06006733 PostCmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006734}
6735
Cody Northrope4bc6942015-08-26 10:01:32 -06006736bool PostCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006737 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006738 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006739{
6740
6741
6742 return true;
6743}
6744
Cody Northrope4bc6942015-08-26 10:01:32 -06006745VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006746 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006747 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006748{
Cody Northrope4bc6942015-08-26 10:01:32 -06006749 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006750
Cody Northrope4bc6942015-08-26 10:01:32 -06006751 PostCmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006752}
6753
Cody Northrope4bc6942015-08-26 10:01:32 -06006754bool PostCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006755 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006756 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006757{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006758 return true;
6759}
6760
Cody Northrope4bc6942015-08-26 10:01:32 -06006761VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006762 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006763 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006764{
Cody Northrope4bc6942015-08-26 10:01:32 -06006765 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006766
Cody Northrope4bc6942015-08-26 10:01:32 -06006767 PostCmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Cody Northrop2605cb02015-08-18 15:21:16 -06006768}
6769
6770bool PostCmdBindDynamicStencilState(
6771 VkCmdBuffer cmdBuffer,
6772 VkDynamicStencilState dynamicStencilState)
6773{
6774 return true;
6775}
6776
6777VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(
6778 VkCmdBuffer cmdBuffer,
6779 VkDynamicStencilState dynamicStencilState)
6780{
6781 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
6782
6783 PostCmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006784}
6785
6786bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006787 VkCmdBuffer cmdBuffer,
6788 const VkDescriptorSet* pDescriptorSets,
6789 const uint32_t* pDynamicOffsets)
6790{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006791 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006792 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006793 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006794
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006795 if(pDynamicOffsets != nullptr)
6796 {
6797 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006798
6799 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006800}
6801
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006802bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006803 VkCmdBuffer cmdBuffer,
6804 VkPipelineBindPoint pipelineBindPoint,
6805 VkPipelineLayout layout,
6806 uint32_t firstSet,
6807 uint32_t setCount,
6808 uint32_t dynamicOffsetCount)
6809{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006810
6811 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6812 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6813 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006814 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006815 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006816 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006817 }
6818
6819
6820
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006821
6822
6823 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006824}
6825
6826VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6827 VkCmdBuffer cmdBuffer,
6828 VkPipelineBindPoint pipelineBindPoint,
6829 VkPipelineLayout layout,
6830 uint32_t firstSet,
6831 uint32_t setCount,
6832 const VkDescriptorSet* pDescriptorSets,
6833 uint32_t dynamicOffsetCount,
6834 const uint32_t* pDynamicOffsets)
6835{
6836 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006837
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006838 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6839
6840 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6841}
6842
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006843bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006844 VkCmdBuffer cmdBuffer,
6845 VkBuffer buffer,
6846 VkDeviceSize offset,
6847 VkIndexType indexType)
6848{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006849
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006850
6851
6852 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6853 indexType > VK_INDEX_TYPE_END_RANGE)
6854 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006855 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006856 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006857 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006858 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006859
6860 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006861}
6862
6863VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6864 VkCmdBuffer cmdBuffer,
6865 VkBuffer buffer,
6866 VkDeviceSize offset,
6867 VkIndexType indexType)
6868{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006869 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6870
6871 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6872}
6873
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006874bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006875 VkCmdBuffer cmdBuffer,
6876 const VkBuffer* pBuffers,
6877 const VkDeviceSize* pOffsets)
6878{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006879 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006880 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006881 }
6882
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006883 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006884 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006885 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006886
6887 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006888}
6889
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006890bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006891 VkCmdBuffer cmdBuffer,
6892 uint32_t startBinding,
6893 uint32_t bindingCount)
6894{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006895
6896
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006897
6898 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006899}
6900
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06006901VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006902 VkCmdBuffer cmdBuffer,
6903 uint32_t startBinding,
6904 uint32_t bindingCount,
6905 const VkBuffer* pBuffers,
6906 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006907{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006908 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006909
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006910 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
6911
6912 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006913}
6914
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006915bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006916 VkCmdBuffer cmdBuffer,
6917 uint32_t firstVertex,
6918 uint32_t vertexCount,
6919 uint32_t firstInstance,
6920 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006921{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006922
6923
6924
6925
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006926
6927 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006928}
6929
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006930VK_LAYER_EXPORT void VKAPI vkCmdDraw(
6931 VkCmdBuffer cmdBuffer,
6932 uint32_t firstVertex,
6933 uint32_t vertexCount,
6934 uint32_t firstInstance,
6935 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006936{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006937 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
6938
6939 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006940}
6941
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006942bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006943 VkCmdBuffer cmdBuffer,
6944 uint32_t firstIndex,
6945 uint32_t indexCount,
6946 int32_t vertexOffset,
6947 uint32_t firstInstance,
6948 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006949{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006950
6951
6952
6953
6954
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006955
6956 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006957}
6958
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006959VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
6960 VkCmdBuffer cmdBuffer,
6961 uint32_t firstIndex,
6962 uint32_t indexCount,
6963 int32_t vertexOffset,
6964 uint32_t firstInstance,
6965 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006966{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006967 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6968
6969 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6970}
6971
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006972bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006973 VkCmdBuffer cmdBuffer,
6974 VkBuffer buffer,
6975 VkDeviceSize offset,
6976 uint32_t count,
6977 uint32_t stride)
6978{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006979
6980
6981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006982
6983
6984 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006985}
6986
6987VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
6988 VkCmdBuffer cmdBuffer,
6989 VkBuffer buffer,
6990 VkDeviceSize offset,
6991 uint32_t count,
6992 uint32_t stride)
6993{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006994 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6995
6996 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6997}
6998
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006999bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007000 VkCmdBuffer cmdBuffer,
7001 VkBuffer buffer,
7002 VkDeviceSize offset,
7003 uint32_t count,
7004 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007005{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007006
7007
7008
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007009
7010
7011 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007012}
7013
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007014VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7015 VkCmdBuffer cmdBuffer,
7016 VkBuffer buffer,
7017 VkDeviceSize offset,
7018 uint32_t count,
7019 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007020{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007021 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7022
7023 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7024}
7025
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007026bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007027 VkCmdBuffer cmdBuffer,
7028 uint32_t x,
7029 uint32_t y,
7030 uint32_t z)
7031{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007032
7033
7034
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007035
7036 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007037}
7038
7039VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7040 VkCmdBuffer cmdBuffer,
7041 uint32_t x,
7042 uint32_t y,
7043 uint32_t z)
7044{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007045 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7046
7047 PostCmdDispatch(cmdBuffer, x, y, z);
7048}
7049
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007050bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007051 VkCmdBuffer cmdBuffer,
7052 VkBuffer buffer,
7053 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007054{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007055
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007056
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007057
7058 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007059}
7060
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007061VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7062 VkCmdBuffer cmdBuffer,
7063 VkBuffer buffer,
7064 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007065{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007066 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7067
7068 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007069}
7070
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007071bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007072 VkCmdBuffer cmdBuffer,
7073 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007074{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007075 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007076 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007077 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007078
7079 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007080}
7081
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007082bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007083 VkCmdBuffer cmdBuffer,
7084 VkBuffer srcBuffer,
7085 VkBuffer destBuffer,
7086 uint32_t regionCount)
7087{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007088
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007089
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007090
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007091
7092 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007093}
7094
7095VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7096 VkCmdBuffer cmdBuffer,
7097 VkBuffer srcBuffer,
7098 VkBuffer destBuffer,
7099 uint32_t regionCount,
7100 const VkBufferCopy* pRegions)
7101{
7102 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007103
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007104 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7105
7106 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7107}
7108
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007109bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007110 VkCmdBuffer cmdBuffer,
7111 const VkImageCopy* pRegions)
7112{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007113 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007114 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007115 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7116 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7117 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007118 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007119 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007120 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007121 }
7122 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7123 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7124 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007125 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007126 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007127 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007128 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007129 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007130
7131 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007132}
7133
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007134bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007135 VkCmdBuffer cmdBuffer,
7136 VkImage srcImage,
7137 VkImageLayout srcImageLayout,
7138 VkImage destImage,
7139 VkImageLayout destImageLayout,
7140 uint32_t regionCount)
7141{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007142
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007143
7144 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7145 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7146 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007147 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007148 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007149 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007150 }
7151
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007152
7153 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7154 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7155 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007156 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007157 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007158 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007159 }
7160
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007161
7162 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007163}
7164
7165VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7166 VkCmdBuffer cmdBuffer,
7167 VkImage srcImage,
7168 VkImageLayout srcImageLayout,
7169 VkImage destImage,
7170 VkImageLayout destImageLayout,
7171 uint32_t regionCount,
7172 const VkImageCopy* pRegions)
7173{
7174 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007175
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007176 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7177
7178 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7179}
7180
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007181bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007182 VkCmdBuffer cmdBuffer,
7183 const VkImageBlit* pRegions)
7184{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007185 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007186 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007187 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7188 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7189 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007190 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007191 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007192 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007193 }
7194 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7195 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7196 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007197 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007198 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007199 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007200 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007201 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007202
7203 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007204}
7205
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007206bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007207 VkCmdBuffer cmdBuffer,
7208 VkImage srcImage,
7209 VkImageLayout srcImageLayout,
7210 VkImage destImage,
7211 VkImageLayout destImageLayout,
7212 uint32_t regionCount,
7213 VkTexFilter filter)
7214{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007215
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007216
7217 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7218 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7219 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007220 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007221 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007222 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007223 }
7224
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007225
7226 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7227 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7228 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007229 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007230 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007231 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007232 }
7233
7234
7235 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7236 filter > VK_TEX_FILTER_END_RANGE)
7237 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007238 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007239 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007240 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007241 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007242
7243 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007244}
7245
7246VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7247 VkCmdBuffer cmdBuffer,
7248 VkImage srcImage,
7249 VkImageLayout srcImageLayout,
7250 VkImage destImage,
7251 VkImageLayout destImageLayout,
7252 uint32_t regionCount,
7253 const VkImageBlit* pRegions,
7254 VkTexFilter filter)
7255{
7256 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007257
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007258 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7259
7260 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7261}
7262
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007263bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007264 VkCmdBuffer cmdBuffer,
7265 const VkBufferImageCopy* pRegions)
7266{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007267 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007268 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007269 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7270 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7271 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007272 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007273 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007274 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007275 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007276 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007277
7278 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007279}
7280
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007281bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007282 VkCmdBuffer cmdBuffer,
7283 VkBuffer srcBuffer,
7284 VkImage destImage,
7285 VkImageLayout destImageLayout,
7286 uint32_t regionCount)
7287{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007288
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007289
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007290
7291 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7292 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7293 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007294 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007295 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007296 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007297 }
7298
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007299
7300 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007301}
7302
7303VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7304 VkCmdBuffer cmdBuffer,
7305 VkBuffer srcBuffer,
7306 VkImage destImage,
7307 VkImageLayout destImageLayout,
7308 uint32_t regionCount,
7309 const VkBufferImageCopy* pRegions)
7310{
7311 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007312
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007313 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7314
7315 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7316}
7317
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007318bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007319 VkCmdBuffer cmdBuffer,
7320 const VkBufferImageCopy* pRegions)
7321{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007322 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007323 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007324 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7325 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7326 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007327 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007328 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007329 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007330 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007331 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007332
7333 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007334}
7335
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007336bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007337 VkCmdBuffer cmdBuffer,
7338 VkImage srcImage,
7339 VkImageLayout srcImageLayout,
7340 VkBuffer destBuffer,
7341 uint32_t regionCount)
7342{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007343
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007344
7345 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7346 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7347 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007348 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007349 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007350 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007351 }
7352
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007353
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007354
7355 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007356}
7357
7358VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7359 VkCmdBuffer cmdBuffer,
7360 VkImage srcImage,
7361 VkImageLayout srcImageLayout,
7362 VkBuffer destBuffer,
7363 uint32_t regionCount,
7364 const VkBufferImageCopy* pRegions)
7365{
7366 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007367
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007368 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7369
7370 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7371}
7372
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007373bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007374 VkCmdBuffer cmdBuffer,
7375 const uint32_t* pData)
7376{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007377 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007378 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007379 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007380
7381 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007382}
7383
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007384bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007385 VkCmdBuffer cmdBuffer,
7386 VkBuffer destBuffer,
7387 VkDeviceSize destOffset,
7388 VkDeviceSize dataSize)
7389{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007390
7391
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007392
7393
7394 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007395}
7396
7397VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7398 VkCmdBuffer cmdBuffer,
7399 VkBuffer destBuffer,
7400 VkDeviceSize destOffset,
7401 VkDeviceSize dataSize,
7402 const uint32_t* pData)
7403{
7404 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007405
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007406 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7407
7408 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7409}
7410
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007411bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007412 VkCmdBuffer cmdBuffer,
7413 VkBuffer destBuffer,
7414 VkDeviceSize destOffset,
7415 VkDeviceSize fillSize,
7416 uint32_t data)
7417{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007418
7419
7420
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007421
7422
7423 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007424}
7425
7426VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7427 VkCmdBuffer cmdBuffer,
7428 VkBuffer destBuffer,
7429 VkDeviceSize destOffset,
7430 VkDeviceSize fillSize,
7431 uint32_t data)
7432{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007433 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7434
7435 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7436}
7437
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007438bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007439 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007440 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007441 const VkImageSubresourceRange* pRanges)
7442{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007443 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007444 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007445 }
7446
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007447 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007448 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007449 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7450 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7451 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007452 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007453 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007454 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007455 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007456 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007457
7458 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007459}
7460
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007461bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007462 VkCmdBuffer cmdBuffer,
7463 VkImage image,
7464 VkImageLayout imageLayout,
7465 uint32_t rangeCount)
7466{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007467
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007468
7469 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7470 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7471 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007472 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007473 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007474 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007475 }
7476
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007477
7478 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007479}
7480
7481VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7482 VkCmdBuffer cmdBuffer,
7483 VkImage image,
7484 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007485 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007486 uint32_t rangeCount,
7487 const VkImageSubresourceRange* pRanges)
7488{
7489 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007490
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007491 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7492
7493 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7494}
7495
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007496bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007497 VkCmdBuffer cmdBuffer,
7498 const VkImageSubresourceRange* pRanges)
7499{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007500 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007501 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007502 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7503 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7504 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007505 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007506 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007507 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007508 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007509 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007510
7511 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007512}
7513
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007514bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007515 VkCmdBuffer cmdBuffer,
7516 VkImage image,
7517 VkImageLayout imageLayout,
7518 float depth,
7519 uint32_t stencil,
7520 uint32_t rangeCount)
7521{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007522
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007523
7524 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7525 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7526 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007527 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007528 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007529 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007530 }
7531
7532
7533
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007534
7535 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007536}
7537
Chris Forbes2951d7d2015-06-22 17:21:59 +12007538VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007539 VkCmdBuffer cmdBuffer,
7540 VkImage image,
7541 VkImageLayout imageLayout,
7542 float depth,
7543 uint32_t stencil,
7544 uint32_t rangeCount,
7545 const VkImageSubresourceRange* pRanges)
7546{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007547 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007548
Chris Forbes2951d7d2015-06-22 17:21:59 +12007549 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007550
Chris Forbes2951d7d2015-06-22 17:21:59 +12007551 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007552}
7553
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007554bool PreCmdClearColorAttachment(
7555 VkCmdBuffer cmdBuffer,
7556 const VkClearColorValue* pColor,
7557 const VkRect3D* pRects)
7558{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007559 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007560 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007561 }
7562
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007563 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007564 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007565 }
7566
7567 return true;
7568}
7569
7570bool PostCmdClearColorAttachment(
7571 VkCmdBuffer cmdBuffer,
7572 uint32_t colorAttachment,
7573 VkImageLayout imageLayout,
7574 uint32_t rectCount)
7575{
7576
7577
7578 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7579 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7580 {
7581 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007582 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007583 return false;
7584 }
7585
7586
7587 return true;
7588}
7589
7590VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7591 VkCmdBuffer cmdBuffer,
7592 uint32_t colorAttachment,
7593 VkImageLayout imageLayout,
7594 const VkClearColorValue* pColor,
7595 uint32_t rectCount,
7596 const VkRect3D* pRects)
7597{
7598 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7599
7600 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7601
7602 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7603}
7604
7605bool PreCmdClearDepthStencilAttachment(
7606 VkCmdBuffer cmdBuffer,
7607 const VkRect3D* pRects)
7608{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007609 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007610 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007611 }
7612
7613 return true;
7614}
7615
7616bool PostCmdClearDepthStencilAttachment(
7617 VkCmdBuffer cmdBuffer,
7618 VkImageAspectFlags imageAspectMask,
7619 VkImageLayout imageLayout,
7620 float depth,
7621 uint32_t stencil,
7622 uint32_t rectCount)
7623{
7624
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007625
7626 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7627 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7628 {
7629 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007630 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007631 return false;
7632 }
7633
7634
7635
7636
7637 return true;
7638}
7639
7640VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7641 VkCmdBuffer cmdBuffer,
7642 VkImageAspectFlags imageAspectMask,
7643 VkImageLayout imageLayout,
7644 float depth,
7645 uint32_t stencil,
7646 uint32_t rectCount,
7647 const VkRect3D* pRects)
7648{
7649 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7650
7651 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7652
7653 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7654}
7655
7656bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007657 VkCmdBuffer cmdBuffer,
7658 const VkImageResolve* pRegions)
7659{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007660 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007661 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007662 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7663 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7664 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007665 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007666 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007667 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007668 }
7669 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7670 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7671 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007672 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007673 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007674 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007675 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007676 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007677
7678 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007679}
7680
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007681bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007682 VkCmdBuffer cmdBuffer,
7683 VkImage srcImage,
7684 VkImageLayout srcImageLayout,
7685 VkImage destImage,
7686 VkImageLayout destImageLayout,
7687 uint32_t regionCount)
7688{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007689
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007690
7691 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7692 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7693 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007694 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007695 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007696 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007697 }
7698
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007699
7700 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7701 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7702 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007703 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007704 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007705 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007706 }
7707
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007708
7709 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007710}
7711
7712VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7713 VkCmdBuffer cmdBuffer,
7714 VkImage srcImage,
7715 VkImageLayout srcImageLayout,
7716 VkImage destImage,
7717 VkImageLayout destImageLayout,
7718 uint32_t regionCount,
7719 const VkImageResolve* pRegions)
7720{
7721 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007722
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007723 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7724
7725 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7726}
7727
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007728bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007729 VkCmdBuffer cmdBuffer,
7730 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007731 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007732{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007733
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007734
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007735
7736 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007737}
7738
7739VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7740 VkCmdBuffer cmdBuffer,
7741 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007742 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007743{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007744 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007745
Tony Barbourc2e987e2015-06-29 16:20:35 -06007746 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007747}
7748
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007749bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007750 VkCmdBuffer cmdBuffer,
7751 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007752 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007753{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007754
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007755
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007756
7757 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007758}
7759
7760VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7761 VkCmdBuffer cmdBuffer,
7762 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007763 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007764{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007765 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007766
Tony Barbourc2e987e2015-06-29 16:20:35 -06007767 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007768}
7769
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007770bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007771 VkCmdBuffer cmdBuffer,
7772 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007773 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007774{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007775 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007776 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007777 }
7778
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007779 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007780 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007781 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007782
7783 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007784}
7785
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007786bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007787 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007788 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007789 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007790 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007791 uint32_t memBarrierCount)
7792{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007793
Tony Barbourc2e987e2015-06-29 16:20:35 -06007794
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007795
7796
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007797
7798 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007799}
7800
7801VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
7802 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007803 uint32_t eventCount,
7804 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007805 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007806 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007807 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007808 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007809{
7810 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007811
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007812 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007813
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007814 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007815}
7816
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007817bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007818 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007819 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007820{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007821 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007822 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007823 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007824
7825 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007826}
7827
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007828bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007829 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007830 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007831 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007832 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007833 uint32_t memBarrierCount)
7834{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007835
Tony Barbourc2e987e2015-06-29 16:20:35 -06007836
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007837
7838
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007839
7840 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007841}
7842
7843VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7844 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007845 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007846 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007847 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007848 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007849 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007850{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007851 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007852
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007853 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007854
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007855 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007856}
7857
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007858bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007859 VkCmdBuffer cmdBuffer,
7860 VkQueryPool queryPool,
7861 uint32_t slot,
7862 VkQueryControlFlags flags)
7863{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007864
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007865
7866
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007867
7868 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007869}
7870
7871VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
7872 VkCmdBuffer cmdBuffer,
7873 VkQueryPool queryPool,
7874 uint32_t slot,
7875 VkQueryControlFlags flags)
7876{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007877 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7878
7879 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7880}
7881
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007882bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007883 VkCmdBuffer cmdBuffer,
7884 VkQueryPool queryPool,
7885 uint32_t slot)
7886{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007887
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007888
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007889
7890 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007891}
7892
7893VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
7894 VkCmdBuffer cmdBuffer,
7895 VkQueryPool queryPool,
7896 uint32_t slot)
7897{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007898 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
7899
7900 PostCmdEndQuery(cmdBuffer, queryPool, slot);
7901}
7902
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007903bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007904 VkCmdBuffer cmdBuffer,
7905 VkQueryPool queryPool,
7906 uint32_t startQuery,
7907 uint32_t queryCount)
7908{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007909
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007910
7911
7912
7913 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007914}
7915
7916VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
7917 VkCmdBuffer cmdBuffer,
7918 VkQueryPool queryPool,
7919 uint32_t startQuery,
7920 uint32_t queryCount)
7921{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007922 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7923
7924 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7925}
7926
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007927bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007928 VkCmdBuffer cmdBuffer,
7929 VkTimestampType timestampType,
7930 VkBuffer destBuffer,
7931 VkDeviceSize destOffset)
7932{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007933
7934 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
7935 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
7936 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007937 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007938 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007939 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007940 }
7941
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007942
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007943
7944 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007945}
7946
7947VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
7948 VkCmdBuffer cmdBuffer,
7949 VkTimestampType timestampType,
7950 VkBuffer destBuffer,
7951 VkDeviceSize destOffset)
7952{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007953 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
7954
7955 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
7956}
7957
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007958bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007959 VkCmdBuffer cmdBuffer,
7960 VkQueryPool queryPool,
7961 uint32_t startQuery,
7962 uint32_t queryCount,
7963 VkBuffer destBuffer,
7964 VkDeviceSize destOffset,
7965 VkDeviceSize destStride,
7966 VkQueryResultFlags flags)
7967{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007968
7969
7970
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007971
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007972
7973
7974
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007975
7976 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007977}
7978
Jeremy Hayescf469132015-04-17 10:36:53 -06007979VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007980 VkCmdBuffer cmdBuffer,
7981 VkQueryPool queryPool,
7982 uint32_t startQuery,
7983 uint32_t queryCount,
7984 VkBuffer destBuffer,
7985 VkDeviceSize destOffset,
7986 VkDeviceSize destStride,
7987 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06007988{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007989 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
7990
7991 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06007992}
7993
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007994bool PreCmdPushConstants(
7995 VkCmdBuffer cmdBuffer,
7996 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007997{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007998 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007999 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008000 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008001
8002 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008003}
8004
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008005bool PostCmdPushConstants(
8006 VkCmdBuffer cmdBuffer,
8007 VkPipelineLayout layout,
8008 VkShaderStageFlags stageFlags,
8009 uint32_t start,
8010 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008011{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008012
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008013
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008014
8015
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008016
8017 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008018}
8019
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008020VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
8021 VkCmdBuffer cmdBuffer,
8022 VkPipelineLayout layout,
8023 VkShaderStageFlags stageFlags,
8024 uint32_t start,
8025 uint32_t length,
8026 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008027{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008028 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008029
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008030 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008031
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008032 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008033}
8034
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008035bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008036 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008037 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008038{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008039 if(pRenderPassBegin != nullptr)
8040 {
8041 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008042 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008043 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008044 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008045 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008046 }
Cody Northropc332eef2015-08-04 11:51:03 -06008047 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008048 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008049 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06008050 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008051
8052 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008053}
8054
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008055bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008056 VkCmdBuffer cmdBuffer,
8057 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008058{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008059
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008060 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8061 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
8062 {
8063 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8064 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8065 return false;
8066 }
8067
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008068 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008069}
8070
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008071VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8072 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008073 const VkRenderPassBeginInfo* pRenderPassBegin,
8074 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008075{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008076 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8077
Chia-I Wuc278df82015-07-07 11:50:03 +08008078 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008079
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008080 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008081}
8082
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008083bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08008084 VkCmdBuffer cmdBuffer,
8085 VkRenderPassContents contents)
8086{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008087
8088 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008089 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008090 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008091 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008092 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8093 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008094 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008095
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008096 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08008097}
8098
8099VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8100 VkCmdBuffer cmdBuffer,
8101 VkRenderPassContents contents)
8102{
Chia-I Wuc278df82015-07-07 11:50:03 +08008103 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8104
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008105 PostCmdNextSubpass(cmdBuffer, contents);
8106}
8107
8108bool PostCmdEndRenderPass(
8109 VkCmdBuffer cmdBuffer)
8110{
8111
8112 return true;
8113}
8114
8115VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
8116 VkCmdBuffer cmdBuffer)
8117{
8118 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8119
8120 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08008121}
8122
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008123bool PreCmdExecuteCommands(
8124 VkCmdBuffer cmdBuffer,
8125 const VkCmdBuffer* pCmdBuffers)
8126{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008127 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008128 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008129 }
8130
8131 return true;
8132}
8133
8134bool PostCmdExecuteCommands(
8135 VkCmdBuffer cmdBuffer,
8136 uint32_t cmdBuffersCount)
8137{
8138
8139
8140 return true;
8141}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008142
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008143VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008144 VkCmdBuffer cmdBuffer,
8145 uint32_t cmdBuffersCount,
8146 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008147{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008148 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8149
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008150 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8151
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008152 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008153}
8154
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008155VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008156{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008157 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008158 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008159 }
8160
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008161 /* loader uses this to force layer initialization; device object is wrapped */
8162 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008163 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008164 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008165 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008166
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008167 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008168 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008169 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008170 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008171 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008172 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008173 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008174 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008175 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008176 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008177 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008178 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008179 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008180 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008181 if (!strcmp(funcName, "vkFreeMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008182 return (PFN_vkVoidFunction) vkFreeMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008183 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008184 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008185 if (!strcmp(funcName, "vkUnmapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008186 return (PFN_vkVoidFunction) vkUnmapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008187 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008188 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008189 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008190 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008191 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008192 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008193 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008194 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008195 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008196 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008197 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008198 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008199 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008200 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008201 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008202 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008203 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008204 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008205 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008206 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008207 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008208 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008209 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008210 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008211 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008212 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008213 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008214 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008215 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008216 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008217 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008218 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008219 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008220 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008221 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008222 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008223 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008224 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008225 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008226 return (PFN_vkVoidFunction) vkCreateImageView;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06008227 if (!strcmp(funcName, "vkDestroyImageView"))
8228 return (PFN_vkVoidFunction) vkDestroyImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008229 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008230 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008231 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008232 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008233 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008234 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008235 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008236 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008237 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008238 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008239 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008240 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008241 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008242 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008243 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008244 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008245 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008246 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008247 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008248 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Cody Northrope4bc6942015-08-26 10:01:32 -06008249 if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
8250 return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
8251 if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
8252 return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
8253 if (!strcmp(funcName, "vkCreateDynamicBlendState"))
8254 return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
8255 if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
8256 return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
Cody Northrop2605cb02015-08-18 15:21:16 -06008257 if (!strcmp(funcName, "vkCreateDynamicStencilState"))
8258 return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008259 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008260 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008261 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008262 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008263 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008264 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008265 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008266 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008267 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008268 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008269 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008270 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008271 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008272 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008273 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008274 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008275 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008276 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008277 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008278 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008279 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008280 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008281 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008282 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008283 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008284 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008285 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008286 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008287 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008288 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008289 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008290 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008291 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008292 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008293 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008294 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008295 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008296 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008297 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008298 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008299 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008300 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008301 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008302 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008303 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008304 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008305 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008306 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008307 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008308 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008309 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008310 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008311 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008312 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008313 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008314 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008315 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008316 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008317 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008318 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008319 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008320 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008321 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008322 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008323 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008324 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008325 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008326 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008327 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008328 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008329 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008330 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008331
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008332 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008333 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008334 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008335 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008336 }
8337}
8338
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008339VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008340{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008341 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008342 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008343 }
8344
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008345 /* loader uses this to force layer initialization; instance object is wrapped */
8346 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008347 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008348 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008349 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008350
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008351 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008352 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008353 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008354 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008355 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008356 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008357 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008358 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008359 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008360 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06008361 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008362 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008363 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008364 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008365 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008366 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008367 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008368 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008369 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008370 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008371
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008372 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008373 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008374 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008375 return fptr;
8376
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008377 {
8378 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8379 return NULL;
8380 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8381 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008382}