blob: 3c3361d0470ae73d3e4441f661efb139214c66bb [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
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 Lobodzinski2eed1eb2015-05-26 10:58:40 -050032#include <unordered_map>
Jeremy Hayes99a96322015-06-26 12:48:09 -060033#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060034
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060035#include "vk_loader_platform.h"
Tobin Ehlis0c6f9ee2015-07-03 09:42:57 -060036#include "vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060037#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060038#include "vk_enum_validate_helper.h"
39#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060040//The following is #included again to catch certain OS-specific functions being used:
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060041#include "vk_loader_platform.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060042
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060043#include "vk_layer_table.h"
44#include "vk_layer_data.h"
45#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060046#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060047
Jeremy Hayes99a96322015-06-26 12:48:09 -060048typedef struct _layer_data {
49 debug_report_data *report_data;
50 VkDbgMsgCallback logging_callback;
51} layer_data;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050052
Jeremy Hayes99a96322015-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 Hayesa8b1a8d2015-04-06 13:46:11 -060056
Jeremy Hayes99a96322015-06-26 12:48:09 -060057// "my instance data"
58debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060059{
Jeremy Hayes99a96322015-06-26 12:48:09 -060060 dispatch_key key = get_dispatch_key(object);
61 layer_data *data = get_my_data_ptr(get_dispatch_key(object), layer_data_map);
62#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
65 assert(data->report_data != NULL);
66
67 return data->report_data;
68}
69
70// "my device data"
71debug_report_data *mdd(VkObject object)
72{
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
78 assert(data->report_data != NULL);
79 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 }
96 if(log_output == NULL)
97 {
98 log_output = stdout;
99 }
100
101 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void*)log_output, &data->logging_callback);
102 }
103}
104
105VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
106 VkInstance instance,
107 VkFlags msgFlags,
108 const PFN_vkDbgMsgCallback pfnMsgCallback,
109 void* pUserData,
110 VkDbgMsgCallback* pMsgCallback)
111{
112 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
113 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
114
115 if (result == VK_SUCCESS)
116 {
117 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
118 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
119 }
120
121 return result;
122}
123
124VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
125 VkInstance instance,
126 VkDbgMsgCallback msgCallback)
127{
128 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
129 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
130
131 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
132 layer_destroy_msg_callback(data->report_data, msgCallback);
133
134 return result;
135}
136
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600137static const VkLayerProperties pc_global_layers[] = {
138 {
139 "ParamChecker",
140 VK_API_VERSION,
141 VK_MAKE_VERSION(0, 1, 0),
142 "Validation layer: ParamChecker",
143 }
144};
Tony Barbour59a47322015-06-24 16:06:58 -0600145
146VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600147 const char *pLayerName,
148 uint32_t *pCount,
149 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600150{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600151 /* ParamChecker does not have any global extensions */
152 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600153}
154
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600155VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties(
156 uint32_t *pCount,
157 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600158{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600159 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
160 pc_global_layers,
161 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600162}
163
164VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600165 VkPhysicalDevice physicalDevice,
166 const char* pLayerName,
167 uint32_t* pCount,
168 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600169{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600170 /* ParamChecker does not have any physical device extensions */
171 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayesad367152015-04-17 10:36:53 -0600172}
173
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600174VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
175 VkPhysicalDevice physicalDevice,
176 uint32_t* pCount,
177 VkLayerProperties* pProperties)
178{
179 /* ParamChecker's physical device layers are the same as global */
180 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
181 pCount, pProperties);
182}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600183
184static
185std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600186{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600187 switch(enumerator)
188 {
189 case VK_ERROR_MEMORY_NOT_BOUND:
190 {
191 return "VK_ERROR_MEMORY_NOT_BOUND";
192 break;
193 }
194 case VK_ERROR_BUILDING_COMMAND_BUFFER:
195 {
196 return "VK_ERROR_BUILDING_COMMAND_BUFFER";
197 break;
198 }
199 case VK_ERROR_INCOMPATIBLE_DRIVER:
200 {
201 return "VK_ERROR_INCOMPATIBLE_DRIVER";
202 break;
203 }
204 case VK_ERROR_MEMORY_UNMAP_FAILED:
205 {
206 return "VK_ERROR_MEMORY_UNMAP_FAILED";
207 break;
208 }
209 case VK_ERROR_MEMORY_MAP_FAILED:
210 {
211 return "VK_ERROR_MEMORY_MAP_FAILED";
212 break;
213 }
214 case VK_ERROR_BAD_PIPELINE_DATA:
215 {
216 return "VK_ERROR_BAD_PIPELINE_DATA";
217 break;
218 }
219 case VK_ERROR_INVALID_OBJECT_TYPE:
220 {
221 return "VK_ERROR_INVALID_OBJECT_TYPE";
222 break;
223 }
224 case VK_ERROR_INVALID_QUEUE_TYPE:
225 {
226 return "VK_ERROR_INVALID_QUEUE_TYPE";
227 break;
228 }
229 case VK_ERROR_BAD_SHADER_CODE:
230 {
231 return "VK_ERROR_BAD_SHADER_CODE";
232 break;
233 }
234 case VK_ERROR_INVALID_IMAGE:
235 {
236 return "VK_ERROR_INVALID_IMAGE";
237 break;
238 }
239 case VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION:
240 {
241 return "VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION";
242 break;
243 }
244 case VK_ERROR_INITIALIZATION_FAILED:
245 {
246 return "VK_ERROR_INITIALIZATION_FAILED";
247 break;
248 }
249 case VK_NOT_READY:
250 {
251 return "VK_NOT_READY";
252 break;
253 }
254 case VK_ERROR_INVALID_POINTER:
255 {
256 return "VK_ERROR_INVALID_POINTER";
257 break;
258 }
259 case VK_ERROR_INVALID_VALUE:
260 {
261 return "VK_ERROR_INVALID_VALUE";
262 break;
263 }
264 case VK_ERROR_UNAVAILABLE:
265 {
266 return "VK_ERROR_UNAVAILABLE";
267 break;
268 }
269 case VK_ERROR_OUT_OF_HOST_MEMORY:
270 {
271 return "VK_ERROR_OUT_OF_HOST_MEMORY";
272 break;
273 }
274 case VK_ERROR_UNKNOWN:
275 {
276 return "VK_ERROR_UNKNOWN";
277 break;
278 }
279 case VK_ERROR_NOT_MAPPABLE:
280 {
281 return "VK_ERROR_NOT_MAPPABLE";
282 break;
283 }
284 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
285 {
286 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
287 break;
288 }
289 case VK_EVENT_SET:
290 {
291 return "VK_EVENT_SET";
292 break;
293 }
294 case VK_TIMEOUT:
295 {
296 return "VK_TIMEOUT";
297 break;
298 }
299 case VK_ERROR_INVALID_FLAGS:
300 {
301 return "VK_ERROR_INVALID_FLAGS";
302 break;
303 }
304 case VK_EVENT_RESET:
305 {
306 return "VK_EVENT_RESET";
307 break;
308 }
309 case VK_ERROR_INVALID_DESCRIPTOR_SET_DATA:
310 {
311 return "VK_ERROR_INVALID_DESCRIPTOR_SET_DATA";
312 break;
313 }
314 case VK_UNSUPPORTED:
315 {
316 return "VK_UNSUPPORTED";
317 break;
318 }
319 case VK_ERROR_INVALID_HANDLE:
320 {
321 return "VK_ERROR_INVALID_HANDLE";
322 break;
323 }
324 case VK_ERROR_INCOMPATIBLE_DEVICE:
325 {
326 return "VK_ERROR_INCOMPATIBLE_DEVICE";
327 break;
328 }
329 case VK_SUCCESS:
330 {
331 return "VK_SUCCESS";
332 break;
333 }
334 case VK_ERROR_INCOMPATIBLE_QUEUE:
335 {
336 return "VK_ERROR_INCOMPATIBLE_QUEUE";
337 break;
338 }
339 case VK_ERROR_INVALID_EXTENSION:
340 {
341 return "VK_ERROR_INVALID_EXTENSION";
342 break;
343 }
344 case VK_ERROR_DEVICE_ALREADY_CREATED:
345 {
346 return "VK_ERROR_DEVICE_ALREADY_CREATED";
347 break;
348 }
349 case VK_ERROR_DEVICE_LOST:
350 {
351 return "VK_ERROR_DEVICE_LOST";
352 break;
353 }
354 case VK_ERROR_INVALID_ORDINAL:
355 {
356 return "VK_ERROR_INVALID_ORDINAL";
357 break;
358 }
359 case VK_ERROR_INVALID_MEMORY_SIZE:
360 {
361 return "VK_ERROR_INVALID_MEMORY_SIZE";
362 break;
363 }
364 case VK_ERROR_INCOMPLETE_COMMAND_BUFFER:
365 {
366 return "VK_ERROR_INCOMPLETE_COMMAND_BUFFER";
367 break;
368 }
369 case VK_ERROR_INVALID_ALIGNMENT:
370 {
371 return "VK_ERROR_INVALID_ALIGNMENT";
372 break;
373 }
374 case VK_ERROR_INVALID_FORMAT:
375 {
376 return "VK_ERROR_INVALID_FORMAT";
377 break;
378 }
379 default:
380 {
381 return "unrecognized enumerator";
382 break;
383 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600384 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600385}
386
387static
388bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
389{
390 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
391 VK_QUEUE_DMA_BIT |
392 VK_QUEUE_COMPUTE_BIT |
393 VK_QUEUE_SPARSE_MEMMGR_BIT |
394 VK_QUEUE_GRAPHICS_BIT);
395 if(enumerator & (~allFlags))
396 {
397 return false;
398 }
399
400 return true;
401}
402
403static
404std::string EnumeratorString(VkQueueFlagBits const& enumerator)
405{
406 if(!ValidateEnumerator(enumerator))
407 {
408 return "unrecognized enumerator";
409 }
410
411 std::vector<std::string> strings;
412 if(enumerator & VK_QUEUE_EXTENDED_BIT)
413 {
414 strings.push_back("VK_QUEUE_EXTENDED_BIT");
415 }
416 if(enumerator & VK_QUEUE_DMA_BIT)
417 {
418 strings.push_back("VK_QUEUE_DMA_BIT");
419 }
420 if(enumerator & VK_QUEUE_COMPUTE_BIT)
421 {
422 strings.push_back("VK_QUEUE_COMPUTE_BIT");
423 }
424 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
425 {
426 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
427 }
428 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
429 {
430 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
431 }
432
433 std::string enumeratorString;
434 for(auto const& string : strings)
435 {
436 enumeratorString += string;
437
438 if(string != strings.back())
439 {
440 enumeratorString += '|';
441 }
442 }
443
444 return enumeratorString;
445}
446
447static
448bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
449{
Mark Lobodzinski3fbc9c22015-07-02 17:09:57 -0600450 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600451 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
452 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
453 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
454 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
455 VK_MEMORY_PROPERTY_DEVICE_ONLY);
456 if(enumerator & (~allFlags))
457 {
458 return false;
459 }
460
461 return true;
462}
463
464static
465std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
466{
467 if(!ValidateEnumerator(enumerator))
468 {
469 return "unrecognized enumerator";
470 }
471
472 std::vector<std::string> strings;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600473 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
474 {
475 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
476 }
477 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
478 {
479 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
480 }
481 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
482 {
483 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
484 }
485 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
486 {
487 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
488 }
489 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
490 {
491 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
492 }
493
494 std::string enumeratorString;
495 for(auto const& string : strings)
496 {
497 enumeratorString += string;
498
499 if(string != strings.back())
500 {
501 enumeratorString += '|';
502 }
503 }
504
505 return enumeratorString;
506}
507
508static
509bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
510{
511 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
512 VK_MEMORY_OUTPUT_TRANSFER_BIT |
513 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
514 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
515 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
516 if(enumerator & (~allFlags))
517 {
518 return false;
519 }
520
521 return true;
522}
523
524static
525std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
526{
527 if(!ValidateEnumerator(enumerator))
528 {
529 return "unrecognized enumerator";
530 }
531
532 std::vector<std::string> strings;
533 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
534 {
535 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
536 }
537 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
538 {
539 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
540 }
541 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
542 {
543 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
544 }
545 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
546 {
547 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
548 }
549 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
550 {
551 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
552 }
553
554 std::string enumeratorString;
555 for(auto const& string : strings)
556 {
557 enumeratorString += string;
558
559 if(string != strings.back())
560 {
561 enumeratorString += '|';
562 }
563 }
564
565 return enumeratorString;
566}
567
568static
569bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
570{
571 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
572 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
573 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
574 VK_MEMORY_INPUT_SHADER_READ_BIT |
575 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
576 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
577 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
578 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
579 VK_MEMORY_INPUT_HOST_READ_BIT);
580 if(enumerator & (~allFlags))
581 {
582 return false;
583 }
584
585 return true;
586}
587
588static
589std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
590{
591 if(!ValidateEnumerator(enumerator))
592 {
593 return "unrecognized enumerator";
594 }
595
596 std::vector<std::string> strings;
597 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
598 {
599 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
600 }
601 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
602 {
603 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
604 }
605 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
606 {
607 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
608 }
609 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
610 {
611 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
612 }
613 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
614 {
615 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
616 }
617 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
618 {
619 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
620 }
621 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
622 {
623 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
624 }
625 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
626 {
627 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
628 }
629 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
630 {
631 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
632 }
633
634 std::string enumeratorString;
635 for(auto const& string : strings)
636 {
637 enumeratorString += string;
638
639 if(string != strings.back())
640 {
641 enumeratorString += '|';
642 }
643 }
644
645 return enumeratorString;
646}
647
648static
649bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
650{
651 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
652 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
653 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
654 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
655 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
656 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
657 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
658 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
659 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
660 VK_BUFFER_USAGE_GENERAL);
661 if(enumerator & (~allFlags))
662 {
663 return false;
664 }
665
666 return true;
667}
668
669static
670std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
671{
672 if(!ValidateEnumerator(enumerator))
673 {
674 return "unrecognized enumerator";
675 }
676
677 std::vector<std::string> strings;
678 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
679 {
680 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
681 }
682 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
683 {
684 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
685 }
686 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
687 {
688 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
689 }
690 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
691 {
692 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
693 }
694 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
695 {
696 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
697 }
698 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
699 {
700 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
701 }
702 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
703 {
704 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
705 }
706 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
707 {
708 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
709 }
710 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
711 {
712 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
713 }
714 if(enumerator & VK_BUFFER_USAGE_GENERAL)
715 {
716 strings.push_back("VK_BUFFER_USAGE_GENERAL");
717 }
718
719 std::string enumeratorString;
720 for(auto const& string : strings)
721 {
722 enumeratorString += string;
723
724 if(string != strings.back())
725 {
726 enumeratorString += '|';
727 }
728 }
729
730 return enumeratorString;
731}
732
733static
734bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
735{
736 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_BIT);
737 if(enumerator & (~allFlags))
738 {
739 return false;
740 }
741
742 return true;
743}
744
745static
746std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
747{
748 if(!ValidateEnumerator(enumerator))
749 {
750 return "unrecognized enumerator";
751 }
752
753 std::vector<std::string> strings;
754 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
755 {
756 strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT");
757 }
758
759 std::string enumeratorString;
760 for(auto const& string : strings)
761 {
762 enumeratorString += string;
763
764 if(string != strings.back())
765 {
766 enumeratorString += '|';
767 }
768 }
769
770 return enumeratorString;
771}
772
773static
774bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
775{
776 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
777 VK_SHADER_STAGE_FRAGMENT_BIT |
778 VK_SHADER_STAGE_GEOMETRY_BIT |
779 VK_SHADER_STAGE_COMPUTE_BIT |
780 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
781 VK_SHADER_STAGE_TESS_CONTROL_BIT |
782 VK_SHADER_STAGE_VERTEX_BIT);
783 if(enumerator & (~allFlags))
784 {
785 return false;
786 }
787
788 return true;
789}
790
791static
792std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
793{
794 if(!ValidateEnumerator(enumerator))
795 {
796 return "unrecognized enumerator";
797 }
798
799 std::vector<std::string> strings;
800 if(enumerator & VK_SHADER_STAGE_ALL)
801 {
802 strings.push_back("VK_SHADER_STAGE_ALL");
803 }
804 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
805 {
806 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
807 }
808 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
809 {
810 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
811 }
812 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
813 {
814 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
815 }
816 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
817 {
818 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
819 }
820 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
821 {
822 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
823 }
824 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
825 {
826 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
827 }
828
829 std::string enumeratorString;
830 for(auto const& string : strings)
831 {
832 enumeratorString += string;
833
834 if(string != strings.back())
835 {
836 enumeratorString += '|';
837 }
838 }
839
840 return enumeratorString;
841}
842
843static
844bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
845{
846 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_DEPTH_STENCIL_BIT |
847 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
848 VK_IMAGE_USAGE_STORAGE_BIT |
849 VK_IMAGE_USAGE_SAMPLED_BIT |
850 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
851 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
852 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT |
853 VK_IMAGE_USAGE_GENERAL);
854 if(enumerator & (~allFlags))
855 {
856 return false;
857 }
858
859 return true;
860}
861
862static
863std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
864{
865 if(!ValidateEnumerator(enumerator))
866 {
867 return "unrecognized enumerator";
868 }
869
870 std::vector<std::string> strings;
871 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
872 {
873 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
874 }
875 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
876 {
877 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
878 }
879 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
880 {
881 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
882 }
883 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
884 {
885 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
886 }
887 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
888 {
889 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
890 }
891 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
892 {
893 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
894 }
895 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
896 {
897 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
898 }
899 if(enumerator & VK_IMAGE_USAGE_GENERAL)
900 {
901 strings.push_back("VK_IMAGE_USAGE_GENERAL");
902 }
903
904 std::string enumeratorString;
905 for(auto const& string : strings)
906 {
907 enumeratorString += string;
908
909 if(string != strings.back())
910 {
911 enumeratorString += '|';
912 }
913 }
914
915 return enumeratorString;
916}
917
918static
919bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
920{
921 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
922 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
923 VK_IMAGE_CREATE_SPARSE_BIT |
924 VK_IMAGE_CREATE_INVARIANT_DATA_BIT);
925 if(enumerator & (~allFlags))
926 {
927 return false;
928 }
929
930 return true;
931}
932
933static
934std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
935{
936 if(!ValidateEnumerator(enumerator))
937 {
938 return "unrecognized enumerator";
939 }
940
941 std::vector<std::string> strings;
942 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
943 {
944 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
945 }
946 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
947 {
948 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
949 }
950 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
951 {
952 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
953 }
954 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
955 {
956 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
957 }
958
959 std::string enumeratorString;
960 for(auto const& string : strings)
961 {
962 enumeratorString += string;
963
964 if(string != strings.back())
965 {
966 enumeratorString += '|';
967 }
968 }
969
970 return enumeratorString;
971}
972
973static
974bool ValidateEnumerator(VkDepthStencilViewCreateFlagBits const& enumerator)
975{
976 VkDepthStencilViewCreateFlagBits allFlags = (VkDepthStencilViewCreateFlagBits)(VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT |
977 VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT);
978 if(enumerator & (~allFlags))
979 {
980 return false;
981 }
982
983 return true;
984}
985
986static
987std::string EnumeratorString(VkDepthStencilViewCreateFlagBits const& enumerator)
988{
989 if(!ValidateEnumerator(enumerator))
990 {
991 return "unrecognized enumerator";
992 }
993
994 std::vector<std::string> strings;
995 if(enumerator & VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
996 {
997 strings.push_back("VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
998 }
999 if(enumerator & VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
1000 {
1001 strings.push_back("VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
1002 }
1003
1004 std::string enumeratorString;
1005 for(auto const& string : strings)
1006 {
1007 enumeratorString += string;
1008
1009 if(string != strings.back())
1010 {
1011 enumeratorString += '|';
1012 }
1013 }
1014
1015 return enumeratorString;
1016}
1017
1018static
1019bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
1020{
1021 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1022 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
1023 if(enumerator & (~allFlags))
1024 {
1025 return false;
1026 }
1027
1028 return true;
1029}
1030
1031static
1032std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
1033{
1034 if(!ValidateEnumerator(enumerator))
1035 {
1036 return "unrecognized enumerator";
1037 }
1038
1039 std::vector<std::string> strings;
1040 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1041 {
1042 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1043 }
1044 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1045 {
1046 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
1047 }
1048
1049 std::string enumeratorString;
1050 for(auto const& string : strings)
1051 {
1052 enumeratorString += string;
1053
1054 if(string != strings.back())
1055 {
1056 enumeratorString += '|';
1057 }
1058 }
1059
1060 return enumeratorString;
1061}
1062
1063static
1064bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1065{
1066 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1067 VK_CHANNEL_B_BIT |
1068 VK_CHANNEL_G_BIT |
1069 VK_CHANNEL_R_BIT);
1070 if(enumerator & (~allFlags))
1071 {
1072 return false;
1073 }
1074
1075 return true;
1076}
1077
1078static
1079std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1080{
1081 if(!ValidateEnumerator(enumerator))
1082 {
1083 return "unrecognized enumerator";
1084 }
1085
1086 std::vector<std::string> strings;
1087 if(enumerator & VK_CHANNEL_A_BIT)
1088 {
1089 strings.push_back("VK_CHANNEL_A_BIT");
1090 }
1091 if(enumerator & VK_CHANNEL_B_BIT)
1092 {
1093 strings.push_back("VK_CHANNEL_B_BIT");
1094 }
1095 if(enumerator & VK_CHANNEL_G_BIT)
1096 {
1097 strings.push_back("VK_CHANNEL_G_BIT");
1098 }
1099 if(enumerator & VK_CHANNEL_R_BIT)
1100 {
1101 strings.push_back("VK_CHANNEL_R_BIT");
1102 }
1103
1104 std::string enumeratorString;
1105 for(auto const& string : strings)
1106 {
1107 enumeratorString += string;
1108
1109 if(string != strings.back())
1110 {
1111 enumeratorString += '|';
1112 }
1113 }
1114
1115 return enumeratorString;
1116}
1117
1118static
1119bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
1120{
1121 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
1122 if(enumerator & (~allFlags))
1123 {
1124 return false;
1125 }
1126
1127 return true;
1128}
1129
1130static
1131std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
1132{
1133 if(!ValidateEnumerator(enumerator))
1134 {
1135 return "unrecognized enumerator";
1136 }
1137
1138 std::vector<std::string> strings;
1139 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
1140 {
1141 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
1142 }
1143
1144 std::string enumeratorString;
1145 for(auto const& string : strings)
1146 {
1147 enumeratorString += string;
1148
1149 if(string != strings.back())
1150 {
1151 enumeratorString += '|';
1152 }
1153 }
1154
1155 return enumeratorString;
1156}
1157
1158static
1159bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
1160{
1161 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(VK_FORMAT_FEATURE_CONVERSION_BIT |
1162 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
1163 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
1164 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
1165 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
1166 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
1167 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
1168 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
1169 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
1170 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
1171 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT);
1172 if(enumerator & (~allFlags))
1173 {
1174 return false;
1175 }
1176
1177 return true;
1178}
1179
1180static
1181std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
1182{
1183 if(!ValidateEnumerator(enumerator))
1184 {
1185 return "unrecognized enumerator";
1186 }
1187
1188 std::vector<std::string> strings;
1189 if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT)
1190 {
1191 strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT");
1192 }
1193 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
1194 {
1195 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
1196 }
1197 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
1198 {
1199 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
1200 }
1201 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
1202 {
1203 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
1204 }
1205 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
1206 {
1207 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
1208 }
1209 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
1210 {
1211 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
1212 }
1213 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
1214 {
1215 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
1216 }
1217 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
1218 {
1219 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
1220 }
1221 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
1222 {
1223 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
1224 }
1225 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
1226 {
1227 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
1228 }
1229 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
1230 {
1231 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
1232 }
1233
1234 std::string enumeratorString;
1235 for(auto const& string : strings)
1236 {
1237 enumeratorString += string;
1238
1239 if(string != strings.back())
1240 {
1241 enumeratorString += '|';
1242 }
1243 }
1244
1245 return enumeratorString;
1246}
1247
1248static
1249bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1250{
1251 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1252 if(enumerator & (~allFlags))
1253 {
1254 return false;
1255 }
1256
1257 return true;
1258}
1259
1260static
1261std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1262{
1263 if(!ValidateEnumerator(enumerator))
1264 {
1265 return "unrecognized enumerator";
1266 }
1267
1268 std::vector<std::string> strings;
1269 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1270 {
1271 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
1272 }
1273
1274 std::string enumeratorString;
1275 for(auto const& string : strings)
1276 {
1277 enumeratorString += string;
1278
1279 if(string != strings.back())
1280 {
1281 enumeratorString += '|';
1282 }
1283 }
1284
1285 return enumeratorString;
1286}
1287
1288static
1289bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
1290{
1291 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
1292 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
1293 VK_QUERY_RESULT_WAIT_BIT |
1294 VK_QUERY_RESULT_64_BIT |
1295 VK_QUERY_RESULT_DEFAULT);
1296 if(enumerator & (~allFlags))
1297 {
1298 return false;
1299 }
1300
1301 return true;
1302}
1303
1304static
1305std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
1306{
1307 if(!ValidateEnumerator(enumerator))
1308 {
1309 return "unrecognized enumerator";
1310 }
1311
1312 std::vector<std::string> strings;
1313 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
1314 {
1315 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
1316 }
1317 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
1318 {
1319 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
1320 }
1321 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
1322 {
1323 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
1324 }
1325 if(enumerator & VK_QUERY_RESULT_64_BIT)
1326 {
1327 strings.push_back("VK_QUERY_RESULT_64_BIT");
1328 }
1329 if(enumerator & VK_QUERY_RESULT_DEFAULT)
1330 {
1331 strings.push_back("VK_QUERY_RESULT_DEFAULT");
1332 }
1333
1334 std::string enumeratorString;
1335 for(auto const& string : strings)
1336 {
1337 enumeratorString += string;
1338
1339 if(string != strings.back())
1340 {
1341 enumeratorString += '|';
1342 }
1343 }
1344
1345 return enumeratorString;
1346}
1347
1348static
1349bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1350{
1351 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
1352 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1353 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1354 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1355 if(enumerator & (~allFlags))
1356 {
1357 return false;
1358 }
1359
1360 return true;
1361}
1362
1363static
1364std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1365{
1366 if(!ValidateEnumerator(enumerator))
1367 {
1368 return "unrecognized enumerator";
1369 }
1370
1371 std::vector<std::string> strings;
1372 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1373 {
1374 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1375 }
1376 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1377 {
1378 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1379 }
1380 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1381 {
1382 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1383 }
1384 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1385 {
1386 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1387 }
1388
1389 std::string enumeratorString;
1390 for(auto const& string : strings)
1391 {
1392 enumeratorString += string;
1393
1394 if(string != strings.back())
1395 {
1396 enumeratorString += '|';
1397 }
1398 }
1399
1400 return enumeratorString;
1401}
1402
1403static
1404bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
1405{
1406 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
1407 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
1408 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
1409 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
1410 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
1411 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
1412 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
1413 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
1414 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
1415 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
1416 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
1417 if(enumerator & (~allFlags))
1418 {
1419 return false;
1420 }
1421
1422 return true;
1423}
1424
1425static
1426std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
1427{
1428 if(!ValidateEnumerator(enumerator))
1429 {
1430 return "unrecognized enumerator";
1431 }
1432
1433 std::vector<std::string> strings;
1434 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
1435 {
1436 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
1437 }
1438 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
1439 {
1440 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
1441 }
1442 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
1443 {
1444 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
1445 }
1446 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
1447 {
1448 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
1449 }
1450 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
1451 {
1452 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
1453 }
1454 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
1455 {
1456 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
1457 }
1458 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
1459 {
1460 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
1461 }
1462 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
1463 {
1464 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
1465 }
1466 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
1467 {
1468 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
1469 }
1470 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
1471 {
1472 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
1473 }
1474 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
1475 {
1476 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
1477 }
1478
1479 std::string enumeratorString;
1480 for(auto const& string : strings)
1481 {
1482 enumeratorString += string;
1483
1484 if(string != strings.back())
1485 {
1486 enumeratorString += '|';
1487 }
1488 }
1489
1490 return enumeratorString;
1491}
1492
1493VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1494 const VkInstanceCreateInfo* pCreateInfo,
1495 VkInstance* pInstance)
1496{
1497 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1498 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1499
1500 if (result == VK_SUCCESS) {
1501 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1502 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001503 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001504
1505 InitParamChecker(data);
1506 }
1507
1508 return result;
1509}
1510
1511VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(
1512 VkInstance instance)
1513{
1514 // Grab the key before the instance is destroyed.
1515 dispatch_key key = get_dispatch_key(instance);
1516 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
1517 VkResult result = pTable->DestroyInstance(instance);
1518
1519 // Clean up logging callback, if any
1520 layer_data *data = get_my_data_ptr(key, layer_data_map);
1521 if(data->logging_callback)
1522 {
1523 layer_destroy_msg_callback(data->report_data, data->logging_callback);
1524 }
1525
1526 layer_debug_report_destroy_instance(mid(instance));
1527 layer_data_map.erase(pTable);
1528
1529 pc_instance_table_map.erase(key);
1530 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
1531
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001532 return result;
1533}
1534
Jeremy Hayes99a96322015-06-26 12:48:09 -06001535void PreEnumeratePhysicalDevices(
1536 VkInstance instance,
1537 VkPhysicalDevice* pPhysicalDevices)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001538{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001539 if(instance == nullptr)
1540 {
1541 log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1542 "vkEnumeratePhysicalDevices parameter, VkInstance instance, is null pointer");
1543 return;
1544 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001545
Jeremy Hayes99a96322015-06-26 12:48:09 -06001546 if(pPhysicalDevices == nullptr)
1547 {
1548 log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1549 "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer");
1550 return;
1551 }
1552 if((*pPhysicalDevices) == nullptr)
1553 {
1554 log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1555 "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer");
1556 return;
1557 }
1558}
1559
1560void PostEnumeratePhysicalDevices(
1561 VkInstance instance,
1562 uint32_t* pPhysicalDeviceCount,
1563 VkPhysicalDevice* pPhysicalDevices,
1564 VkResult result)
1565{
1566 if(instance == nullptr)
1567 {
1568 log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1569 "vkEnumeratePhysicalDevices parameter, VkInstance instance, is null pointer");
1570 return;
1571 }
1572
1573 if(pPhysicalDeviceCount == nullptr)
1574 {
1575 log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1576 "vkEnumeratePhysicalDevices parameter, uint32_t* pPhysicalDeviceCount, is null pointer");
1577 return;
1578 }
1579
1580 if(pPhysicalDevices == nullptr)
1581 {
1582 log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1583 "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer");
1584 return;
1585 }
1586 if((*pPhysicalDevices) == nullptr)
1587 {
1588 log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1589 "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer");
1590 return;
1591 }
1592
1593 if(result != VK_SUCCESS)
1594 {
1595 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
1596 log_msg(mid(instance), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
1597 return;
1598 }
1599}
1600
1601VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1602 VkInstance instance,
1603 uint32_t* pPhysicalDeviceCount,
1604 VkPhysicalDevice* pPhysicalDevices)
1605{
1606 PreEnumeratePhysicalDevices(instance, pPhysicalDevices);
1607 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1608
1609 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1610
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001611 return result;
1612}
1613
Jeremy Hayes99a96322015-06-26 12:48:09 -06001614void PreGetPhysicalDeviceFeatures(
1615 VkPhysicalDevice physicalDevice)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001616{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001617 if(physicalDevice == nullptr)
1618 {
1619 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1620 "vkGetPhysicalDeviceFeatures parameter, VkPhysicalDevice physicalDevice, is null pointer");
1621 return;
1622 }
1623}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001624
Jeremy Hayes99a96322015-06-26 12:48:09 -06001625void PostGetPhysicalDeviceFeatures(
1626 VkPhysicalDevice physicalDevice,
1627 VkPhysicalDeviceFeatures* pFeatures,
1628 VkResult result)
1629{
1630 if(physicalDevice == nullptr)
1631 {
1632 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1633 "vkGetPhysicalDeviceFeatures parameter, VkPhysicalDevice physicalDevice, is null pointer");
1634 return;
1635 }
1636
1637 if(pFeatures == nullptr)
1638 {
1639 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1640 "vkGetPhysicalDeviceFeatures parameter, VkPhysicalDeviceFeatures* pFeatures, is null pointer");
1641 return;
1642 }
1643
1644 if(result != VK_SUCCESS)
1645 {
1646 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
1647 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
1648 return;
1649 }
1650}
1651
1652VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
1653 VkPhysicalDevice physicalDevice,
1654 VkPhysicalDeviceFeatures* pFeatures)
1655{
1656 PreGetPhysicalDeviceFeatures(physicalDevice);
1657 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1658
1659 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
1660
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001661 return result;
1662}
1663
Jeremy Hayes99a96322015-06-26 12:48:09 -06001664void PreGetPhysicalDeviceFormatInfo(
1665 VkPhysicalDevice physicalDevice)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001666{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001667 if(physicalDevice == nullptr)
1668 {
1669 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1670 "vkGetPhysicalDeviceFormatInfo parameter, VkPhysicalDevice physicalDevice, is null pointer");
1671 return;
1672 }
1673}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001674
Jeremy Hayes99a96322015-06-26 12:48:09 -06001675void PostGetPhysicalDeviceFormatInfo(
1676 VkPhysicalDevice physicalDevice,
1677 VkFormat format,
1678 VkFormatProperties* pFormatInfo,
1679 VkResult result)
1680{
1681 if(physicalDevice == nullptr)
1682 {
1683 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1684 "vkGetPhysicalDeviceFormatInfo parameter, VkPhysicalDevice physicalDevice, is null pointer");
1685 return;
1686 }
1687
1688 if(format < VK_FORMAT_BEGIN_RANGE ||
1689 format > VK_FORMAT_END_RANGE)
1690 {
1691 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1692 "vkGetPhysicalDeviceFormatInfo parameter, VkFormat format, is unrecognized enumerator");
1693 return;
1694 }
1695
1696 if(pFormatInfo == nullptr)
1697 {
1698 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1699 "vkGetPhysicalDeviceFormatInfo parameter, VkFormatProperties* pFormatInfo, is null pointer");
1700 return;
1701 }
1702 if(!ValidateEnumerator((VkFormatFeatureFlagBits)pFormatInfo->linearTilingFeatures))
1703 {
1704 std::string reason = "vkGetPhysicalDeviceFormatInfo parameter, VkFormatFeatureFlags pFormatInfo->linearTilingFeatures, is " + EnumeratorString((VkFormatFeatureFlagBits)pFormatInfo->linearTilingFeatures);
1705 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
1706 return;
1707 }
1708 if(!ValidateEnumerator((VkFormatFeatureFlagBits)pFormatInfo->optimalTilingFeatures))
1709 {
1710 std::string reason = "vkGetPhysicalDeviceFormatInfo parameter, VkFormatFeatureFlags pFormatInfo->optimalTilingFeatures, is " + EnumeratorString((VkFormatFeatureFlagBits)pFormatInfo->optimalTilingFeatures);
1711 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
1712 return;
1713 }
1714
1715 if(result != VK_SUCCESS)
1716 {
1717 std::string reason = "vkGetPhysicalDeviceFormatInfo parameter, VkResult result, is " + EnumeratorString(result);
1718 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
1719 return;
1720 }
1721}
1722
1723VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatInfo(
1724 VkPhysicalDevice physicalDevice,
1725 VkFormat format,
1726 VkFormatProperties* pFormatInfo)
1727{
1728 PreGetPhysicalDeviceFormatInfo(physicalDevice);
1729 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatInfo(physicalDevice, format, pFormatInfo);
1730
1731 PostGetPhysicalDeviceFormatInfo(physicalDevice, format, pFormatInfo, result);
1732
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001733 return result;
1734}
1735
Jeremy Hayes99a96322015-06-26 12:48:09 -06001736void PreGetPhysicalDeviceLimits(
1737 VkPhysicalDevice physicalDevice)
1738{
1739 if(physicalDevice == nullptr)
1740 {
1741 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1742 "vkGetPhysicalDeviceLimits parameter, VkPhysicalDevice physicalDevice, is null pointer");
1743 return;
1744 }
1745}
1746
1747void PostGetPhysicalDeviceLimits(
1748 VkPhysicalDevice physicalDevice,
1749 VkPhysicalDeviceLimits* pLimits,
1750 VkResult result)
1751{
1752 if(physicalDevice == nullptr)
1753 {
1754 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1755 "vkGetPhysicalDeviceLimits parameter, VkPhysicalDevice physicalDevice, is null pointer");
1756 return;
1757 }
1758
1759 if(pLimits == nullptr)
1760 {
1761 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1762 "vkGetPhysicalDeviceLimits parameter, VkPhysicalDeviceLimits* pLimits, is null pointer");
1763 return;
1764 }
1765
1766 if(result != VK_SUCCESS)
1767 {
1768 std::string reason = "vkGetPhysicalDeviceLimits parameter, VkResult result, is " + EnumeratorString(result);
1769 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
1770 return;
1771 }
1772}
1773
1774VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
1775 VkPhysicalDevice physicalDevice,
1776 VkPhysicalDeviceLimits* pLimits)
1777{
1778 PreGetPhysicalDeviceLimits(physicalDevice);
1779 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceLimits(physicalDevice, pLimits);
1780
1781 PostGetPhysicalDeviceLimits(physicalDevice, pLimits, result);
1782
1783 return result;
1784}
1785
1786VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
1787 VkPhysicalDevice physicalDevice,
1788 const VkDeviceCreateInfo* pCreateInfo,
1789 VkDevice* pDevice)
1790{
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06001791 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001792 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
1793 if(result == VK_SUCCESS)
1794 {
1795 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
1796 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
1797 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
1798 }
1799
1800 return result;
1801}
1802
1803VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
1804 VkDevice device)
1805{
1806 layer_debug_report_destroy_device(device);
1807
1808 dispatch_key key = get_dispatch_key(device);
1809#if DISPATCH_MAP_DEBUG
1810 fprintf(stderr, "Device: %p, key: %p\n", device, key);
1811#endif
1812
1813 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
1814 pc_device_table_map.erase(key);
1815 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
1816
1817 return result;
1818}
1819
1820void PreGetPhysicalDeviceProperties(
1821 VkPhysicalDevice physicalDevice)
1822{
1823 if(physicalDevice == nullptr)
1824 {
1825 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1826 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDevice physicalDevice, is null pointer");
1827 return;
1828 }
1829}
1830
1831void PostGetPhysicalDeviceProperties(
1832 VkPhysicalDevice physicalDevice,
1833 VkPhysicalDeviceProperties* pProperties,
1834 VkResult result)
1835{
1836 if(physicalDevice == nullptr)
1837 {
1838 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1839 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDevice physicalDevice, is null pointer");
1840 return;
1841 }
1842
1843 if(pProperties == nullptr)
1844 {
1845 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1846 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceProperties* pProperties, is null pointer");
1847 return;
1848 }
1849 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1850 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1851 {
1852 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1853 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is unrecognized enumerator");
1854 return;
1855 }
1856
1857 if(result != VK_SUCCESS)
1858 {
1859 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
1860 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
1861 return;
1862 }
1863}
1864
1865VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
1866 VkPhysicalDevice physicalDevice,
1867 VkPhysicalDeviceProperties* pProperties)
1868{
1869 PreGetPhysicalDeviceProperties(physicalDevice);
1870 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
1871
1872 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
1873
1874 return result;
1875}
1876
1877void PreGetPhysicalDevicePerformance(
1878 VkPhysicalDevice physicalDevice)
1879{
1880 if(physicalDevice == nullptr)
1881 {
1882 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1883 "vkGetPhysicalDevicePerformance parameter, VkPhysicalDevice physicalDevice, is null pointer");
1884 return;
1885 }
1886}
1887
1888void PostGetPhysicalDevicePerformance(
1889 VkPhysicalDevice physicalDevice,
1890 VkPhysicalDevicePerformance* pPerformance,
1891 VkResult result)
1892{
1893 if(physicalDevice == nullptr)
1894 {
1895 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1896 "vkGetPhysicalDevicePerformance parameter, VkPhysicalDevice physicalDevice, is null pointer");
1897 return;
1898 }
1899
1900 if(pPerformance == nullptr)
1901 {
1902 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1903 "vkGetPhysicalDevicePerformance parameter, VkPhysicalDevicePerformance* pPerformance, is null pointer");
1904 return;
1905 }
1906
1907 if(result != VK_SUCCESS)
1908 {
1909 std::string reason = "vkGetPhysicalDevicePerformance parameter, VkResult result, is " + EnumeratorString(result);
1910 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
1911 return;
1912 }
1913}
1914
1915VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDevicePerformance(
1916 VkPhysicalDevice physicalDevice,
1917 VkPhysicalDevicePerformance* pPerformance)
1918{
1919 PreGetPhysicalDevicePerformance(physicalDevice);
1920 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDevicePerformance(physicalDevice, pPerformance);
1921
1922 PostGetPhysicalDevicePerformance(physicalDevice, pPerformance, result);
1923
1924 return result;
1925}
1926
1927void PreGetPhysicalDeviceQueueCount(
1928 VkPhysicalDevice physicalDevice)
1929{
1930 if(physicalDevice == nullptr)
1931 {
1932 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1933 "vkGetPhysicalDeviceQueueCount parameter, VkPhysicalDevice physicalDevice, is null pointer");
1934 return;
1935 }
1936}
1937
1938void PostGetPhysicalDeviceQueueCount(
1939 VkPhysicalDevice physicalDevice,
1940 uint32_t* pCount,
1941 VkResult result)
1942{
1943 if(physicalDevice == nullptr)
1944 {
1945 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1946 "vkGetPhysicalDeviceQueueCount parameter, VkPhysicalDevice physicalDevice, is null pointer");
1947 return;
1948 }
1949
1950 if(pCount == nullptr)
1951 {
1952 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1953 "vkGetPhysicalDeviceQueueCount parameter, uint32_t* pCount, is null pointer");
1954 return;
1955 }
1956
1957 if(result != VK_SUCCESS)
1958 {
1959 std::string reason = "vkGetPhysicalDeviceQueueCount parameter, VkResult result, is " + EnumeratorString(result);
1960 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
1961 return;
1962 }
1963}
1964
1965VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueCount(
1966 VkPhysicalDevice physicalDevice,
1967 uint32_t* pCount)
1968{
1969 PreGetPhysicalDeviceQueueCount(physicalDevice);
1970 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueCount(physicalDevice, pCount);
1971
1972 PostGetPhysicalDeviceQueueCount(physicalDevice, pCount, result);
1973
1974 return result;
1975}
1976
1977void PreGetPhysicalDeviceQueueProperties(
1978 VkPhysicalDevice physicalDevice)
1979{
1980 if(physicalDevice == nullptr)
1981 {
1982 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1983 "vkGetPhysicalDeviceQueueProperties parameter, VkPhysicalDevice physicalDevice, is null pointer");
1984 return;
1985 }
1986}
1987
1988void PostGetPhysicalDeviceQueueProperties(
1989 VkPhysicalDevice physicalDevice,
1990 uint32_t count,
1991 VkPhysicalDeviceQueueProperties* pQueueProperties,
1992 VkResult result)
1993{
1994 if(physicalDevice == nullptr)
1995 {
1996 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
1997 "vkGetPhysicalDeviceQueueProperties parameter, VkPhysicalDevice physicalDevice, is null pointer");
1998 return;
1999 }
2000
2001
2002 if(pQueueProperties == nullptr)
2003 {
2004 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2005 "vkGetPhysicalDeviceQueueProperties parameter, VkPhysicalDeviceQueueProperties* pQueueProperties, is null pointer");
2006 return;
2007 }
2008 if(!ValidateEnumerator((VkQueueFlagBits)pQueueProperties->queueFlags))
2009 {
2010 std::string reason = "vkGetPhysicalDeviceQueueProperties parameter, VkQueueFlags pQueueProperties->queueFlags, is " + EnumeratorString((VkQueueFlagBits)pQueueProperties->queueFlags);
2011 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2012 return;
2013 }
2014
2015 if(result != VK_SUCCESS)
2016 {
2017 std::string reason = "vkGetPhysicalDeviceQueueProperties parameter, VkResult result, is " + EnumeratorString(result);
2018 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2019 return;
2020 }
2021}
2022
2023VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2024 VkPhysicalDevice physicalDevice,
2025 uint32_t count,
2026 VkPhysicalDeviceQueueProperties* pQueueProperties)
2027{
2028 PreGetPhysicalDeviceQueueProperties(physicalDevice);
2029 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties);
2030
2031 PostGetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties, result);
2032
2033 return result;
2034}
2035
2036void PreGetPhysicalDeviceMemoryProperties(
2037 VkPhysicalDevice physicalDevice)
2038{
2039 if(physicalDevice == nullptr)
2040 {
2041 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2042 "vkGetPhysicalDeviceMemoryProperties parameter, VkPhysicalDevice physicalDevice, is null pointer");
2043 return;
2044 }
2045}
2046
2047void PostGetPhysicalDeviceMemoryProperties(
2048 VkPhysicalDevice physicalDevice,
2049 VkPhysicalDeviceMemoryProperties* pMemoryProperies,
2050 VkResult result)
2051{
2052 if(physicalDevice == nullptr)
2053 {
2054 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2055 "vkGetPhysicalDeviceMemoryProperties parameter, VkPhysicalDevice physicalDevice, is null pointer");
2056 return;
2057 }
2058
2059 if(pMemoryProperies == nullptr)
2060 {
2061 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2062 "vkGetPhysicalDeviceMemoryProperties parameter, VkPhysicalDeviceMemoryProperties* pMemoryProperies, is null pointer");
2063 return;
2064 }
2065
2066 if(result != VK_SUCCESS)
2067 {
2068 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2069 log_msg(mdd(physicalDevice), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2070 return;
2071 }
2072}
2073
2074VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2075 VkPhysicalDevice physicalDevice,
2076 VkPhysicalDeviceMemoryProperties* pMemoryProperies)
2077{
2078 PreGetPhysicalDeviceMemoryProperties(physicalDevice);
2079 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperies);
2080
2081 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperies, result);
2082
2083 return result;
2084}
2085
2086void PreGetDeviceQueue(
2087 VkDevice device,
2088 VkQueue* pQueue)
2089{
2090 if(device == nullptr)
2091 {
2092 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2093 "vkGetDeviceQueue parameter, VkDevice device, is null pointer");
2094 return;
2095 }
2096
2097 if(pQueue == nullptr)
2098 {
2099 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2100 "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer");
2101 return;
2102 }
2103 if((*pQueue) == nullptr)
2104 {
2105 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2106 "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer");
2107 return;
2108 }
2109}
2110
2111void PostGetDeviceQueue(
2112 VkDevice device,
2113 uint32_t queueNodeIndex,
2114 uint32_t queueIndex,
2115 VkQueue* pQueue,
2116 VkResult result)
2117{
2118 if(device == nullptr)
2119 {
2120 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2121 "vkGetDeviceQueue parameter, VkDevice device, is null pointer");
2122 return;
2123 }
2124
2125
2126
2127 if(pQueue == nullptr)
2128 {
2129 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2130 "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer");
2131 return;
2132 }
2133 if((*pQueue) == nullptr)
2134 {
2135 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2136 "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer");
2137 return;
2138 }
2139
2140 if(result != VK_SUCCESS)
2141 {
2142 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
2143 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2144 return;
2145 }
2146}
2147
2148VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2149 VkDevice device,
2150 uint32_t queueNodeIndex,
2151 uint32_t queueIndex,
2152 VkQueue* pQueue)
2153{
2154 PreGetDeviceQueue(device, pQueue);
2155 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
2156
2157 PostGetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue, result);
2158
2159 return result;
2160}
2161
2162void PreQueueSubmit(
2163 VkQueue queue,
2164 const VkCmdBuffer* pCmdBuffers)
2165{
2166 if(queue == nullptr)
2167 {
2168 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2169 "vkQueueSubmit parameter, VkQueue queue, is null pointer");
2170 return;
2171 }
2172
2173 if(pCmdBuffers == nullptr)
2174 {
2175 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2176 "vkQueueSubmit parameter, const VkCmdBuffer* pCmdBuffers, is null pointer");
2177 return;
2178 }
2179 if((*pCmdBuffers) == nullptr)
2180 {
2181 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2182 "vkQueueSubmit parameter, const VkCmdBuffer* pCmdBuffers, is null pointer");
2183 return;
2184 }
2185}
2186
2187void PostQueueSubmit(
2188 VkQueue queue,
2189 uint32_t cmdBufferCount,
2190 VkFence fence,
2191 VkResult result)
2192{
2193 if(queue == nullptr)
2194 {
2195 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2196 "vkQueueSubmit parameter, VkQueue queue, is null pointer");
2197 return;
2198 }
2199
Jeremy Hayes99a96322015-06-26 12:48:09 -06002200 if(result != VK_SUCCESS)
2201 {
2202 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
2203 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2204 return;
2205 }
2206}
2207
2208VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2209 VkQueue queue,
2210 uint32_t cmdBufferCount,
2211 const VkCmdBuffer* pCmdBuffers,
2212 VkFence fence)
2213{
2214 PreQueueSubmit(queue, pCmdBuffers);
2215 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2216
2217 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2218
2219 return result;
2220}
2221
2222void PreQueueWaitIdle(
2223 VkQueue queue)
2224{
2225 if(queue == nullptr)
2226 {
2227 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2228 "vkQueueWaitIdle parameter, VkQueue queue, is null pointer");
2229 return;
2230 }
2231}
2232
2233void PostQueueWaitIdle(
2234 VkQueue queue,
2235 VkResult result)
2236{
2237 if(queue == nullptr)
2238 {
2239 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2240 "vkQueueWaitIdle parameter, VkQueue queue, is null pointer");
2241 return;
2242 }
2243
2244 if(result != VK_SUCCESS)
2245 {
2246 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
2247 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2248 return;
2249 }
2250}
2251
2252VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2253 VkQueue queue)
2254{
2255 PreQueueWaitIdle(queue);
2256 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2257
2258 PostQueueWaitIdle(queue, result);
2259
2260 return result;
2261}
2262
2263void PreDeviceWaitIdle(
2264 VkDevice device)
2265{
2266 if(device == nullptr)
2267 {
2268 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2269 "vkDeviceWaitIdle parameter, VkDevice device, is null pointer");
2270 return;
2271 }
2272}
2273
2274void PostDeviceWaitIdle(
2275 VkDevice device,
2276 VkResult result)
2277{
2278 if(device == nullptr)
2279 {
2280 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2281 "vkDeviceWaitIdle parameter, VkDevice device, is null pointer");
2282 return;
2283 }
2284
2285 if(result != VK_SUCCESS)
2286 {
2287 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
2288 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2289 return;
2290 }
2291}
2292
2293VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2294 VkDevice device)
2295{
2296 PreDeviceWaitIdle(device);
2297 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2298
2299 PostDeviceWaitIdle(device, result);
2300
2301 return result;
2302}
2303
2304void PreAllocMemory(
2305 VkDevice device,
2306 const VkMemoryAllocInfo* pAllocInfo)
2307{
2308 if(device == nullptr)
2309 {
2310 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2311 "vkAllocMemory parameter, VkDevice device, is null pointer");
2312 return;
2313 }
2314
2315 if(pAllocInfo == nullptr)
2316 {
2317 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2318 "vkAllocMemory parameter, const VkMemoryAllocInfo* pAllocInfo, is null pointer");
2319 return;
2320 }
2321 if(pAllocInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2322 pAllocInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
2323 {
2324 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2325 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is unrecognized enumerator");
2326 return;
2327 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002328}
2329
2330void PostAllocMemory(
2331 VkDevice device,
2332 VkDeviceMemory* pMem,
2333 VkResult result)
2334{
2335 if(device == nullptr)
2336 {
2337 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2338 "vkAllocMemory parameter, VkDevice device, is null pointer");
2339 return;
2340 }
2341
2342 if(pMem == nullptr)
2343 {
2344 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2345 "vkAllocMemory parameter, VkDeviceMemory* pMem, is null pointer");
2346 return;
2347 }
2348 if((*pMem) == nullptr)
2349 {
2350 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2351 "vkAllocMemory parameter, VkDeviceMemory* pMem, is null pointer");
2352 return;
2353 }
2354
2355 if(result != VK_SUCCESS)
2356 {
2357 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
2358 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2359 return;
2360 }
2361}
2362
2363VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2364 VkDevice device,
2365 const VkMemoryAllocInfo* pAllocInfo,
2366 VkDeviceMemory* pMem)
2367{
2368 PreAllocMemory(device, pAllocInfo);
2369 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2370
2371 PostAllocMemory(device, pMem, result);
2372
2373 return result;
2374}
2375
2376void PreFreeMemory(
2377 VkDevice device)
2378{
2379 if(device == nullptr)
2380 {
2381 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2382 "vkFreeMemory parameter, VkDevice device, is null pointer");
2383 return;
2384 }
2385}
2386
2387void PostFreeMemory(
2388 VkDevice device,
2389 VkDeviceMemory mem,
2390 VkResult result)
2391{
2392 if(device == nullptr)
2393 {
2394 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2395 "vkFreeMemory parameter, VkDevice device, is null pointer");
2396 return;
2397 }
2398
2399 if(mem == nullptr)
2400 {
2401 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2402 "vkFreeMemory parameter, VkDeviceMemory mem, is null pointer");
2403 return;
2404 }
2405
2406 if(result != VK_SUCCESS)
2407 {
2408 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
2409 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2410 return;
2411 }
2412}
2413
2414VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2415 VkDevice device,
2416 VkDeviceMemory mem)
2417{
2418 PreFreeMemory(device);
2419 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2420
2421 PostFreeMemory(device, mem, result);
2422
2423 return result;
2424}
2425
2426void PreMapMemory(
2427 VkDevice device)
2428{
2429 if(device == nullptr)
2430 {
2431 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2432 "vkMapMemory parameter, VkDevice device, is null pointer");
2433 return;
2434 }
2435}
2436
2437void PostMapMemory(
2438 VkDevice device,
2439 VkDeviceMemory mem,
2440 VkDeviceSize offset,
2441 VkDeviceSize size,
2442 VkMemoryMapFlags flags,
2443 void** ppData,
2444 VkResult result)
2445{
2446 if(device == nullptr)
2447 {
2448 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2449 "vkMapMemory parameter, VkDevice device, is null pointer");
2450 return;
2451 }
2452
2453 if(mem == nullptr)
2454 {
2455 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2456 "vkMapMemory parameter, VkDeviceMemory mem, is null pointer");
2457 return;
2458 }
2459
2460
2461
2462
2463 if(ppData == nullptr)
2464 {
2465 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2466 "vkMapMemory parameter, void** ppData, is null pointer");
2467 return;
2468 }
2469
2470 if(result != VK_SUCCESS)
2471 {
2472 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
2473 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2474 return;
2475 }
2476}
2477
2478VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2479 VkDevice device,
2480 VkDeviceMemory mem,
2481 VkDeviceSize offset,
2482 VkDeviceSize size,
2483 VkMemoryMapFlags flags,
2484 void** ppData)
2485{
2486 PreMapMemory(device);
2487 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2488
2489 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2490
2491 return result;
2492}
2493
2494void PreUnmapMemory(
2495 VkDevice device)
2496{
2497 if(device == nullptr)
2498 {
2499 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2500 "vkUnmapMemory parameter, VkDevice device, is null pointer");
2501 return;
2502 }
2503}
2504
2505void PostUnmapMemory(
2506 VkDevice device,
2507 VkDeviceMemory mem,
2508 VkResult result)
2509{
2510 if(device == nullptr)
2511 {
2512 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2513 "vkUnmapMemory parameter, VkDevice device, is null pointer");
2514 return;
2515 }
2516
2517 if(mem == nullptr)
2518 {
2519 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2520 "vkUnmapMemory parameter, VkDeviceMemory mem, is null pointer");
2521 return;
2522 }
2523
2524 if(result != VK_SUCCESS)
2525 {
2526 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
2527 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2528 return;
2529 }
2530}
2531
2532VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2533 VkDevice device,
2534 VkDeviceMemory mem)
2535{
2536 PreUnmapMemory(device);
2537 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2538
2539 PostUnmapMemory(device, mem, result);
2540
2541 return result;
2542}
2543
2544void PreFlushMappedMemoryRanges(
2545 VkDevice device,
2546 const VkMappedMemoryRange* pMemRanges)
2547{
2548 if(device == nullptr)
2549 {
2550 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2551 "vkFlushMappedMemoryRanges parameter, VkDevice device, is null pointer");
2552 return;
2553 }
2554
2555 if(pMemRanges == nullptr)
2556 {
2557 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2558 "vkFlushMappedMemoryRanges parameter, const VkMappedMemoryRange* pMemRanges, is null pointer");
2559 return;
2560 }
2561 if(pMemRanges->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2562 pMemRanges->sType > VK_STRUCTURE_TYPE_END_RANGE)
2563 {
2564 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2565 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is unrecognized enumerator");
2566 return;
2567 }
2568 if(pMemRanges->mem == nullptr)
2569 {
2570 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2571 "vkFlushMappedMemoryRanges parameter, VkDeviceMemory pMemRanges->mem, is null pointer");
2572 return;
2573 }
2574}
2575
2576void PostFlushMappedMemoryRanges(
2577 VkDevice device,
2578 uint32_t memRangeCount,
2579 VkResult result)
2580{
2581 if(device == nullptr)
2582 {
2583 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2584 "vkFlushMappedMemoryRanges parameter, VkDevice device, is null pointer");
2585 return;
2586 }
2587
2588
2589 if(result != VK_SUCCESS)
2590 {
2591 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
2592 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2593 return;
2594 }
2595}
2596
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002597VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002598 VkDevice device,
2599 uint32_t memRangeCount,
2600 const VkMappedMemoryRange* pMemRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002601{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002602 PreFlushMappedMemoryRanges(device, pMemRanges);
2603 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002604
Jeremy Hayes99a96322015-06-26 12:48:09 -06002605 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2606
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002607 return result;
2608}
2609
Jeremy Hayes99a96322015-06-26 12:48:09 -06002610void PreInvalidateMappedMemoryRanges(
2611 VkDevice device,
2612 const VkMappedMemoryRange* pMemRanges)
2613{
2614 if(device == nullptr)
2615 {
2616 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2617 "vkInvalidateMappedMemoryRanges parameter, VkDevice device, is null pointer");
2618 return;
2619 }
2620
2621 if(pMemRanges == nullptr)
2622 {
2623 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2624 "vkInvalidateMappedMemoryRanges parameter, const VkMappedMemoryRange* pMemRanges, is null pointer");
2625 return;
2626 }
2627 if(pMemRanges->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2628 pMemRanges->sType > VK_STRUCTURE_TYPE_END_RANGE)
2629 {
2630 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2631 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is unrecognized enumerator");
2632 return;
2633 }
2634 if(pMemRanges->mem == nullptr)
2635 {
2636 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2637 "vkInvalidateMappedMemoryRanges parameter, VkDeviceMemory pMemRanges->mem, is null pointer");
2638 return;
2639 }
2640}
2641
2642void PostInvalidateMappedMemoryRanges(
2643 VkDevice device,
2644 uint32_t memRangeCount,
2645 VkResult result)
2646{
2647 if(device == nullptr)
2648 {
2649 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2650 "vkInvalidateMappedMemoryRanges parameter, VkDevice device, is null pointer");
2651 return;
2652 }
2653
2654
2655 if(result != VK_SUCCESS)
2656 {
2657 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
2658 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2659 return;
2660 }
2661}
2662
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002663VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002664 VkDevice device,
2665 uint32_t memRangeCount,
2666 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002667{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002668 PreInvalidateMappedMemoryRanges(device, pMemRanges);
2669 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002670
Jeremy Hayes99a96322015-06-26 12:48:09 -06002671 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2672
Tony Barbourb1250542015-04-16 19:23:13 -06002673 return result;
2674}
2675
Jeremy Hayes99a96322015-06-26 12:48:09 -06002676void PreDestroyObject(
2677 VkDevice device)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002678{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002679 if(device == nullptr)
2680 {
2681 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2682 "vkDestroyObject parameter, VkDevice device, is null pointer");
2683 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002684 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002685}
2686
2687void PostDestroyObject(
2688 VkDevice device,
2689 VkObjectType objType,
2690 VkObject object,
2691 VkResult result)
2692{
2693 if(device == nullptr)
2694 {
2695 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2696 "vkDestroyObject parameter, VkDevice device, is null pointer");
2697 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002698 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002699
Jeremy Hayes99a96322015-06-26 12:48:09 -06002700 if(objType < VK_OBJECT_TYPE_BEGIN_RANGE ||
2701 objType > VK_OBJECT_TYPE_END_RANGE)
2702 {
2703 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2704 "vkDestroyObject parameter, VkObjectType objType, is unrecognized enumerator");
2705 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002706 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002707
2708 if(object == nullptr)
2709 {
2710 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2711 "vkDestroyObject parameter, VkObject object, is null pointer");
2712 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002713 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002714
Jeremy Hayes99a96322015-06-26 12:48:09 -06002715 if(result != VK_SUCCESS)
2716 {
2717 std::string reason = "vkDestroyObject parameter, VkResult result, is " + EnumeratorString(result);
2718 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2719 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002720 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002721}
2722
2723VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(
2724 VkDevice device,
2725 VkObjectType objType,
2726 VkObject object)
2727{
2728 PreDestroyObject(device);
2729 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyObject(device, objType, object);
2730
2731 PostDestroyObject(device, objType, object, result);
2732
2733 return result;
2734}
2735
2736void PreBindObjectMemory(
2737 VkDevice device)
2738{
2739 if(device == nullptr)
2740 {
2741 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2742 "vkBindObjectMemory parameter, VkDevice device, is null pointer");
2743 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002744 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002745}
2746
Jeremy Hayes99a96322015-06-26 12:48:09 -06002747void PostBindObjectMemory(
2748 VkDevice device,
2749 VkObjectType objType,
2750 VkObject object,
2751 VkDeviceMemory mem,
2752 VkDeviceSize memOffset,
2753 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002754{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002755 if(device == nullptr)
2756 {
2757 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2758 "vkBindObjectMemory parameter, VkDevice device, is null pointer");
2759 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002760 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002761
2762 if(objType < VK_OBJECT_TYPE_BEGIN_RANGE ||
2763 objType > VK_OBJECT_TYPE_END_RANGE)
2764 {
2765 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2766 "vkBindObjectMemory parameter, VkObjectType objType, is unrecognized enumerator");
2767 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002768 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002769
Jeremy Hayes99a96322015-06-26 12:48:09 -06002770 if(object == nullptr)
2771 {
2772 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2773 "vkBindObjectMemory parameter, VkObject object, is null pointer");
2774 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002775 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002776
2777 if(mem == nullptr)
2778 {
2779 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2780 "vkBindObjectMemory parameter, VkDeviceMemory mem, is null pointer");
2781 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002782 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002783
2784
2785 if(result != VK_SUCCESS)
2786 {
2787 std::string reason = "vkBindObjectMemory parameter, VkResult result, is " + EnumeratorString(result);
2788 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2789 return;
2790 }
2791}
2792
2793VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(
2794 VkDevice device,
2795 VkObjectType objType,
2796 VkObject object,
2797 VkDeviceMemory mem,
2798 VkDeviceSize memOffset)
2799{
2800 PreBindObjectMemory(device);
2801 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindObjectMemory(device, objType, object, mem, memOffset);
2802
2803 PostBindObjectMemory(device, objType, object, mem, memOffset, result);
2804
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002805 return result;
2806}
2807
Jeremy Hayes99a96322015-06-26 12:48:09 -06002808void PreGetObjectMemoryRequirements(
2809 VkDevice device)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002810{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002811 if(device == nullptr)
2812 {
2813 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2814 "vkGetObjectMemoryRequirements parameter, VkDevice device, is null pointer");
2815 return;
2816 }
2817}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002818
Jeremy Hayes99a96322015-06-26 12:48:09 -06002819void PostGetObjectMemoryRequirements(
2820 VkDevice device,
2821 VkObjectType objType,
2822 VkObject object,
2823 VkMemoryRequirements* pMemoryRequirements,
2824 VkResult result)
2825{
2826 if(device == nullptr)
2827 {
2828 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2829 "vkGetObjectMemoryRequirements parameter, VkDevice device, is null pointer");
2830 return;
2831 }
2832
2833 if(objType < VK_OBJECT_TYPE_BEGIN_RANGE ||
2834 objType > VK_OBJECT_TYPE_END_RANGE)
2835 {
2836 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2837 "vkGetObjectMemoryRequirements parameter, VkObjectType objType, is unrecognized enumerator");
2838 return;
2839 }
2840
2841 if(object == nullptr)
2842 {
2843 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2844 "vkGetObjectMemoryRequirements parameter, VkObject object, is null pointer");
2845 return;
2846 }
2847
2848 if(pMemoryRequirements == nullptr)
2849 {
2850 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2851 "vkGetObjectMemoryRequirements parameter, VkMemoryRequirements* pMemoryRequirements, is null pointer");
2852 return;
2853 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002854
2855 if(result != VK_SUCCESS)
2856 {
2857 std::string reason = "vkGetObjectMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2858 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2859 return;
2860 }
2861}
2862
2863VK_LAYER_EXPORT VkResult VKAPI vkGetObjectMemoryRequirements(
2864 VkDevice device,
2865 VkObjectType objType,
2866 VkObject object,
2867 VkMemoryRequirements* pMemoryRequirements)
2868{
2869 PreGetObjectMemoryRequirements(device);
2870 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetObjectMemoryRequirements(device, objType, object, pMemoryRequirements);
2871
2872 PostGetObjectMemoryRequirements(device, objType, object, pMemoryRequirements, result);
2873
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002874 return result;
2875}
2876
Jeremy Hayes99a96322015-06-26 12:48:09 -06002877void PreQueueBindSparseBufferMemory(
2878 VkQueue queue)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002879{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002880 if(queue == nullptr)
2881 {
2882 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2883 "vkQueueBindSparseBufferMemory parameter, VkQueue queue, is null pointer");
2884 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002885 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002886}
2887
2888void PostQueueBindSparseBufferMemory(
2889 VkQueue queue,
2890 VkBuffer buffer,
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002891 uint32_t numBindings,
2892 const VkSparseMemoryBindInfo* pBindInfo,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002893 VkResult result)
2894{
2895 if(queue == nullptr)
2896 {
2897 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2898 "vkQueueBindSparseBufferMemory parameter, VkQueue queue, is null pointer");
2899 return;
2900 }
2901
2902 if(buffer == nullptr)
2903 {
2904 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2905 "vkQueueBindSparseBufferMemory parameter, VkBuffer buffer, is null pointer");
2906 return;
2907 }
2908
Jeremy Hayes99a96322015-06-26 12:48:09 -06002909 if(result != VK_SUCCESS)
2910 {
2911 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2912 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2913 return;
2914 }
2915}
2916
2917VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002918 VkQueue queue,
2919 VkBuffer buffer,
2920 uint32_t numBindings,
2921 const VkSparseMemoryBindInfo* pBindInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002922{
2923 PreQueueBindSparseBufferMemory(queue);
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002924 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002925
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002926 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002927
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002928 return result;
2929}
2930
Jeremy Hayes99a96322015-06-26 12:48:09 -06002931void PreQueueBindSparseImageMemory(
2932 VkQueue queue,
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002933 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002934{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002935 if(queue == nullptr)
2936 {
2937 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2938 "vkQueueBindSparseImageMemory parameter, VkQueue queue, is null pointer");
2939 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002940 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002941
2942 if(pBindInfo == nullptr)
2943 {
2944 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2945 "vkQueueBindSparseImageMemory parameter, const VkImageMemoryBindInfo* pBindInfo, is null pointer");
2946 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002947 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002948}
2949
2950void PostQueueBindSparseImageMemory(
2951 VkQueue queue,
2952 VkImage image,
2953 VkDeviceMemory mem,
2954 VkDeviceSize memOffset,
2955 VkResult result)
2956{
2957 if(queue == nullptr)
2958 {
2959 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2960 "vkQueueBindSparseImageMemory parameter, VkQueue queue, is null pointer");
2961 return;
2962 }
2963
2964 if(image == nullptr)
2965 {
2966 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2967 "vkQueueBindSparseImageMemory parameter, VkImage image, is null pointer");
2968 return;
2969 }
2970
2971 if(mem == nullptr)
2972 {
2973 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
2974 "vkQueueBindSparseImageMemory parameter, VkDeviceMemory mem, is null pointer");
2975 return;
2976 }
2977
2978
2979 if(result != VK_SUCCESS)
2980 {
2981 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2982 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
2983 return;
2984 }
2985}
2986
2987VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002988 VkQueue queue,
2989 VkImage image,
2990 uint32_t numBindings,
2991 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002992{
2993 PreQueueBindSparseImageMemory(queue, pBindInfo);
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002994 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002995
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002996 PostQueueBindSparseImageMemory(queue, image, pBindInfo->mem, pBindInfo->memOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002997
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002998 return result;
2999}
3000
Jeremy Hayes99a96322015-06-26 12:48:09 -06003001void PreCreateFence(
3002 VkDevice device,
3003 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003004{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003005 if(device == nullptr)
3006 {
3007 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3008 "vkCreateFence parameter, VkDevice device, is null pointer");
3009 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003010 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003011
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003012 if(pCreateInfo == nullptr)
3013 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003014 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3015 "vkCreateFence parameter, const VkFenceCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003016 return;
3017 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003018 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3019 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003020 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003021 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3022 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003023 return;
3024 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003025 if(!ValidateEnumerator((VkFenceCreateFlagBits)pCreateInfo->flags))
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003026 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003027 std::string reason = "vkCreateFence parameter, VkFenceCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkFenceCreateFlagBits)pCreateInfo->flags);
3028 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003029 return;
3030 }
3031}
3032
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033void PostCreateFence(
3034 VkDevice device,
3035 VkFence* pFence,
3036 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003037{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003038 if(device == nullptr)
3039 {
3040 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3041 "vkCreateFence parameter, VkDevice device, is null pointer");
3042 return;
3043 }
3044
3045 if(pFence == nullptr)
3046 {
3047 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3048 "vkCreateFence parameter, VkFence* pFence, is null pointer");
3049 return;
3050 }
3051 if((*pFence) == nullptr)
3052 {
3053 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3054 "vkCreateFence parameter, VkFence* pFence, is null pointer");
3055 return;
3056 }
3057
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06003058 if(result != VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003059 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003060 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
3061 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3062 return;
3063 }
3064}
3065
3066VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3067 VkDevice device,
3068 const VkFenceCreateInfo* pCreateInfo,
3069 VkFence* pFence)
3070{
3071 PreCreateFence(device, pCreateInfo);
3072 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3073
3074 PostCreateFence(device, pFence, result);
3075
3076 return result;
3077}
3078
3079void PreResetFences(
3080 VkDevice device,
3081 const VkFence* pFences)
3082{
3083 if(device == nullptr)
3084 {
3085 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3086 "vkResetFences parameter, VkDevice device, is null pointer");
3087 return;
3088 }
3089
3090 if(pFences == nullptr)
3091 {
3092 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3093 "vkResetFences parameter, const VkFence* pFences, is null pointer");
3094 return;
3095 }
3096 if((*pFences) == nullptr)
3097 {
3098 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3099 "vkResetFences parameter, const VkFence* pFences, is null pointer");
3100 return;
3101 }
3102}
3103
3104void PostResetFences(
3105 VkDevice device,
3106 uint32_t fenceCount,
3107 VkResult result)
3108{
3109 if(device == nullptr)
3110 {
3111 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3112 "vkResetFences parameter, VkDevice device, is null pointer");
3113 return;
3114 }
3115
3116
3117 if(result != VK_SUCCESS)
3118 {
3119 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
3120 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3121 return;
3122 }
3123}
3124
3125VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3126 VkDevice device,
3127 uint32_t fenceCount,
3128 const VkFence* pFences)
3129{
3130 PreResetFences(device, pFences);
3131 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3132
3133 PostResetFences(device, fenceCount, result);
3134
3135 return result;
3136}
3137
3138void PreGetFenceStatus(
3139 VkDevice device)
3140{
3141 if(device == nullptr)
3142 {
3143 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3144 "vkGetFenceStatus parameter, VkDevice device, is null pointer");
3145 return;
3146 }
3147}
3148
3149void PostGetFenceStatus(
3150 VkDevice device,
3151 VkFence fence,
3152 VkResult result)
3153{
3154 if(device == nullptr)
3155 {
3156 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3157 "vkGetFenceStatus parameter, VkDevice device, is null pointer");
3158 return;
3159 }
3160
3161 if(fence == nullptr)
3162 {
3163 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3164 "vkGetFenceStatus parameter, VkFence fence, is null pointer");
3165 return;
3166 }
3167
3168 if(result != VK_SUCCESS)
3169 {
3170 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
3171 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3172 return;
3173 }
3174}
3175
3176VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3177 VkDevice device,
3178 VkFence fence)
3179{
3180 PreGetFenceStatus(device);
3181 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3182
3183 PostGetFenceStatus(device, fence, result);
3184
3185 return result;
3186}
3187
3188void PreWaitForFences(
3189 VkDevice device,
3190 const VkFence* pFences)
3191{
3192 if(device == nullptr)
3193 {
3194 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3195 "vkWaitForFences parameter, VkDevice device, is null pointer");
3196 return;
3197 }
3198
3199 if(pFences == nullptr)
3200 {
3201 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3202 "vkWaitForFences parameter, const VkFence* pFences, is null pointer");
3203 return;
3204 }
3205 if((*pFences) == nullptr)
3206 {
3207 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3208 "vkWaitForFences parameter, const VkFence* pFences, is null pointer");
3209 return;
3210 }
3211}
3212
3213void PostWaitForFences(
3214 VkDevice device,
3215 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06003216 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003217 uint64_t timeout,
3218 VkResult result)
3219{
3220 if(device == nullptr)
3221 {
3222 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3223 "vkWaitForFences parameter, VkDevice device, is null pointer");
3224 return;
3225 }
3226
3227
3228
3229
3230 if(result != VK_SUCCESS)
3231 {
3232 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
3233 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3234 return;
3235 }
3236}
3237
3238VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3239 VkDevice device,
3240 uint32_t fenceCount,
3241 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06003242 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003243 uint64_t timeout)
3244{
3245 PreWaitForFences(device, pFences);
3246 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3247
3248 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3249
3250 return result;
3251}
3252
3253void PreCreateSemaphore(
3254 VkDevice device,
3255 const VkSemaphoreCreateInfo* pCreateInfo)
3256{
3257 if(device == nullptr)
3258 {
3259 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3260 "vkCreateSemaphore parameter, VkDevice device, is null pointer");
3261 return;
3262 }
3263
3264 if(pCreateInfo == nullptr)
3265 {
3266 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3267 "vkCreateSemaphore parameter, const VkSemaphoreCreateInfo* pCreateInfo, is null pointer");
3268 return;
3269 }
3270 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3271 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3272 {
3273 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3274 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
3275 return;
3276 }
3277}
3278
3279void PostCreateSemaphore(
3280 VkDevice device,
3281 VkSemaphore* pSemaphore,
3282 VkResult result)
3283{
3284 if(device == nullptr)
3285 {
3286 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3287 "vkCreateSemaphore parameter, VkDevice device, is null pointer");
3288 return;
3289 }
3290
3291 if(pSemaphore == nullptr)
3292 {
3293 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3294 "vkCreateSemaphore parameter, VkSemaphore* pSemaphore, is null pointer");
3295 return;
3296 }
3297 if((*pSemaphore) == nullptr)
3298 {
3299 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3300 "vkCreateSemaphore parameter, VkSemaphore* pSemaphore, is null pointer");
3301 return;
3302 }
3303
3304 if(result != VK_SUCCESS)
3305 {
3306 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
3307 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3308 return;
3309 }
3310}
3311
3312VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3313 VkDevice device,
3314 const VkSemaphoreCreateInfo* pCreateInfo,
3315 VkSemaphore* pSemaphore)
3316{
3317 PreCreateSemaphore(device, pCreateInfo);
3318 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3319
3320 PostCreateSemaphore(device, pSemaphore, result);
3321
3322 return result;
3323}
3324
3325void PreQueueSignalSemaphore(
3326 VkQueue queue)
3327{
3328 if(queue == nullptr)
3329 {
3330 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3331 "vkQueueSignalSemaphore parameter, VkQueue queue, is null pointer");
3332 return;
3333 }
3334}
3335
3336void PostQueueSignalSemaphore(
3337 VkQueue queue,
3338 VkSemaphore semaphore,
3339 VkResult result)
3340{
3341 if(queue == nullptr)
3342 {
3343 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3344 "vkQueueSignalSemaphore parameter, VkQueue queue, is null pointer");
3345 return;
3346 }
3347
3348 if(semaphore == nullptr)
3349 {
3350 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3351 "vkQueueSignalSemaphore parameter, VkSemaphore semaphore, is null pointer");
3352 return;
3353 }
3354
3355 if(result != VK_SUCCESS)
3356 {
3357 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
3358 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3359 return;
3360 }
3361}
3362
3363VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3364 VkQueue queue,
3365 VkSemaphore semaphore)
3366{
3367 PreQueueSignalSemaphore(queue);
3368 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3369
3370 PostQueueSignalSemaphore(queue, semaphore, result);
3371
3372 return result;
3373}
3374
3375void PreQueueWaitSemaphore(
3376 VkQueue queue)
3377{
3378 if(queue == nullptr)
3379 {
3380 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3381 "vkQueueWaitSemaphore parameter, VkQueue queue, is null pointer");
3382 return;
3383 }
3384}
3385
3386void PostQueueWaitSemaphore(
3387 VkQueue queue,
3388 VkSemaphore semaphore,
3389 VkResult result)
3390{
3391 if(queue == nullptr)
3392 {
3393 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3394 "vkQueueWaitSemaphore parameter, VkQueue queue, is null pointer");
3395 return;
3396 }
3397
3398 if(semaphore == nullptr)
3399 {
3400 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3401 "vkQueueWaitSemaphore parameter, VkSemaphore semaphore, is null pointer");
3402 return;
3403 }
3404
3405 if(result != VK_SUCCESS)
3406 {
3407 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
3408 log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3409 return;
3410 }
3411}
3412
3413VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3414 VkQueue queue,
3415 VkSemaphore semaphore)
3416{
3417 PreQueueWaitSemaphore(queue);
3418 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3419
3420 PostQueueWaitSemaphore(queue, semaphore, result);
3421
3422 return result;
3423}
3424
3425void PreCreateEvent(
3426 VkDevice device,
3427 const VkEventCreateInfo* pCreateInfo)
3428{
3429 if(device == nullptr)
3430 {
3431 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3432 "vkCreateEvent parameter, VkDevice device, is null pointer");
3433 return;
3434 }
3435
3436 if(pCreateInfo == nullptr)
3437 {
3438 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3439 "vkCreateEvent parameter, const VkEventCreateInfo* pCreateInfo, is null pointer");
3440 return;
3441 }
3442 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3443 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3444 {
3445 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3446 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
3447 return;
3448 }
3449}
3450
3451void PostCreateEvent(
3452 VkDevice device,
3453 VkEvent* pEvent,
3454 VkResult result)
3455{
3456 if(device == nullptr)
3457 {
3458 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3459 "vkCreateEvent parameter, VkDevice device, is null pointer");
3460 return;
3461 }
3462
3463 if(pEvent == nullptr)
3464 {
3465 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3466 "vkCreateEvent parameter, VkEvent* pEvent, is null pointer");
3467 return;
3468 }
3469 if((*pEvent) == nullptr)
3470 {
3471 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3472 "vkCreateEvent parameter, VkEvent* pEvent, is null pointer");
3473 return;
3474 }
3475
3476 if(result != VK_SUCCESS)
3477 {
3478 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
3479 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3480 return;
3481 }
3482}
3483
3484VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3485 VkDevice device,
3486 const VkEventCreateInfo* pCreateInfo,
3487 VkEvent* pEvent)
3488{
3489 PreCreateEvent(device, pCreateInfo);
3490 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3491
3492 PostCreateEvent(device, pEvent, result);
3493
3494 return result;
3495}
3496
3497void PreGetEventStatus(
3498 VkDevice device)
3499{
3500 if(device == nullptr)
3501 {
3502 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3503 "vkGetEventStatus parameter, VkDevice device, is null pointer");
3504 return;
3505 }
3506}
3507
3508void PostGetEventStatus(
3509 VkDevice device,
3510 VkEvent event,
3511 VkResult result)
3512{
3513 if(device == nullptr)
3514 {
3515 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3516 "vkGetEventStatus parameter, VkDevice device, is null pointer");
3517 return;
3518 }
3519
3520 if(event == nullptr)
3521 {
3522 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3523 "vkGetEventStatus parameter, VkEvent event, is null pointer");
3524 return;
3525 }
3526
3527 if(result != VK_SUCCESS)
3528 {
3529 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
3530 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3531 return;
3532 }
3533}
3534
3535VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3536 VkDevice device,
3537 VkEvent event)
3538{
3539 PreGetEventStatus(device);
3540 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3541
3542 PostGetEventStatus(device, event, result);
3543
3544 return result;
3545}
3546
3547void PreSetEvent(
3548 VkDevice device)
3549{
3550 if(device == nullptr)
3551 {
3552 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3553 "vkSetEvent parameter, VkDevice device, is null pointer");
3554 return;
3555 }
3556}
3557
3558void PostSetEvent(
3559 VkDevice device,
3560 VkEvent event,
3561 VkResult result)
3562{
3563 if(device == nullptr)
3564 {
3565 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3566 "vkSetEvent parameter, VkDevice device, is null pointer");
3567 return;
3568 }
3569
3570 if(event == nullptr)
3571 {
3572 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3573 "vkSetEvent parameter, VkEvent event, is null pointer");
3574 return;
3575 }
3576
3577 if(result != VK_SUCCESS)
3578 {
3579 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
3580 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3581 return;
3582 }
3583}
3584
3585VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3586 VkDevice device,
3587 VkEvent event)
3588{
3589 PreSetEvent(device);
3590 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3591
3592 PostSetEvent(device, event, result);
3593
3594 return result;
3595}
3596
3597void PreResetEvent(
3598 VkDevice device)
3599{
3600 if(device == nullptr)
3601 {
3602 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3603 "vkResetEvent parameter, VkDevice device, is null pointer");
3604 return;
3605 }
3606}
3607
3608void PostResetEvent(
3609 VkDevice device,
3610 VkEvent event,
3611 VkResult result)
3612{
3613 if(device == nullptr)
3614 {
3615 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3616 "vkResetEvent parameter, VkDevice device, is null pointer");
3617 return;
3618 }
3619
3620 if(event == nullptr)
3621 {
3622 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3623 "vkResetEvent parameter, VkEvent event, is null pointer");
3624 return;
3625 }
3626
3627 if(result != VK_SUCCESS)
3628 {
3629 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
3630 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3631 return;
3632 }
3633}
3634
3635VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3636 VkDevice device,
3637 VkEvent event)
3638{
3639 PreResetEvent(device);
3640 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3641
3642 PostResetEvent(device, event, result);
3643
3644 return result;
3645}
3646
3647void PreCreateQueryPool(
3648 VkDevice device,
3649 const VkQueryPoolCreateInfo* pCreateInfo)
3650{
3651 if(device == nullptr)
3652 {
3653 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3654 "vkCreateQueryPool parameter, VkDevice device, is null pointer");
3655 return;
3656 }
3657
3658 if(pCreateInfo == nullptr)
3659 {
3660 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3661 "vkCreateQueryPool parameter, const VkQueryPoolCreateInfo* pCreateInfo, is null pointer");
3662 return;
3663 }
3664 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3665 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3666 {
3667 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3668 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
3669 return;
3670 }
3671 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3672 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3673 {
3674 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3675 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is unrecognized enumerator");
3676 return;
3677 }
3678 if(!ValidateEnumerator((VkQueryPipelineStatisticFlagBits)pCreateInfo->pipelineStatistics))
3679 {
3680 std::string reason = "vkCreateQueryPool parameter, VkQueryPipelineStatisticFlags pCreateInfo->pipelineStatistics, is " + EnumeratorString((VkQueryPipelineStatisticFlagBits)pCreateInfo->pipelineStatistics);
3681 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3682 return;
3683 }
3684}
3685
3686void PostCreateQueryPool(
3687 VkDevice device,
3688 VkQueryPool* pQueryPool,
3689 VkResult result)
3690{
3691 if(device == nullptr)
3692 {
3693 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3694 "vkCreateQueryPool parameter, VkDevice device, is null pointer");
3695 return;
3696 }
3697
3698 if(pQueryPool == nullptr)
3699 {
3700 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3701 "vkCreateQueryPool parameter, VkQueryPool* pQueryPool, is null pointer");
3702 return;
3703 }
3704 if((*pQueryPool) == nullptr)
3705 {
3706 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3707 "vkCreateQueryPool parameter, VkQueryPool* pQueryPool, is null pointer");
3708 return;
3709 }
3710
3711 if(result != VK_SUCCESS)
3712 {
3713 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3714 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3715 return;
3716 }
3717}
3718
3719VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3720 VkDevice device,
3721 const VkQueryPoolCreateInfo* pCreateInfo,
3722 VkQueryPool* pQueryPool)
3723{
3724 PreCreateQueryPool(device, pCreateInfo);
3725 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3726
3727 PostCreateQueryPool(device, pQueryPool, result);
3728
3729 return result;
3730}
3731
3732void PreGetQueryPoolResults(
3733 VkDevice device)
3734{
3735 if(device == nullptr)
3736 {
3737 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3738 "vkGetQueryPoolResults parameter, VkDevice device, is null pointer");
3739 return;
3740 }
3741}
3742
3743void PostGetQueryPoolResults(
3744 VkDevice device,
3745 VkQueryPool queryPool,
3746 uint32_t startQuery,
3747 uint32_t queryCount,
3748 size_t* pDataSize,
3749 void* pData,
3750 VkQueryResultFlags flags,
3751 VkResult result)
3752{
3753 if(device == nullptr)
3754 {
3755 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3756 "vkGetQueryPoolResults parameter, VkDevice device, is null pointer");
3757 return;
3758 }
3759
3760 if(queryPool == nullptr)
3761 {
3762 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3763 "vkGetQueryPoolResults parameter, VkQueryPool queryPool, is null pointer");
3764 return;
3765 }
3766
3767
3768
3769 if(pDataSize == nullptr)
3770 {
3771 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3772 "vkGetQueryPoolResults parameter, size_t* pDataSize, is null pointer");
3773 return;
3774 }
3775
3776 if(pData == nullptr)
3777 {
3778 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3779 "vkGetQueryPoolResults parameter, void* pData, is null pointer");
3780 return;
3781 }
3782
3783 if(!ValidateEnumerator((VkQueryResultFlagBits)flags))
3784 {
3785 std::string reason = "vkGetQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags);
3786 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3787 return;
3788 }
3789
3790 if(result != VK_SUCCESS)
3791 {
3792 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
3793 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3794 return;
3795 }
3796}
3797
3798VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3799 VkDevice device,
3800 VkQueryPool queryPool,
3801 uint32_t startQuery,
3802 uint32_t queryCount,
3803 size_t* pDataSize,
3804 void* pData,
3805 VkQueryResultFlags flags)
3806{
3807 PreGetQueryPoolResults(device);
3808 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3809
3810 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3811
3812 return result;
3813}
3814
3815void PreCreateBuffer(
3816 VkDevice device,
3817 const VkBufferCreateInfo* pCreateInfo)
3818{
3819 if(device == nullptr)
3820 {
3821 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3822 "vkCreateBuffer parameter, VkDevice device, is null pointer");
3823 return;
3824 }
3825
3826 if(pCreateInfo == nullptr)
3827 {
3828 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3829 "vkCreateBuffer parameter, const VkBufferCreateInfo* pCreateInfo, is null pointer");
3830 return;
3831 }
3832 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3833 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3834 {
3835 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3836 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
3837 return;
3838 }
3839 if(!ValidateEnumerator((VkBufferUsageFlagBits)pCreateInfo->usage))
3840 {
3841 std::string reason = "vkCreateBuffer parameter, VkBufferUsageFlags pCreateInfo->usage, is " + EnumeratorString((VkBufferUsageFlagBits)pCreateInfo->usage);
3842 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3843 return;
3844 }
3845 if(!ValidateEnumerator((VkBufferCreateFlagBits)pCreateInfo->flags))
3846 {
3847 std::string reason = "vkCreateBuffer parameter, VkBufferCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkBufferCreateFlagBits)pCreateInfo->flags);
3848 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3849 return;
3850 }
3851}
3852
3853void PostCreateBuffer(
3854 VkDevice device,
3855 VkBuffer* pBuffer,
3856 VkResult result)
3857{
3858 if(device == nullptr)
3859 {
3860 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3861 "vkCreateBuffer parameter, VkDevice device, is null pointer");
3862 return;
3863 }
3864
3865 if(pBuffer == nullptr)
3866 {
3867 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3868 "vkCreateBuffer parameter, VkBuffer* pBuffer, is null pointer");
3869 return;
3870 }
3871 if((*pBuffer) == nullptr)
3872 {
3873 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3874 "vkCreateBuffer parameter, VkBuffer* pBuffer, is null pointer");
3875 return;
3876 }
3877
3878 if(result != VK_SUCCESS)
3879 {
3880 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
3881 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3882 return;
3883 }
3884}
3885
3886VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3887 VkDevice device,
3888 const VkBufferCreateInfo* pCreateInfo,
3889 VkBuffer* pBuffer)
3890{
3891 PreCreateBuffer(device, pCreateInfo);
3892 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3893
3894 PostCreateBuffer(device, pBuffer, result);
3895
3896 return result;
3897}
3898
3899void PreCreateBufferView(
3900 VkDevice device,
3901 const VkBufferViewCreateInfo* pCreateInfo)
3902{
3903 if(device == nullptr)
3904 {
3905 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3906 "vkCreateBufferView parameter, VkDevice device, is null pointer");
3907 return;
3908 }
3909
3910 if(pCreateInfo == nullptr)
3911 {
3912 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3913 "vkCreateBufferView parameter, const VkBufferViewCreateInfo* pCreateInfo, is null pointer");
3914 return;
3915 }
3916 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3917 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3918 {
3919 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3920 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
3921 return;
3922 }
3923 if(pCreateInfo->buffer == nullptr)
3924 {
3925 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3926 "vkCreateBufferView parameter, VkBuffer pCreateInfo->buffer, is null pointer");
3927 return;
3928 }
3929 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3930 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3931 {
3932 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3933 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is unrecognized enumerator");
3934 return;
3935 }
3936 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3937 pCreateInfo->format > VK_FORMAT_END_RANGE)
3938 {
3939 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3940 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
3941 return;
3942 }
3943}
3944
3945void PostCreateBufferView(
3946 VkDevice device,
3947 VkBufferView* pView,
3948 VkResult result)
3949{
3950 if(device == nullptr)
3951 {
3952 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3953 "vkCreateBufferView parameter, VkDevice device, is null pointer");
3954 return;
3955 }
3956
3957 if(pView == nullptr)
3958 {
3959 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3960 "vkCreateBufferView parameter, VkBufferView* pView, is null pointer");
3961 return;
3962 }
3963 if((*pView) == nullptr)
3964 {
3965 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3966 "vkCreateBufferView parameter, VkBufferView* pView, is null pointer");
3967 return;
3968 }
3969
3970 if(result != VK_SUCCESS)
3971 {
3972 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
3973 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
3974 return;
3975 }
3976}
3977
3978VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3979 VkDevice device,
3980 const VkBufferViewCreateInfo* pCreateInfo,
3981 VkBufferView* pView)
3982{
3983 PreCreateBufferView(device, pCreateInfo);
3984 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3985
3986 PostCreateBufferView(device, pView, result);
3987
3988 return result;
3989}
3990
3991void PreCreateImage(
3992 VkDevice device,
3993 const VkImageCreateInfo* pCreateInfo)
3994{
3995 if(device == nullptr)
3996 {
3997 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
3998 "vkCreateImage parameter, VkDevice device, is null pointer");
3999 return;
4000 }
4001
4002 if(pCreateInfo == nullptr)
4003 {
4004 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4005 "vkCreateImage parameter, const VkImageCreateInfo* pCreateInfo, is null pointer");
4006 return;
4007 }
4008 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4009 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4010 {
4011 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4012 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4013 return;
4014 }
4015 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
4016 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
4017 {
4018 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4019 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is unrecognized enumerator");
4020 return;
4021 }
4022 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4023 pCreateInfo->format > VK_FORMAT_END_RANGE)
4024 {
4025 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4026 "vkCreateImage parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
4027 return;
4028 }
4029 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
4030 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
4031 {
4032 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4033 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is unrecognized enumerator");
4034 return;
4035 }
4036 if(!ValidateEnumerator((VkImageUsageFlagBits)pCreateInfo->usage))
4037 {
4038 std::string reason = "vkCreateImage parameter, VkImageUsageFlags pCreateInfo->usage, is " + EnumeratorString((VkImageUsageFlagBits)pCreateInfo->usage);
4039 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
4040 return;
4041 }
4042 if(!ValidateEnumerator((VkImageCreateFlagBits)pCreateInfo->flags))
4043 {
4044 std::string reason = "vkCreateImage parameter, VkImageCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkImageCreateFlagBits)pCreateInfo->flags);
4045 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
4046 return;
4047 }
4048}
4049
4050void PostCreateImage(
4051 VkDevice device,
4052 VkImage* pImage,
4053 VkResult result)
4054{
4055 if(device == nullptr)
4056 {
4057 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4058 "vkCreateImage parameter, VkDevice device, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004059 return;
4060 }
4061
4062 if(pImage == nullptr)
4063 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004064 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4065 "vkCreateImage parameter, VkImage* pImage, is null pointer");
4066 return;
4067 }
4068 if((*pImage) == nullptr)
4069 {
4070 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4071 "vkCreateImage parameter, VkImage* pImage, is null pointer");
4072 return;
4073 }
4074
4075 if(result != VK_SUCCESS)
4076 {
4077 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
4078 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004079 return;
4080 }
4081}
4082
Jeremy Hayes99a96322015-06-26 12:48:09 -06004083VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
4084 VkDevice device,
4085 const VkImageCreateInfo* pCreateInfo,
4086 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004087{
4088 PreCreateImage(device, pCreateInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004089 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
4090
4091 PostCreateImage(device, pImage, result);
4092
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004093 return result;
4094}
4095
Jeremy Hayes99a96322015-06-26 12:48:09 -06004096void PreGetImageSubresourceLayout(
4097 VkDevice device,
4098 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004099{
4100 if(device == nullptr)
4101 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004102 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4103 "vkGetImageSubresourceLayout parameter, VkDevice device, is null pointer");
4104 return;
4105 }
4106
4107 if(pSubresource == nullptr)
4108 {
4109 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4110 "vkGetImageSubresourceLayout parameter, const VkImageSubresource* pSubresource, is null pointer");
4111 return;
4112 }
4113 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4114 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4115 {
4116 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4117 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is unrecognized enumerator");
4118 return;
4119 }
4120}
4121
4122void PostGetImageSubresourceLayout(
4123 VkDevice device,
4124 VkImage image,
4125 VkSubresourceLayout* pLayout,
4126 VkResult result)
4127{
4128 if(device == nullptr)
4129 {
4130 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4131 "vkGetImageSubresourceLayout parameter, VkDevice device, is null pointer");
4132 return;
4133 }
4134
4135 if(image == nullptr)
4136 {
4137 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4138 "vkGetImageSubresourceLayout parameter, VkImage image, is null pointer");
4139 return;
4140 }
4141
4142 if(pLayout == nullptr)
4143 {
4144 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4145 "vkGetImageSubresourceLayout parameter, VkSubresourceLayout* pLayout, is null pointer");
4146 return;
4147 }
4148
4149 if(result != VK_SUCCESS)
4150 {
4151 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
4152 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
4153 return;
4154 }
4155}
4156
4157VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4158 VkDevice device,
4159 VkImage image,
4160 const VkImageSubresource* pSubresource,
4161 VkSubresourceLayout* pLayout)
4162{
4163 PreGetImageSubresourceLayout(device, pSubresource);
4164 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4165
4166 PostGetImageSubresourceLayout(device, image, pLayout, result);
4167
4168 return result;
4169}
4170
4171void PreCreateImageView(
4172 VkDevice device,
4173 const VkImageViewCreateInfo* pCreateInfo)
4174{
4175 if(device == nullptr)
4176 {
4177 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4178 "vkCreateImageView parameter, VkDevice device, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004179 return;
4180 }
4181
4182 if(pCreateInfo == nullptr)
4183 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004184 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4185 "vkCreateImageView parameter, const VkImageViewCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004186 return;
4187 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004188 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4189 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004190 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004191 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4192 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4193 return;
4194 }
4195 if(pCreateInfo->image == nullptr)
4196 {
4197 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4198 "vkCreateImageView parameter, VkImage pCreateInfo->image, is null pointer");
4199 return;
4200 }
4201 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4202 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4203 {
4204 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4205 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is unrecognized enumerator");
4206 return;
4207 }
4208 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4209 pCreateInfo->format > VK_FORMAT_END_RANGE)
4210 {
4211 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4212 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
4213 return;
4214 }
4215 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4216 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4217 {
4218 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4219 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is unrecognized enumerator");
4220 return;
4221 }
4222 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4223 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4224 {
4225 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4226 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is unrecognized enumerator");
4227 return;
4228 }
4229 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4230 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4231 {
4232 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4233 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is unrecognized enumerator");
4234 return;
4235 }
4236 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4237 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4238 {
4239 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4240 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is unrecognized enumerator");
4241 return;
4242 }
4243 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4244 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4245 {
4246 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4247 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is unrecognized enumerator");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004248 return;
4249 }
4250}
4251
Jeremy Hayes99a96322015-06-26 12:48:09 -06004252void PostCreateImageView(
4253 VkDevice device,
4254 VkImageView* pView,
4255 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004256{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004257 if(device == nullptr)
4258 {
4259 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4260 "vkCreateImageView parameter, VkDevice device, is null pointer");
4261 return;
4262 }
4263
4264 if(pView == nullptr)
4265 {
4266 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4267 "vkCreateImageView parameter, VkImageView* pView, is null pointer");
4268 return;
4269 }
4270 if((*pView) == nullptr)
4271 {
4272 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4273 "vkCreateImageView parameter, VkImageView* pView, is null pointer");
4274 return;
4275 }
4276
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06004277 if(result != VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004278 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004279 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
4280 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
4281 return;
4282 }
4283}
4284
4285VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4286 VkDevice device,
4287 const VkImageViewCreateInfo* pCreateInfo,
4288 VkImageView* pView)
4289{
4290 PreCreateImageView(device, pCreateInfo);
4291 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4292
4293 PostCreateImageView(device, pView, result);
4294
4295 return result;
4296}
4297
4298void PreCreateColorAttachmentView(
4299 VkDevice device,
4300 const VkColorAttachmentViewCreateInfo* pCreateInfo)
4301{
4302 if(device == nullptr)
4303 {
4304 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4305 "vkCreateColorAttachmentView parameter, VkDevice device, is null pointer");
4306 return;
4307 }
4308
4309 if(pCreateInfo == nullptr)
4310 {
4311 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4312 "vkCreateColorAttachmentView parameter, const VkColorAttachmentViewCreateInfo* pCreateInfo, is null pointer");
4313 return;
4314 }
4315 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4316 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4317 {
4318 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4319 "vkCreateColorAttachmentView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4320 return;
4321 }
4322 if(pCreateInfo->image == nullptr)
4323 {
4324 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4325 "vkCreateColorAttachmentView parameter, VkImage pCreateInfo->image, is null pointer");
4326 return;
4327 }
4328 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4329 pCreateInfo->format > VK_FORMAT_END_RANGE)
4330 {
4331 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4332 "vkCreateColorAttachmentView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
4333 return;
4334 }
4335 if(pCreateInfo->msaaResolveImage == nullptr)
4336 {
4337 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4338 "vkCreateColorAttachmentView parameter, VkImage pCreateInfo->msaaResolveImage, is null pointer");
4339 return;
4340 }
4341 if(pCreateInfo->msaaResolveSubResource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4342 pCreateInfo->msaaResolveSubResource.aspect > VK_IMAGE_ASPECT_END_RANGE)
4343 {
4344 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4345 "vkCreateColorAttachmentView parameter, VkImageAspect pCreateInfo->msaaResolveSubResource.aspect, is unrecognized enumerator");
4346 return;
4347 }
4348}
4349
4350void PostCreateColorAttachmentView(
4351 VkDevice device,
4352 VkColorAttachmentView* pView,
4353 VkResult result)
4354{
4355 if(device == nullptr)
4356 {
4357 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4358 "vkCreateColorAttachmentView parameter, VkDevice device, is null pointer");
4359 return;
4360 }
4361
4362 if(pView == nullptr)
4363 {
4364 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4365 "vkCreateColorAttachmentView parameter, VkColorAttachmentView* pView, is null pointer");
4366 return;
4367 }
4368 if((*pView) == nullptr)
4369 {
4370 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4371 "vkCreateColorAttachmentView parameter, VkColorAttachmentView* pView, is null pointer");
4372 return;
4373 }
4374
4375 if(result != VK_SUCCESS)
4376 {
4377 std::string reason = "vkCreateColorAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4378 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
4379 return;
4380 }
4381}
4382
4383VK_LAYER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(
4384 VkDevice device,
4385 const VkColorAttachmentViewCreateInfo* pCreateInfo,
4386 VkColorAttachmentView* pView)
4387{
4388 PreCreateColorAttachmentView(device, pCreateInfo);
4389 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateColorAttachmentView(device, pCreateInfo, pView);
4390
4391 PostCreateColorAttachmentView(device, pView, result);
4392
4393 return result;
4394}
4395
4396void PreCreateDepthStencilView(
4397 VkDevice device,
4398 const VkDepthStencilViewCreateInfo* pCreateInfo)
4399{
4400 if(device == nullptr)
4401 {
4402 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4403 "vkCreateDepthStencilView parameter, VkDevice device, is null pointer");
4404 return;
4405 }
4406
4407 if(pCreateInfo == nullptr)
4408 {
4409 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4410 "vkCreateDepthStencilView parameter, const VkDepthStencilViewCreateInfo* pCreateInfo, is null pointer");
4411 return;
4412 }
4413 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4414 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4415 {
4416 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4417 "vkCreateDepthStencilView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4418 return;
4419 }
4420 if(pCreateInfo->image == nullptr)
4421 {
4422 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4423 "vkCreateDepthStencilView parameter, VkImage pCreateInfo->image, is null pointer");
4424 return;
4425 }
4426 if(!ValidateEnumerator((VkDepthStencilViewCreateFlagBits)pCreateInfo->flags))
4427 {
4428 std::string reason = "vkCreateDepthStencilView parameter, VkDepthStencilViewCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkDepthStencilViewCreateFlagBits)pCreateInfo->flags);
4429 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
4430 return;
4431 }
4432}
4433
4434void PostCreateDepthStencilView(
4435 VkDevice device,
4436 VkDepthStencilView* pView,
4437 VkResult result)
4438{
4439 if(device == nullptr)
4440 {
4441 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4442 "vkCreateDepthStencilView parameter, VkDevice device, is null pointer");
4443 return;
4444 }
4445
4446 if(pView == nullptr)
4447 {
4448 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4449 "vkCreateDepthStencilView parameter, VkDepthStencilView* pView, is null pointer");
4450 return;
4451 }
4452 if((*pView) == nullptr)
4453 {
4454 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4455 "vkCreateDepthStencilView parameter, VkDepthStencilView* pView, is null pointer");
4456 return;
4457 }
4458
4459 if(result != VK_SUCCESS)
4460 {
4461 std::string reason = "vkCreateDepthStencilView parameter, VkResult result, is " + EnumeratorString(result);
4462 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
4463 return;
4464 }
4465}
4466
4467VK_LAYER_EXPORT VkResult VKAPI vkCreateDepthStencilView(
4468 VkDevice device,
4469 const VkDepthStencilViewCreateInfo* pCreateInfo,
4470 VkDepthStencilView* pView)
4471{
4472 PreCreateDepthStencilView(device, pCreateInfo);
4473 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDepthStencilView(device, pCreateInfo, pView);
4474
4475 PostCreateDepthStencilView(device, pView, result);
4476
4477 return result;
4478}
4479
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004480void PreCreateShaderModule(
4481 VkDevice device,
4482 const VkShaderModuleCreateInfo* pCreateInfo)
4483{
4484 if(device == nullptr)
4485 {
4486 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4487 "vkCreateShaderModule parameter, VkDevice device, is null pointer");
4488 return;
4489 }
4490
4491 if(pCreateInfo == nullptr)
4492 {
4493 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4494 "vkCreateShaderModule parameter, const VkShaderCreateInfo* pCreateInfo, is null pointer");
4495 return;
4496 }
4497 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4498 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4499 {
4500 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4501 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4502 return;
4503 }
4504 if(pCreateInfo->pCode == nullptr)
4505 {
4506 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4507 "vkCreateShaderModule parameter, const void* pCreateInfo->pCode, is null pointer");
4508 return;
4509 }
4510 if(pCreateInfo->codeSize == 0)
4511 {
4512 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4513 "vkCreateShaderModule parameter, size_t pCreateInfo->codeSize, is zero");
4514 return;
4515 }
4516}
4517
4518void PostCreateShaderModule(
4519 VkDevice device,
4520 VkShaderModule* pShaderModule,
4521 VkResult result)
4522{
4523 if(device == nullptr)
4524 {
4525 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4526 "vkCreateShaderModule parameter, VkDevice device, is null pointer");
4527 return;
4528 }
4529
4530 if(pShaderModule == nullptr)
4531 {
4532 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4533 "vkCreateShaderModule parameter, VkShader* pShader, is null pointer");
4534 return;
4535 }
4536 if((*pShaderModule) == nullptr)
4537 {
4538 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4539 "vkCreateShaderModule parameter, VkShader* pShader, is null pointer");
4540 return;
4541 }
4542
4543 if(result != VK_SUCCESS)
4544 {
4545 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4546 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
4547 return;
4548 }
4549}
4550
4551VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
4552 VkDevice device,
4553 const VkShaderModuleCreateInfo* pCreateInfo,
4554 VkShaderModule* pShaderModule)
4555{
4556 PreCreateShaderModule(device, pCreateInfo);
4557 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
4558
4559 PostCreateShaderModule(device, pShaderModule, result);
4560
4561 return result;
4562}
4563
Jeremy Hayes99a96322015-06-26 12:48:09 -06004564void PreCreateShader(
4565 VkDevice device,
4566 const VkShaderCreateInfo* pCreateInfo)
4567{
4568 if(device == nullptr)
4569 {
4570 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4571 "vkCreateShader parameter, VkDevice device, is null pointer");
4572 return;
4573 }
4574
4575 if(pCreateInfo == nullptr)
4576 {
4577 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4578 "vkCreateShader parameter, const VkShaderCreateInfo* pCreateInfo, is null pointer");
4579 return;
4580 }
4581 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4582 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4583 {
4584 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4585 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4586 return;
4587 }
4588 if(pCreateInfo->module == nullptr)
4589 {
4590 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4591 "vkCreateShader parameter, VkShaderModule pCreateInfo->module, is null pointer");
4592 return;
4593 }
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004594 if(pCreateInfo->pName == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004595 {
4596 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4597 "vkCreateShader parameter, const char* pCreateInfo->name, is null pointer");
4598 return;
4599 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004600}
4601
4602void PostCreateShader(
4603 VkDevice device,
4604 VkShader* pShader,
4605 VkResult result)
4606{
4607 if(device == nullptr)
4608 {
4609 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4610 "vkCreateShader parameter, VkDevice device, is null pointer");
4611 return;
4612 }
4613
4614 if(pShader == nullptr)
4615 {
4616 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4617 "vkCreateShader parameter, VkShader* pShader, is null pointer");
4618 return;
4619 }
4620 if((*pShader) == nullptr)
4621 {
4622 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4623 "vkCreateShader parameter, VkShader* pShader, is null pointer");
4624 return;
4625 }
4626
4627 if(result != VK_SUCCESS)
4628 {
4629 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
4630 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
4631 return;
4632 }
4633}
4634
4635VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4636 VkDevice device,
4637 const VkShaderCreateInfo* pCreateInfo,
4638 VkShader* pShader)
4639{
4640 PreCreateShader(device, pCreateInfo);
4641 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4642
4643 PostCreateShader(device, pShader, result);
4644
4645 return result;
4646}
4647
Jon Ashburnc669cc62015-07-09 15:02:25 -06004648//TODO handle count > 1
Jeremy Hayes99a96322015-06-26 12:48:09 -06004649void PreCreateGraphicsPipeline(
4650 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06004651 uint32_t count,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004652 const VkGraphicsPipelineCreateInfo* pCreateInfo)
4653{
4654 if(device == nullptr)
4655 {
4656 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4657 "vkCreateGraphicsPipeline parameter, VkDevice device, is null pointer");
4658 return;
4659 }
4660
4661 if(pCreateInfo == nullptr)
4662 {
4663 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4664 "vkCreateGraphicsPipeline parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer");
4665 return;
4666 }
4667 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4668 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4669 {
4670 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4671 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4672 return;
4673 }
4674 if(pCreateInfo->pStages == nullptr)
4675 {
4676 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4677 "vkCreateGraphicsPipeline parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer");
4678 return;
4679 }
4680 if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4681 pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE)
4682 {
4683 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4684 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator");
4685 return;
4686 }
4687 if(pCreateInfo->pStages->pNext == nullptr)
4688 {
4689 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4690 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pNext, is null pointer");
4691 return;
4692 }
4693 if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4694 pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4695 {
4696 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4697 "vkCreateGraphicsPipeline parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator");
4698 return;
4699 }
4700 if(pCreateInfo->pStages->shader == nullptr)
4701 {
4702 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4703 "vkCreateGraphicsPipeline parameter, VkShader pCreateInfo->pStages->shader, is null pointer");
4704 return;
4705 }
4706 if(pCreateInfo->pStages->pLinkConstBufferInfo == nullptr)
4707 {
4708 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4709 "vkCreateGraphicsPipeline parameter, const VkLinkConstBuffer* pCreateInfo->pStages->pLinkConstBufferInfo, is null pointer");
4710 return;
4711 }
4712 if(pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData == nullptr)
4713 {
4714 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4715 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData, is null pointer");
4716 return;
4717 }
4718 if(pCreateInfo->pStages->pSpecializationInfo == nullptr)
4719 {
4720 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4721 "vkCreateGraphicsPipeline parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer");
4722 return;
4723 }
4724 if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr)
4725 {
4726 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4727 "vkCreateGraphicsPipeline parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer");
4728 return;
4729 }
4730 if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr)
4731 {
4732 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4733 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer");
4734 return;
4735 }
4736 if(pCreateInfo->pVertexInputState == nullptr)
4737 {
4738 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4739 "vkCreateGraphicsPipeline parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer");
4740 return;
4741 }
4742 if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4743 pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4744 {
4745 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4746 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator");
4747 return;
4748 }
4749 if(pCreateInfo->pVertexInputState->pNext == nullptr)
4750 {
4751 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4752 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pVertexInputState->pNext, is null pointer");
4753 return;
4754 }
4755 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr)
4756 {
4757 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4758 "vkCreateGraphicsPipeline parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer");
4759 return;
4760 }
4761 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4762 pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4763 {
4764 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4765 "vkCreateGraphicsPipeline parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator");
4766 return;
4767 }
4768 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr)
4769 {
4770 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4771 "vkCreateGraphicsPipeline parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer");
4772 return;
4773 }
4774 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4775 pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4776 {
4777 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4778 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator");
4779 return;
4780 }
4781 if(pCreateInfo->pIaState == nullptr)
4782 {
4783 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4784 "vkCreateGraphicsPipeline parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer");
4785 return;
4786 }
4787 if(pCreateInfo->pIaState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4788 pCreateInfo->pIaState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4789 {
4790 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4791 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator");
4792 return;
4793 }
4794 if(pCreateInfo->pIaState->pNext == nullptr)
4795 {
4796 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4797 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pIaState->pNext, is null pointer");
4798 return;
4799 }
4800 if(pCreateInfo->pIaState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4801 pCreateInfo->pIaState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4802 {
4803 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4804 "vkCreateGraphicsPipeline parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator");
4805 return;
4806 }
4807 if(pCreateInfo->pTessState == nullptr)
4808 {
4809 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4810 "vkCreateGraphicsPipeline parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer");
4811 return;
4812 }
4813 if(pCreateInfo->pTessState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4814 pCreateInfo->pTessState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4815 {
4816 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4817 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator");
4818 return;
4819 }
4820 if(pCreateInfo->pTessState->pNext == nullptr)
4821 {
4822 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4823 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pTessState->pNext, is null pointer");
4824 return;
4825 }
4826 if(pCreateInfo->pVpState == nullptr)
4827 {
4828 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4829 "vkCreateGraphicsPipeline parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer");
4830 return;
4831 }
4832 if(pCreateInfo->pVpState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4833 pCreateInfo->pVpState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4834 {
4835 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4836 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator");
4837 return;
4838 }
4839 if(pCreateInfo->pVpState->pNext == nullptr)
4840 {
4841 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4842 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pVpState->pNext, is null pointer");
4843 return;
4844 }
4845 if(pCreateInfo->pVpState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4846 pCreateInfo->pVpState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
4847 {
4848 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4849 "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator");
4850 return;
4851 }
4852 if(pCreateInfo->pVpState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE ||
4853 pCreateInfo->pVpState->depthMode > VK_DEPTH_MODE_END_RANGE)
4854 {
4855 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4856 "vkCreateGraphicsPipeline parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator");
4857 return;
4858 }
4859 if(pCreateInfo->pRsState == nullptr)
4860 {
4861 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4862 "vkCreateGraphicsPipeline parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer");
4863 return;
4864 }
4865 if(pCreateInfo->pRsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4866 pCreateInfo->pRsState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4867 {
4868 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4869 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator");
4870 return;
4871 }
4872 if(pCreateInfo->pRsState->pNext == nullptr)
4873 {
4874 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4875 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pRsState->pNext, is null pointer");
4876 return;
4877 }
4878 if(pCreateInfo->pRsState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4879 pCreateInfo->pRsState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
4880 {
4881 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4882 "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator");
4883 return;
4884 }
4885 if(pCreateInfo->pRsState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE ||
4886 pCreateInfo->pRsState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE)
4887 {
4888 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4889 "vkCreateGraphicsPipeline parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator");
4890 return;
4891 }
4892 if(pCreateInfo->pRsState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4893 pCreateInfo->pRsState->fillMode > VK_FILL_MODE_END_RANGE)
4894 {
4895 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4896 "vkCreateGraphicsPipeline parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator");
4897 return;
4898 }
4899 if(pCreateInfo->pRsState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4900 pCreateInfo->pRsState->cullMode > VK_CULL_MODE_END_RANGE)
4901 {
4902 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4903 "vkCreateGraphicsPipeline parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator");
4904 return;
4905 }
4906 if(pCreateInfo->pRsState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4907 pCreateInfo->pRsState->frontFace > VK_FRONT_FACE_END_RANGE)
4908 {
4909 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4910 "vkCreateGraphicsPipeline parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator");
4911 return;
4912 }
4913 if(pCreateInfo->pMsState == nullptr)
4914 {
4915 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4916 "vkCreateGraphicsPipeline parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer");
4917 return;
4918 }
4919 if(pCreateInfo->pMsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4920 pCreateInfo->pMsState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4921 {
4922 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4923 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator");
4924 return;
4925 }
4926 if(pCreateInfo->pMsState->pNext == nullptr)
4927 {
4928 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4929 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pMsState->pNext, is null pointer");
4930 return;
4931 }
4932 if(pCreateInfo->pDsState == nullptr)
4933 {
4934 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4935 "vkCreateGraphicsPipeline parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer");
4936 return;
4937 }
4938 if(pCreateInfo->pDsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4939 pCreateInfo->pDsState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4940 {
4941 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4942 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
4943 return;
4944 }
4945 if(pCreateInfo->pDsState->pNext == nullptr)
4946 {
4947 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4948 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pDsState->pNext, is null pointer");
4949 return;
4950 }
4951 if(pCreateInfo->pDsState->format < VK_FORMAT_BEGIN_RANGE ||
4952 pCreateInfo->pDsState->format > VK_FORMAT_END_RANGE)
4953 {
4954 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4955 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pDsState->format, is unrecognized enumerator");
4956 return;
4957 }
4958 if(pCreateInfo->pDsState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4959 pCreateInfo->pDsState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4960 {
4961 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4962 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
4963 return;
4964 }
4965 if(pCreateInfo->pDsState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4966 pCreateInfo->pDsState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4967 {
4968 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4969 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator");
4970 return;
4971 }
4972 if(pCreateInfo->pDsState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4973 pCreateInfo->pDsState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4974 {
4975 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4976 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator");
4977 return;
4978 }
4979 if(pCreateInfo->pDsState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4980 pCreateInfo->pDsState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4981 {
4982 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4983 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator");
4984 return;
4985 }
4986 if(pCreateInfo->pDsState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4987 pCreateInfo->pDsState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4988 {
4989 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4990 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator");
4991 return;
4992 }
4993 if(pCreateInfo->pDsState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4994 pCreateInfo->pDsState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4995 {
4996 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4997 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator");
4998 return;
4999 }
5000 if(pCreateInfo->pDsState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
5001 pCreateInfo->pDsState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5002 {
5003 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5004 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator");
5005 return;
5006 }
5007 if(pCreateInfo->pDsState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5008 pCreateInfo->pDsState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5009 {
5010 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5011 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator");
5012 return;
5013 }
5014 if(pCreateInfo->pDsState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5015 pCreateInfo->pDsState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5016 {
5017 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5018 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator");
5019 return;
5020 }
5021 if(pCreateInfo->pCbState == nullptr)
5022 {
5023 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5024 "vkCreateGraphicsPipeline parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer");
5025 return;
5026 }
5027 if(pCreateInfo->pCbState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5028 pCreateInfo->pCbState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5029 {
5030 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5031 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator");
5032 return;
5033 }
5034 if(pCreateInfo->pCbState->pNext == nullptr)
5035 {
5036 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5037 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pCbState->pNext, is null pointer");
5038 return;
5039 }
5040 if(pCreateInfo->pCbState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
5041 pCreateInfo->pCbState->logicOp > VK_LOGIC_OP_END_RANGE)
5042 {
5043 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5044 "vkCreateGraphicsPipeline parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator");
5045 return;
5046 }
5047 if(pCreateInfo->pCbState->pAttachments == nullptr)
5048 {
5049 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5050 "vkCreateGraphicsPipeline parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer");
5051 return;
5052 }
5053 if(pCreateInfo->pCbState->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5054 pCreateInfo->pCbState->pAttachments->format > VK_FORMAT_END_RANGE)
5055 {
5056 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5057 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator");
5058 return;
5059 }
5060 if(pCreateInfo->pCbState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
5061 pCreateInfo->pCbState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
5062 {
5063 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5064 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator");
5065 return;
5066 }
5067 if(pCreateInfo->pCbState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
5068 pCreateInfo->pCbState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
5069 {
5070 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5071 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator");
5072 return;
5073 }
5074 if(pCreateInfo->pCbState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
5075 pCreateInfo->pCbState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
5076 {
5077 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5078 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator");
5079 return;
5080 }
5081 if(pCreateInfo->pCbState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5082 pCreateInfo->pCbState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
5083 {
5084 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5085 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator");
5086 return;
5087 }
5088 if(pCreateInfo->pCbState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5089 pCreateInfo->pCbState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
5090 {
5091 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5092 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator");
5093 return;
5094 }
5095 if(pCreateInfo->pCbState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
5096 pCreateInfo->pCbState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
5097 {
5098 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5099 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator");
5100 return;
5101 }
5102 if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask))
5103 {
5104 std::string reason = "vkCreateGraphicsPipeline parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask);
5105 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5106 return;
5107 }
5108 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5109 {
5110 std::string reason = "vkCreateGraphicsPipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5111 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5112 return;
5113 }
5114 if(pCreateInfo->layout == nullptr)
5115 {
5116 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5117 "vkCreateGraphicsPipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
5118 return;
5119 }
5120}
5121
Jon Ashburnc669cc62015-07-09 15:02:25 -06005122//TODO handle count > 1
Jeremy Hayes99a96322015-06-26 12:48:09 -06005123void PostCreateGraphicsPipeline(
5124 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005125 uint32_t count,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005126 VkPipeline* pPipeline,
5127 VkResult result)
5128{
5129 if(device == nullptr)
5130 {
5131 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5132 "vkCreateGraphicsPipeline parameter, VkDevice device, is null pointer");
5133 return;
5134 }
5135
5136 if(pPipeline == nullptr)
5137 {
5138 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5139 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5140 return;
5141 }
5142 if((*pPipeline) == nullptr)
5143 {
5144 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5145 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5146 return;
5147 }
5148
5149 if(result != VK_SUCCESS)
5150 {
5151 std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
5152 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5153 return;
5154 }
5155}
Jon Ashburnc669cc62015-07-09 15:02:25 -06005156//TODO add intercept of pipelineCache entrypoints
5157VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005158 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005159 VkPipelineCache pipelineCache,
5160 uint32_t count,
5161 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5162 VkPipeline* pPipelines)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005163{
Jon Ashburnc669cc62015-07-09 15:02:25 -06005164 PreCreateGraphicsPipeline(device, count, pCreateInfos);
5165 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005166
Jon Ashburnc669cc62015-07-09 15:02:25 -06005167 PostCreateGraphicsPipeline(device, count, pPipelines, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005168
5169 return result;
5170}
5171
Jon Ashburnc669cc62015-07-09 15:02:25 -06005172//TODO handle count > 1
Jeremy Hayes99a96322015-06-26 12:48:09 -06005173void PreCreateComputePipeline(
5174 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005175 uint32_t count,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005176 const VkComputePipelineCreateInfo* pCreateInfo)
5177{
5178 if(device == nullptr)
5179 {
5180 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5181 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5182 return;
5183 }
5184
5185 if(pCreateInfo == nullptr)
5186 {
5187 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5188 "vkCreateComputePipeline parameter, const VkComputePipelineCreateInfo* pCreateInfo, is null pointer");
5189 return;
5190 }
5191 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5192 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5193 {
5194 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5195 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5196 return;
5197 }
5198 if(pCreateInfo->cs.sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5199 pCreateInfo->cs.sType > VK_STRUCTURE_TYPE_END_RANGE)
5200 {
5201 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5202 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->cs.sType, is unrecognized enumerator");
5203 return;
5204 }
5205 if(pCreateInfo->cs.pNext == nullptr)
5206 {
5207 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5208 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pNext, is null pointer");
5209 return;
5210 }
5211 if(pCreateInfo->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5212 pCreateInfo->cs.stage > VK_SHADER_STAGE_END_RANGE)
5213 {
5214 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5215 "vkCreateComputePipeline parameter, VkShaderStage pCreateInfo->cs.stage, is unrecognized enumerator");
5216 return;
5217 }
5218 if(pCreateInfo->cs.shader == nullptr)
5219 {
5220 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5221 "vkCreateComputePipeline parameter, VkShader pCreateInfo->cs.shader, is null pointer");
5222 return;
5223 }
5224 if(pCreateInfo->cs.pLinkConstBufferInfo == nullptr)
5225 {
5226 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5227 "vkCreateComputePipeline parameter, const VkLinkConstBuffer* pCreateInfo->cs.pLinkConstBufferInfo, is null pointer");
5228 return;
5229 }
5230 if(pCreateInfo->cs.pLinkConstBufferInfo->pBufferData == nullptr)
5231 {
5232 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5233 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pLinkConstBufferInfo->pBufferData, is null pointer");
5234 return;
5235 }
5236 if(pCreateInfo->cs.pSpecializationInfo == nullptr)
5237 {
5238 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5239 "vkCreateComputePipeline parameter, const VkSpecializationInfo* pCreateInfo->cs.pSpecializationInfo, is null pointer");
5240 return;
5241 }
5242 if(pCreateInfo->cs.pSpecializationInfo->pMap == nullptr)
5243 {
5244 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5245 "vkCreateComputePipeline parameter, const VkSpecializationMapEntry* pCreateInfo->cs.pSpecializationInfo->pMap, is null pointer");
5246 return;
5247 }
5248 if(pCreateInfo->cs.pSpecializationInfo->pData == nullptr)
5249 {
5250 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5251 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pSpecializationInfo->pData, is null pointer");
5252 return;
5253 }
5254 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5255 {
5256 std::string reason = "vkCreateComputePipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5257 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5258 return;
5259 }
5260 if(pCreateInfo->layout == nullptr)
5261 {
5262 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5263 "vkCreateComputePipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
5264 return;
5265 }
5266}
5267
Jon Ashburnc669cc62015-07-09 15:02:25 -06005268//TODO handle count > 1
Jeremy Hayes99a96322015-06-26 12:48:09 -06005269void PostCreateComputePipeline(
5270 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005271 uint32_t count,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005272 VkPipeline* pPipeline,
5273 VkResult result)
5274{
5275 if(device == nullptr)
5276 {
5277 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5278 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5279 return;
5280 }
5281
5282 if(pPipeline == nullptr)
5283 {
5284 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5285 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5286 return;
5287 }
5288 if((*pPipeline) == nullptr)
5289 {
5290 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5291 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5292 return;
5293 }
5294
5295 if(result != VK_SUCCESS)
5296 {
5297 std::string reason = "vkCreateComputePipeline parameter, VkResult result, is " + EnumeratorString(result);
5298 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5299 return;
5300 }
5301}
5302
Jon Ashburnc669cc62015-07-09 15:02:25 -06005303VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005304 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005305 VkPipelineCache pipelineCache,
5306 uint32_t count,
5307 const VkComputePipelineCreateInfo* pCreateInfos,
5308 VkPipeline* pPipelines)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005309{
Jon Ashburnc669cc62015-07-09 15:02:25 -06005310 PreCreateComputePipeline(device, count, pCreateInfos);
5311 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005312
Jon Ashburnc669cc62015-07-09 15:02:25 -06005313 PostCreateComputePipeline(device, count, pPipelines, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005314
5315 return result;
5316}
5317
Jeremy Hayes99a96322015-06-26 12:48:09 -06005318
5319void PreCreatePipelineLayout(
5320 VkDevice device,
5321 const VkPipelineLayoutCreateInfo* pCreateInfo)
5322{
5323 if(device == nullptr)
5324 {
5325 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5326 "vkCreatePipelineLayout parameter, VkDevice device, is null pointer");
5327 return;
5328 }
5329
5330 if(pCreateInfo == nullptr)
5331 {
5332 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5333 "vkCreatePipelineLayout parameter, const VkPipelineLayoutCreateInfo* pCreateInfo, is null pointer");
5334 return;
5335 }
5336 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5337 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5338 {
5339 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5340 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5341 return;
5342 }
5343 if(pCreateInfo->pSetLayouts == nullptr)
5344 {
5345 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5346 "vkCreatePipelineLayout parameter, const VkDescriptorSetLayout* pCreateInfo->pSetLayouts, is null pointer");
5347 return;
5348 }
5349 if((*pCreateInfo->pSetLayouts) == nullptr)
5350 {
5351 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5352 "vkCreatePipelineLayout parameter, const VkDescriptorSetLayout* pCreateInfo->pSetLayouts, is null pointer");
5353 return;
5354 }
5355}
5356
5357void PostCreatePipelineLayout(
5358 VkDevice device,
5359 VkPipelineLayout* pPipelineLayout,
5360 VkResult result)
5361{
5362 if(device == nullptr)
5363 {
5364 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5365 "vkCreatePipelineLayout parameter, VkDevice device, is null pointer");
5366 return;
5367 }
5368
5369 if(pPipelineLayout == nullptr)
5370 {
5371 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5372 "vkCreatePipelineLayout parameter, VkPipelineLayout* pPipelineLayout, is null pointer");
5373 return;
5374 }
5375 if((*pPipelineLayout) == nullptr)
5376 {
5377 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5378 "vkCreatePipelineLayout parameter, VkPipelineLayout* pPipelineLayout, is null pointer");
5379 return;
5380 }
5381
5382 if(result != VK_SUCCESS)
5383 {
5384 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5385 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5386 return;
5387 }
5388}
5389
5390VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5391 VkDevice device,
5392 const VkPipelineLayoutCreateInfo* pCreateInfo,
5393 VkPipelineLayout* pPipelineLayout)
5394{
5395 PreCreatePipelineLayout(device, pCreateInfo);
5396 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5397
5398 PostCreatePipelineLayout(device, pPipelineLayout, result);
5399
5400 return result;
5401}
5402
5403void PreCreateSampler(
5404 VkDevice device,
5405 const VkSamplerCreateInfo* pCreateInfo)
5406{
5407 if(device == nullptr)
5408 {
5409 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5410 "vkCreateSampler parameter, VkDevice device, is null pointer");
5411 return;
5412 }
5413
5414 if(pCreateInfo == nullptr)
5415 {
5416 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5417 "vkCreateSampler parameter, const VkSamplerCreateInfo* pCreateInfo, is null pointer");
5418 return;
5419 }
5420 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5421 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5422 {
5423 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5424 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5425 return;
5426 }
5427 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5428 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5429 {
5430 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5431 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is unrecognized enumerator");
5432 return;
5433 }
5434 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5435 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5436 {
5437 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5438 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is unrecognized enumerator");
5439 return;
5440 }
5441 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5442 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5443 {
5444 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5445 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is unrecognized enumerator");
5446 return;
5447 }
5448 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5449 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5450 {
5451 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5452 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is unrecognized enumerator");
5453 return;
5454 }
5455 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5456 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5457 {
5458 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5459 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is unrecognized enumerator");
5460 return;
5461 }
5462 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5463 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5464 {
5465 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5466 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is unrecognized enumerator");
5467 return;
5468 }
5469 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5470 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5471 {
5472 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5473 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is unrecognized enumerator");
5474 return;
5475 }
5476 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5477 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5478 {
5479 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5480 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is unrecognized enumerator");
5481 return;
5482 }
5483}
5484
5485void PostCreateSampler(
5486 VkDevice device,
5487 VkSampler* pSampler,
5488 VkResult result)
5489{
5490 if(device == nullptr)
5491 {
5492 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5493 "vkCreateSampler parameter, VkDevice device, is null pointer");
5494 return;
5495 }
5496
5497 if(pSampler == nullptr)
5498 {
5499 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5500 "vkCreateSampler parameter, VkSampler* pSampler, is null pointer");
5501 return;
5502 }
5503 if((*pSampler) == nullptr)
5504 {
5505 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5506 "vkCreateSampler parameter, VkSampler* pSampler, is null pointer");
5507 return;
5508 }
5509
5510 if(result != VK_SUCCESS)
5511 {
5512 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
5513 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5514 return;
5515 }
5516}
5517
5518VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5519 VkDevice device,
5520 const VkSamplerCreateInfo* pCreateInfo,
5521 VkSampler* pSampler)
5522{
5523 PreCreateSampler(device, pCreateInfo);
5524 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5525
5526 PostCreateSampler(device, pSampler, result);
5527
5528 return result;
5529}
5530
5531void PreCreateDescriptorSetLayout(
5532 VkDevice device,
5533 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5534{
5535 if(device == nullptr)
5536 {
5537 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5538 "vkCreateDescriptorSetLayout parameter, VkDevice device, is null pointer");
5539 return;
5540 }
5541
5542 if(pCreateInfo == nullptr)
5543 {
5544 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5545 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, is null pointer");
5546 return;
5547 }
5548 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5549 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5550 {
5551 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5552 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5553 return;
5554 }
5555 if(pCreateInfo->pBinding == nullptr)
5556 {
5557 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5558 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutBinding* pCreateInfo->pBinding, is null pointer");
5559 return;
5560 }
5561 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5562 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5563 {
5564 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5565 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is unrecognized enumerator");
5566 return;
5567 }
5568 if(!ValidateEnumerator((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags))
5569 {
5570 std::string reason = "vkCreateDescriptorSetLayout parameter, VkShaderStageFlags pCreateInfo->pBinding->stageFlags, is " + EnumeratorString((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags);
5571 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5572 return;
5573 }
5574 if(pCreateInfo->pBinding->pImmutableSamplers == nullptr)
5575 {
5576 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5577 "vkCreateDescriptorSetLayout parameter, const VkSampler* pCreateInfo->pBinding->pImmutableSamplers, is null pointer");
5578 return;
5579 }
5580 if((*pCreateInfo->pBinding->pImmutableSamplers) == nullptr)
5581 {
5582 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5583 "vkCreateDescriptorSetLayout parameter, const VkSampler* pCreateInfo->pBinding->pImmutableSamplers, is null pointer");
5584 return;
5585 }
5586}
5587
5588void PostCreateDescriptorSetLayout(
5589 VkDevice device,
5590 VkDescriptorSetLayout* pSetLayout,
5591 VkResult result)
5592{
5593 if(device == nullptr)
5594 {
5595 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5596 "vkCreateDescriptorSetLayout parameter, VkDevice device, is null pointer");
5597 return;
5598 }
5599
5600 if(pSetLayout == nullptr)
5601 {
5602 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5603 "vkCreateDescriptorSetLayout parameter, VkDescriptorSetLayout* pSetLayout, is null pointer");
5604 return;
5605 }
5606 if((*pSetLayout) == nullptr)
5607 {
5608 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5609 "vkCreateDescriptorSetLayout parameter, VkDescriptorSetLayout* pSetLayout, is null pointer");
5610 return;
5611 }
5612
5613 if(result != VK_SUCCESS)
5614 {
5615 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5616 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5617 return;
5618 }
5619}
5620
5621VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5622 VkDevice device,
5623 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5624 VkDescriptorSetLayout* pSetLayout)
5625{
5626 PreCreateDescriptorSetLayout(device, pCreateInfo);
5627 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5628
5629 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5630
5631 return result;
5632}
5633
5634void PreCreateDescriptorPool(
5635 VkDevice device,
5636 const VkDescriptorPoolCreateInfo* pCreateInfo)
5637{
5638 if(device == nullptr)
5639 {
5640 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5641 "vkCreateDescriptorPool parameter, VkDevice device, is null pointer");
5642 return;
5643 }
5644
5645 if(pCreateInfo == nullptr)
5646 {
5647 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5648 "vkCreateDescriptorPool parameter, const VkDescriptorPoolCreateInfo* pCreateInfo, is null pointer");
5649 return;
5650 }
5651 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5652 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5653 {
5654 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5655 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5656 return;
5657 }
5658 if(pCreateInfo->pTypeCount == nullptr)
5659 {
5660 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5661 "vkCreateDescriptorPool parameter, const VkDescriptorTypeCount* pCreateInfo->pTypeCount, is null pointer");
5662 return;
5663 }
5664 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5665 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5666 {
5667 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5668 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is unrecognized enumerator");
5669 return;
5670 }
5671}
5672
5673void PostCreateDescriptorPool(
5674 VkDevice device,
5675 VkDescriptorPoolUsage poolUsage,
5676 uint32_t maxSets,
5677 VkDescriptorPool* pDescriptorPool,
5678 VkResult result)
5679{
5680 if(device == nullptr)
5681 {
5682 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5683 "vkCreateDescriptorPool parameter, VkDevice device, is null pointer");
5684 return;
5685 }
5686
5687 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5688 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5689 {
5690 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5691 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is unrecognized enumerator");
5692 return;
5693 }
5694
5695
5696 if(pDescriptorPool == nullptr)
5697 {
5698 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5699 "vkCreateDescriptorPool parameter, VkDescriptorPool* pDescriptorPool, is null pointer");
5700 return;
5701 }
5702 if((*pDescriptorPool) == nullptr)
5703 {
5704 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5705 "vkCreateDescriptorPool parameter, VkDescriptorPool* pDescriptorPool, is null pointer");
5706 return;
5707 }
5708
5709 if(result != VK_SUCCESS)
5710 {
5711 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5712 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5713 return;
5714 }
5715}
5716
5717VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5718 VkDevice device,
5719 VkDescriptorPoolUsage poolUsage,
5720 uint32_t maxSets,
5721 const VkDescriptorPoolCreateInfo* pCreateInfo,
5722 VkDescriptorPool* pDescriptorPool)
5723{
5724 PreCreateDescriptorPool(device, pCreateInfo);
5725 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5726
5727 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5728
5729 return result;
5730}
5731
5732void PreResetDescriptorPool(
5733 VkDevice device)
5734{
5735 if(device == nullptr)
5736 {
5737 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5738 "vkResetDescriptorPool parameter, VkDevice device, is null pointer");
5739 return;
5740 }
5741}
5742
5743void PostResetDescriptorPool(
5744 VkDevice device,
5745 VkDescriptorPool descriptorPool,
5746 VkResult result)
5747{
5748 if(device == nullptr)
5749 {
5750 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5751 "vkResetDescriptorPool parameter, VkDevice device, is null pointer");
5752 return;
5753 }
5754
5755 if(descriptorPool == nullptr)
5756 {
5757 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5758 "vkResetDescriptorPool parameter, VkDescriptorPool descriptorPool, is null pointer");
5759 return;
5760 }
5761
5762 if(result != VK_SUCCESS)
5763 {
5764 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5765 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5766 return;
5767 }
5768}
5769
5770VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5771 VkDevice device,
5772 VkDescriptorPool descriptorPool)
5773{
5774 PreResetDescriptorPool(device);
5775 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5776
5777 PostResetDescriptorPool(device, descriptorPool, result);
5778
5779 return result;
5780}
5781
5782void PreAllocDescriptorSets(
5783 VkDevice device,
5784 const VkDescriptorSetLayout* pSetLayouts)
5785{
5786 if(device == nullptr)
5787 {
5788 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5789 "vkAllocDescriptorSets parameter, VkDevice device, is null pointer");
5790 return;
5791 }
5792
5793 if(pSetLayouts == nullptr)
5794 {
5795 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5796 "vkAllocDescriptorSets parameter, const VkDescriptorSetLayout* pSetLayouts, is null pointer");
5797 return;
5798 }
5799 if((*pSetLayouts) == nullptr)
5800 {
5801 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5802 "vkAllocDescriptorSets parameter, const VkDescriptorSetLayout* pSetLayouts, is null pointer");
5803 return;
5804 }
5805}
5806
5807void PostAllocDescriptorSets(
5808 VkDevice device,
5809 VkDescriptorPool descriptorPool,
5810 VkDescriptorSetUsage setUsage,
5811 uint32_t count,
5812 VkDescriptorSet* pDescriptorSets,
5813 uint32_t* pCount,
5814 VkResult result)
5815{
5816 if(device == nullptr)
5817 {
5818 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5819 "vkAllocDescriptorSets parameter, VkDevice device, is null pointer");
5820 return;
5821 }
5822
5823 if(descriptorPool == nullptr)
5824 {
5825 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5826 "vkAllocDescriptorSets parameter, VkDescriptorPool descriptorPool, is null pointer");
5827 return;
5828 }
5829
5830 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5831 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5832 {
5833 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5834 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is unrecognized enumerator");
5835 return;
5836 }
5837
5838
5839 if(pDescriptorSets == nullptr)
5840 {
5841 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5842 "vkAllocDescriptorSets parameter, VkDescriptorSet* pDescriptorSets, is null pointer");
5843 return;
5844 }
5845 if((*pDescriptorSets) == nullptr)
5846 {
5847 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5848 "vkAllocDescriptorSets parameter, VkDescriptorSet* pDescriptorSets, is null pointer");
5849 return;
5850 }
5851
5852 if(pCount == nullptr)
5853 {
5854 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5855 "vkAllocDescriptorSets parameter, uint32_t* pCount, is null pointer");
5856 return;
5857 }
5858
5859 if(result != VK_SUCCESS)
5860 {
5861 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5862 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5863 return;
5864 }
5865}
5866
5867VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5868 VkDevice device,
5869 VkDescriptorPool descriptorPool,
5870 VkDescriptorSetUsage setUsage,
5871 uint32_t count,
5872 const VkDescriptorSetLayout* pSetLayouts,
5873 VkDescriptorSet* pDescriptorSets,
5874 uint32_t* pCount)
5875{
5876 PreAllocDescriptorSets(device, pSetLayouts);
5877 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
5878
5879 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, pCount, result);
5880
5881 return result;
5882}
5883
5884void PreUpdateDescriptorSets(
5885 VkDevice device,
5886 const VkWriteDescriptorSet* pDescriptorWrites,
5887 const VkCopyDescriptorSet* pDescriptorCopies)
5888{
5889 if(device == nullptr)
5890 {
5891 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5892 "vkUpdateDescriptorSets parameter, VkDevice device, is null pointer");
5893 return;
5894 }
5895
5896 if(pDescriptorWrites == nullptr)
5897 {
5898 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5899 "vkUpdateDescriptorSets parameter, const VkWriteDescriptorSet* pDescriptorWrites, is null pointer");
5900 return;
5901 }
5902 if(pDescriptorWrites->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5903 pDescriptorWrites->sType > VK_STRUCTURE_TYPE_END_RANGE)
5904 {
5905 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5906 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is unrecognized enumerator");
5907 return;
5908 }
5909 if(pDescriptorWrites->pNext == nullptr)
5910 {
5911 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5912 "vkUpdateDescriptorSets parameter, const void* pDescriptorWrites->pNext, is null pointer");
5913 return;
5914 }
5915 if(pDescriptorWrites->destSet == nullptr)
5916 {
5917 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5918 "vkUpdateDescriptorSets parameter, VkDescriptorSet pDescriptorWrites->destSet, is null pointer");
5919 return;
5920 }
5921 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5922 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5923 {
5924 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5925 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is unrecognized enumerator");
5926 return;
5927 }
5928 if(pDescriptorWrites->pDescriptors == nullptr)
5929 {
5930 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5931 "vkUpdateDescriptorSets parameter, const VkDescriptorInfo* pDescriptorWrites->pDescriptors, is null pointer");
5932 return;
5933 }
5934 if(pDescriptorWrites->pDescriptors->bufferView == nullptr)
5935 {
5936 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5937 "vkUpdateDescriptorSets parameter, VkBufferView pDescriptorWrites->pDescriptors->bufferView, is null pointer");
5938 return;
5939 }
5940 if(pDescriptorWrites->pDescriptors->sampler == nullptr)
5941 {
5942 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5943 "vkUpdateDescriptorSets parameter, VkSampler pDescriptorWrites->pDescriptors->sampler, is null pointer");
5944 return;
5945 }
5946 if(pDescriptorWrites->pDescriptors->imageView == nullptr)
5947 {
5948 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5949 "vkUpdateDescriptorSets parameter, VkImageView pDescriptorWrites->pDescriptors->imageView, is null pointer");
5950 return;
5951 }
5952 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5953 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5954 {
5955 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5956 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is unrecognized enumerator");
5957 return;
5958 }
5959
5960 if(pDescriptorCopies == nullptr)
5961 {
5962 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5963 "vkUpdateDescriptorSets parameter, const VkCopyDescriptorSet* pDescriptorCopies, is null pointer");
5964 return;
5965 }
5966 if(pDescriptorCopies->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5967 pDescriptorCopies->sType > VK_STRUCTURE_TYPE_END_RANGE)
5968 {
5969 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5970 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is unrecognized enumerator");
5971 return;
5972 }
5973 if(pDescriptorCopies->pNext == nullptr)
5974 {
5975 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5976 "vkUpdateDescriptorSets parameter, const void* pDescriptorCopies->pNext, is null pointer");
5977 return;
5978 }
5979 if(pDescriptorCopies->srcSet == nullptr)
5980 {
5981 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5982 "vkUpdateDescriptorSets parameter, VkDescriptorSet pDescriptorCopies->srcSet, is null pointer");
5983 return;
5984 }
5985 if(pDescriptorCopies->destSet == nullptr)
5986 {
5987 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5988 "vkUpdateDescriptorSets parameter, VkDescriptorSet pDescriptorCopies->destSet, is null pointer");
5989 return;
5990 }
5991}
5992
5993void PostUpdateDescriptorSets(
5994 VkDevice device,
5995 uint32_t writeCount,
5996 uint32_t copyCount,
5997 VkResult result)
5998{
5999 if(device == nullptr)
6000 {
6001 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6002 "vkUpdateDescriptorSets parameter, VkDevice device, is null pointer");
6003 return;
6004 }
6005
6006
6007
6008 if(result != VK_SUCCESS)
6009 {
6010 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
6011 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6012 return;
6013 }
6014}
6015
6016VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
6017 VkDevice device,
6018 uint32_t writeCount,
6019 const VkWriteDescriptorSet* pDescriptorWrites,
6020 uint32_t copyCount,
6021 const VkCopyDescriptorSet* pDescriptorCopies)
6022{
6023 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
6024 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
6025
6026 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
6027
6028 return result;
6029}
6030
6031void PreCreateDynamicViewportState(
6032 VkDevice device,
6033 const VkDynamicVpStateCreateInfo* pCreateInfo)
6034{
6035 if(device == nullptr)
6036 {
6037 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6038 "vkCreateDynamicViewportState parameter, VkDevice device, is null pointer");
6039 return;
6040 }
6041
6042 if(pCreateInfo == nullptr)
6043 {
6044 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6045 "vkCreateDynamicViewportState parameter, const VkDynamicVpStateCreateInfo* pCreateInfo, is null pointer");
6046 return;
6047 }
6048 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6049 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6050 {
6051 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6052 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6053 return;
6054 }
6055 if(pCreateInfo->pViewports == nullptr)
6056 {
6057 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6058 "vkCreateDynamicViewportState parameter, const VkViewport* pCreateInfo->pViewports, is null pointer");
6059 return;
6060 }
6061 if(pCreateInfo->pScissors == nullptr)
6062 {
6063 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6064 "vkCreateDynamicViewportState parameter, const VkRect* pCreateInfo->pScissors, is null pointer");
6065 return;
6066 }
6067}
6068
6069void PostCreateDynamicViewportState(
6070 VkDevice device,
6071 VkDynamicVpState* pState,
6072 VkResult result)
6073{
6074 if(device == nullptr)
6075 {
6076 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6077 "vkCreateDynamicViewportState parameter, VkDevice device, is null pointer");
6078 return;
6079 }
6080
6081 if(pState == nullptr)
6082 {
6083 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6084 "vkCreateDynamicViewportState parameter, VkDynamicVpState* pState, is null pointer");
6085 return;
6086 }
6087 if((*pState) == nullptr)
6088 {
6089 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6090 "vkCreateDynamicViewportState parameter, VkDynamicVpState* pState, is null pointer");
6091 return;
6092 }
6093
6094 if(result != VK_SUCCESS)
6095 {
6096 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
6097 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6098 return;
6099 }
6100}
6101
6102VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
6103 VkDevice device,
6104 const VkDynamicVpStateCreateInfo* pCreateInfo,
6105 VkDynamicVpState* pState)
6106{
6107 PreCreateDynamicViewportState(device, pCreateInfo);
6108 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
6109
6110 PostCreateDynamicViewportState(device, pState, result);
6111
6112 return result;
6113}
6114
6115void PreCreateDynamicRasterState(
6116 VkDevice device,
6117 const VkDynamicRsStateCreateInfo* pCreateInfo)
6118{
6119 if(device == nullptr)
6120 {
6121 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6122 "vkCreateDynamicRasterState parameter, VkDevice device, is null pointer");
6123 return;
6124 }
6125
6126 if(pCreateInfo == nullptr)
6127 {
6128 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6129 "vkCreateDynamicRasterState parameter, const VkDynamicRsStateCreateInfo* pCreateInfo, is null pointer");
6130 return;
6131 }
6132 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6133 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6134 {
6135 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6136 "vkCreateDynamicRasterState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6137 return;
6138 }
6139}
6140
6141void PostCreateDynamicRasterState(
6142 VkDevice device,
6143 VkDynamicRsState* pState,
6144 VkResult result)
6145{
6146 if(device == nullptr)
6147 {
6148 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6149 "vkCreateDynamicRasterState parameter, VkDevice device, is null pointer");
6150 return;
6151 }
6152
6153 if(pState == nullptr)
6154 {
6155 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6156 "vkCreateDynamicRasterState parameter, VkDynamicRsState* pState, is null pointer");
6157 return;
6158 }
6159 if((*pState) == nullptr)
6160 {
6161 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6162 "vkCreateDynamicRasterState parameter, VkDynamicRsState* pState, is null pointer");
6163 return;
6164 }
6165
6166 if(result != VK_SUCCESS)
6167 {
6168 std::string reason = "vkCreateDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
6169 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6170 return;
6171 }
6172}
6173
6174VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(
6175 VkDevice device,
6176 const VkDynamicRsStateCreateInfo* pCreateInfo,
6177 VkDynamicRsState* pState)
6178{
6179 PreCreateDynamicRasterState(device, pCreateInfo);
6180 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterState(device, pCreateInfo, pState);
6181
6182 PostCreateDynamicRasterState(device, pState, result);
6183
6184 return result;
6185}
6186
6187void PreCreateDynamicColorBlendState(
6188 VkDevice device,
6189 const VkDynamicCbStateCreateInfo* pCreateInfo)
6190{
6191 if(device == nullptr)
6192 {
6193 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6194 "vkCreateDynamicColorBlendState parameter, VkDevice device, is null pointer");
6195 return;
6196 }
6197
6198 if(pCreateInfo == nullptr)
6199 {
6200 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6201 "vkCreateDynamicColorBlendState parameter, const VkDynamicCbStateCreateInfo* pCreateInfo, is null pointer");
6202 return;
6203 }
6204 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6205 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6206 {
6207 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6208 "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6209 return;
6210 }
6211}
6212
6213void PostCreateDynamicColorBlendState(
6214 VkDevice device,
6215 VkDynamicCbState* pState,
6216 VkResult result)
6217{
6218 if(device == nullptr)
6219 {
6220 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6221 "vkCreateDynamicColorBlendState parameter, VkDevice device, is null pointer");
6222 return;
6223 }
6224
6225 if(pState == nullptr)
6226 {
6227 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6228 "vkCreateDynamicColorBlendState parameter, VkDynamicCbState* pState, is null pointer");
6229 return;
6230 }
6231 if((*pState) == nullptr)
6232 {
6233 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6234 "vkCreateDynamicColorBlendState parameter, VkDynamicCbState* pState, is null pointer");
6235 return;
6236 }
6237
6238 if(result != VK_SUCCESS)
6239 {
6240 std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
6241 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6242 return;
6243 }
6244}
6245
6246VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
6247 VkDevice device,
6248 const VkDynamicCbStateCreateInfo* pCreateInfo,
6249 VkDynamicCbState* pState)
6250{
6251 PreCreateDynamicColorBlendState(device, pCreateInfo);
6252 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState);
6253
6254 PostCreateDynamicColorBlendState(device, pState, result);
6255
6256 return result;
6257}
6258
6259void PreCreateDynamicDepthStencilState(
6260 VkDevice device,
6261 const VkDynamicDsStateCreateInfo* pCreateInfo)
6262{
6263 if(device == nullptr)
6264 {
6265 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6266 "vkCreateDynamicDepthStencilState parameter, VkDevice device, is null pointer");
6267 return;
6268 }
6269
6270 if(pCreateInfo == nullptr)
6271 {
6272 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6273 "vkCreateDynamicDepthStencilState parameter, const VkDynamicDsStateCreateInfo* pCreateInfo, is null pointer");
6274 return;
6275 }
6276 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6277 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6278 {
6279 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6280 "vkCreateDynamicDepthStencilState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6281 return;
6282 }
6283}
6284
6285void PostCreateDynamicDepthStencilState(
6286 VkDevice device,
6287 VkDynamicDsState* pState,
6288 VkResult result)
6289{
6290 if(device == nullptr)
6291 {
6292 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6293 "vkCreateDynamicDepthStencilState parameter, VkDevice device, is null pointer");
6294 return;
6295 }
6296
6297 if(pState == nullptr)
6298 {
6299 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6300 "vkCreateDynamicDepthStencilState parameter, VkDynamicDsState* pState, is null pointer");
6301 return;
6302 }
6303 if((*pState) == nullptr)
6304 {
6305 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6306 "vkCreateDynamicDepthStencilState parameter, VkDynamicDsState* pState, is null pointer");
6307 return;
6308 }
6309
6310 if(result != VK_SUCCESS)
6311 {
6312 std::string reason = "vkCreateDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
6313 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6314 return;
6315 }
6316}
6317
6318VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(
6319 VkDevice device,
6320 const VkDynamicDsStateCreateInfo* pCreateInfo,
6321 VkDynamicDsState* pState)
6322{
6323 PreCreateDynamicDepthStencilState(device, pCreateInfo);
6324 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
6325
6326 PostCreateDynamicDepthStencilState(device, pState, result);
6327
6328 return result;
6329}
6330
6331void PreCreateCommandBuffer(
6332 VkDevice device,
6333 const VkCmdBufferCreateInfo* pCreateInfo,
6334 VkCmdBuffer* pCmdBuffer)
6335{
6336 if(device == nullptr)
6337 {
6338 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6339 "vkCreateCommandBuffer parameter, VkDevice device, is null pointer");
6340 return;
6341 }
6342
6343 if(pCreateInfo == nullptr)
6344 {
6345 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6346 "vkCreateCommandBuffer parameter, const VkCmdBufferCreateInfo* pCreateInfo, is null pointer");
6347 return;
6348 }
6349 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6350 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6351 {
6352 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6353 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006354 return;
6355 }
6356
6357 if(pCmdBuffer == nullptr)
6358 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006359 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6360 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
6361 return;
6362 }
6363 if((*pCmdBuffer) == nullptr)
6364 {
6365 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6366 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006367 return;
6368 }
6369}
6370
Jeremy Hayes99a96322015-06-26 12:48:09 -06006371void PostCreateCommandBuffer(
6372 VkDevice device,
6373 VkCmdBuffer* pCmdBuffer,
6374 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006375{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006376 if(device == nullptr)
6377 {
6378 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6379 "vkCreateCommandBuffer parameter, VkDevice device, is null pointer");
6380 return;
6381 }
6382
6383 if(pCmdBuffer == nullptr)
6384 {
6385 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6386 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
6387 return;
6388 }
6389 if((*pCmdBuffer) == nullptr)
6390 {
6391 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6392 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
6393 return;
6394 }
6395
6396 if(result != VK_SUCCESS)
6397 {
6398 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6399 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6400 return;
6401 }
6402}
6403
6404VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6405 VkDevice device,
6406 const VkCmdBufferCreateInfo* pCreateInfo,
6407 VkCmdBuffer* pCmdBuffer)
6408{
6409 PreCreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6410 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6411
6412 PostCreateCommandBuffer(device, pCmdBuffer, result);
6413
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006414 return result;
6415}
6416
Jeremy Hayes99a96322015-06-26 12:48:09 -06006417void PreBeginCommandBuffer(
6418 VkCmdBuffer cmdBuffer,
6419 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006420{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006421 if(cmdBuffer == nullptr)
6422 {
6423 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6424 "vkBeginCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
6425 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006426 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006427
6428 if(pBeginInfo == nullptr)
6429 {
6430 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6431 "vkBeginCommandBuffer parameter, const VkCmdBufferBeginInfo* pBeginInfo, is null pointer");
6432 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006433 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006434 if(pBeginInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6435 pBeginInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6436 {
6437 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6438 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is unrecognized enumerator");
6439 return;
6440 }
6441 if(!ValidateEnumerator((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags))
6442 {
6443 std::string reason = "vkBeginCommandBuffer parameter, VkCmdBufferOptimizeFlags pBeginInfo->flags, is " + EnumeratorString((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags);
6444 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6445 return;
6446 }
6447}
6448
6449void PostBeginCommandBuffer(
6450 VkCmdBuffer cmdBuffer,
6451 VkResult result)
6452{
6453 if(cmdBuffer == nullptr)
6454 {
6455 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6456 "vkBeginCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
6457 return;
6458 }
6459
6460 if(result != VK_SUCCESS)
6461 {
6462 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6463 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6464 return;
6465 }
6466}
6467
6468VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6469 VkCmdBuffer cmdBuffer,
6470 const VkCmdBufferBeginInfo* pBeginInfo)
6471{
6472 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
6473 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6474
6475 PostBeginCommandBuffer(cmdBuffer, result);
6476
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006477 return result;
6478}
6479
Jeremy Hayes99a96322015-06-26 12:48:09 -06006480void PreEndCommandBuffer(
6481 VkCmdBuffer cmdBuffer)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006482{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006483 if(cmdBuffer == nullptr)
6484 {
6485 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6486 "vkEndCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
6487 return;
6488 }
6489}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006490
Jeremy Hayes99a96322015-06-26 12:48:09 -06006491void PostEndCommandBuffer(
6492 VkCmdBuffer cmdBuffer,
6493 VkResult result)
6494{
6495 if(cmdBuffer == nullptr)
6496 {
6497 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6498 "vkEndCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
6499 return;
6500 }
6501
6502 if(result != VK_SUCCESS)
6503 {
6504 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6505 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6506 return;
6507 }
6508}
6509
6510VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6511 VkCmdBuffer cmdBuffer)
6512{
6513 PreEndCommandBuffer(cmdBuffer);
6514 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6515
6516 PostEndCommandBuffer(cmdBuffer, result);
6517
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006518 return result;
6519}
6520
Jeremy Hayes99a96322015-06-26 12:48:09 -06006521void PreResetCommandBuffer(
6522 VkCmdBuffer cmdBuffer)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006523{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006524 if(cmdBuffer == nullptr)
6525 {
6526 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6527 "vkResetCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
6528 return;
6529 }
6530}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006531
Jeremy Hayes99a96322015-06-26 12:48:09 -06006532void PostResetCommandBuffer(
6533 VkCmdBuffer cmdBuffer,
6534 VkResult result)
6535{
6536 if(cmdBuffer == nullptr)
6537 {
6538 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6539 "vkResetCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
6540 return;
6541 }
6542
6543 if(result != VK_SUCCESS)
6544 {
6545 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6546 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6547 return;
6548 }
6549}
6550
6551VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
6552 VkCmdBuffer cmdBuffer)
6553{
6554 PreResetCommandBuffer(cmdBuffer);
6555 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer);
6556
6557 PostResetCommandBuffer(cmdBuffer, result);
6558
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006559 return result;
6560}
6561
Jeremy Hayes99a96322015-06-26 12:48:09 -06006562void PreCmdBindPipeline(
6563 VkCmdBuffer cmdBuffer)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006564{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006565 if(cmdBuffer == nullptr)
6566 {
6567 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6568 "vkCmdBindPipeline parameter, VkCmdBuffer cmdBuffer, is null pointer");
6569 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006570 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006571}
6572
Jeremy Hayes99a96322015-06-26 12:48:09 -06006573void PostCmdBindPipeline(
6574 VkCmdBuffer cmdBuffer,
6575 VkPipelineBindPoint pipelineBindPoint,
6576 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006577{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006578 if(cmdBuffer == nullptr)
6579 {
6580 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6581 "vkCmdBindPipeline parameter, VkCmdBuffer cmdBuffer, is null pointer");
6582 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006583 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006584
6585 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6586 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6587 {
6588 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6589 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
6590 return;
6591 }
6592
6593 if(pipeline == nullptr)
6594 {
6595 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6596 "vkCmdBindPipeline parameter, VkPipeline pipeline, is null pointer");
6597 return;
6598 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006599}
6600
Jeremy Hayes99a96322015-06-26 12:48:09 -06006601VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6602 VkCmdBuffer cmdBuffer,
6603 VkPipelineBindPoint pipelineBindPoint,
6604 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006605{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006606 PreCmdBindPipeline(cmdBuffer);
6607 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6608
6609 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6610}
6611
6612void PreCmdBindDynamicStateObject(
6613 VkCmdBuffer cmdBuffer)
6614{
6615 if(cmdBuffer == nullptr)
6616 {
6617 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6618 "vkCmdBindDynamicStateObject parameter, VkCmdBuffer cmdBuffer, is null pointer");
6619 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006620 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006621}
6622
6623void PostCmdBindDynamicStateObject(
6624 VkCmdBuffer cmdBuffer,
6625 VkStateBindPoint stateBindPoint,
6626 VkDynamicStateObject dynamicState)
6627{
6628 if(cmdBuffer == nullptr)
6629 {
6630 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6631 "vkCmdBindDynamicStateObject parameter, VkCmdBuffer cmdBuffer, is null pointer");
6632 return;
6633 }
6634
6635 if(stateBindPoint < VK_STATE_BIND_POINT_BEGIN_RANGE ||
6636 stateBindPoint > VK_STATE_BIND_POINT_END_RANGE)
6637 {
6638 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6639 "vkCmdBindDynamicStateObject parameter, VkStateBindPoint stateBindPoint, is unrecognized enumerator");
6640 return;
6641 }
6642
6643 if(dynamicState == nullptr)
6644 {
6645 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6646 "vkCmdBindDynamicStateObject parameter, VkDynamicStateObject dynamicState, is null pointer");
6647 return;
6648 }
6649}
6650
6651VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject(
6652 VkCmdBuffer cmdBuffer,
6653 VkStateBindPoint stateBindPoint,
6654 VkDynamicStateObject dynamicState)
6655{
6656 PreCmdBindDynamicStateObject(cmdBuffer);
6657 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, dynamicState);
6658
6659 PostCmdBindDynamicStateObject(cmdBuffer, stateBindPoint, dynamicState);
6660}
6661
6662void PreCmdBindDescriptorSets(
6663 VkCmdBuffer cmdBuffer,
6664 const VkDescriptorSet* pDescriptorSets,
6665 const uint32_t* pDynamicOffsets)
6666{
6667 if(cmdBuffer == nullptr)
6668 {
6669 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6670 "vkCmdBindDescriptorSets parameter, VkCmdBuffer cmdBuffer, is null pointer");
6671 return;
6672 }
6673
6674 if(pDescriptorSets == nullptr)
6675 {
6676 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6677 "vkCmdBindDescriptorSets parameter, const VkDescriptorSet* pDescriptorSets, is null pointer");
6678 return;
6679 }
6680 if((*pDescriptorSets) == nullptr)
6681 {
6682 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6683 "vkCmdBindDescriptorSets parameter, const VkDescriptorSet* pDescriptorSets, is null pointer");
6684 return;
6685 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006686}
6687
6688void PostCmdBindDescriptorSets(
6689 VkCmdBuffer cmdBuffer,
6690 VkPipelineBindPoint pipelineBindPoint,
6691 VkPipelineLayout layout,
6692 uint32_t firstSet,
6693 uint32_t setCount,
6694 uint32_t dynamicOffsetCount)
6695{
6696 if(cmdBuffer == nullptr)
6697 {
6698 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6699 "vkCmdBindDescriptorSets parameter, VkCmdBuffer cmdBuffer, is null pointer");
6700 return;
6701 }
6702
6703 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6704 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6705 {
6706 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6707 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
6708 return;
6709 }
6710
6711 if(layout == nullptr)
6712 {
6713 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6714 "vkCmdBindDescriptorSets parameter, VkPipelineLayout layout, is null pointer");
6715 return;
6716 }
6717
6718
6719
6720}
6721
6722VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6723 VkCmdBuffer cmdBuffer,
6724 VkPipelineBindPoint pipelineBindPoint,
6725 VkPipelineLayout layout,
6726 uint32_t firstSet,
6727 uint32_t setCount,
6728 const VkDescriptorSet* pDescriptorSets,
6729 uint32_t dynamicOffsetCount,
6730 const uint32_t* pDynamicOffsets)
6731{
6732 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
6733 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6734
6735 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6736}
6737
6738void PreCmdBindIndexBuffer(
6739 VkCmdBuffer cmdBuffer)
6740{
6741 if(cmdBuffer == nullptr)
6742 {
6743 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6744 "vkCmdBindIndexBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
6745 return;
6746 }
6747}
6748
6749void PostCmdBindIndexBuffer(
6750 VkCmdBuffer cmdBuffer,
6751 VkBuffer buffer,
6752 VkDeviceSize offset,
6753 VkIndexType indexType)
6754{
6755 if(cmdBuffer == nullptr)
6756 {
6757 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6758 "vkCmdBindIndexBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
6759 return;
6760 }
6761
6762 if(buffer == nullptr)
6763 {
6764 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6765 "vkCmdBindIndexBuffer parameter, VkBuffer buffer, is null pointer");
6766 return;
6767 }
6768
6769
6770 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6771 indexType > VK_INDEX_TYPE_END_RANGE)
6772 {
6773 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6774 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is unrecognized enumerator");
6775 return;
6776 }
6777}
6778
6779VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6780 VkCmdBuffer cmdBuffer,
6781 VkBuffer buffer,
6782 VkDeviceSize offset,
6783 VkIndexType indexType)
6784{
6785 PreCmdBindIndexBuffer(cmdBuffer);
6786 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6787
6788 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6789}
6790
6791void PreCmdBindVertexBuffers(
6792 VkCmdBuffer cmdBuffer,
6793 const VkBuffer* pBuffers,
6794 const VkDeviceSize* pOffsets)
6795{
6796 if(cmdBuffer == nullptr)
6797 {
6798 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6799 "vkCmdBindVertexBuffers parameter, VkCmdBuffer cmdBuffer, is null pointer");
6800 return;
6801 }
6802
6803 if(pBuffers == nullptr)
6804 {
6805 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6806 "vkCmdBindVertexBuffers parameter, const VkBuffer* pBuffers, is null pointer");
6807 return;
6808 }
6809 if((*pBuffers) == nullptr)
6810 {
6811 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6812 "vkCmdBindVertexBuffers parameter, const VkBuffer* pBuffers, is null pointer");
6813 return;
6814 }
6815
6816 if(pOffsets == nullptr)
6817 {
6818 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6819 "vkCmdBindVertexBuffers parameter, const VkDeviceSize* pOffsets, is null pointer");
6820 return;
6821 }
6822}
6823
6824void PostCmdBindVertexBuffers(
6825 VkCmdBuffer cmdBuffer,
6826 uint32_t startBinding,
6827 uint32_t bindingCount)
6828{
6829 if(cmdBuffer == nullptr)
6830 {
6831 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6832 "vkCmdBindVertexBuffers parameter, VkCmdBuffer cmdBuffer, is null pointer");
6833 return;
6834 }
6835
6836
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006837}
6838
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06006839VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006840 VkCmdBuffer cmdBuffer,
6841 uint32_t startBinding,
6842 uint32_t bindingCount,
6843 const VkBuffer* pBuffers,
6844 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006845{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006846 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
6847 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
6848
6849 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006850}
6851
Jeremy Hayes99a96322015-06-26 12:48:09 -06006852void PreCmdDraw(
6853 VkCmdBuffer cmdBuffer)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006854{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006855 if(cmdBuffer == nullptr)
6856 {
6857 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6858 "vkCmdDraw parameter, VkCmdBuffer cmdBuffer, is null pointer");
6859 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006860 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006861}
6862
Jeremy Hayes99a96322015-06-26 12:48:09 -06006863void PostCmdDraw(
6864 VkCmdBuffer cmdBuffer,
6865 uint32_t firstVertex,
6866 uint32_t vertexCount,
6867 uint32_t firstInstance,
6868 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006869{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006870 if(cmdBuffer == nullptr)
6871 {
6872 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6873 "vkCmdDraw parameter, VkCmdBuffer cmdBuffer, is null pointer");
6874 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006875 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006876
6877
6878
6879
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006880}
6881
Jeremy Hayes99a96322015-06-26 12:48:09 -06006882VK_LAYER_EXPORT void VKAPI vkCmdDraw(
6883 VkCmdBuffer cmdBuffer,
6884 uint32_t firstVertex,
6885 uint32_t vertexCount,
6886 uint32_t firstInstance,
6887 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006888{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006889 PreCmdDraw(cmdBuffer);
6890 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
6891
6892 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006893}
6894
Jeremy Hayes99a96322015-06-26 12:48:09 -06006895void PreCmdDrawIndexed(
6896 VkCmdBuffer cmdBuffer)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006897{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006898 if(cmdBuffer == nullptr)
6899 {
6900 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6901 "vkCmdDrawIndexed parameter, VkCmdBuffer cmdBuffer, is null pointer");
6902 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006903 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006904}
6905
Jeremy Hayes99a96322015-06-26 12:48:09 -06006906void PostCmdDrawIndexed(
6907 VkCmdBuffer cmdBuffer,
6908 uint32_t firstIndex,
6909 uint32_t indexCount,
6910 int32_t vertexOffset,
6911 uint32_t firstInstance,
6912 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006913{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006914 if(cmdBuffer == nullptr)
6915 {
6916 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6917 "vkCmdDrawIndexed parameter, VkCmdBuffer cmdBuffer, is null pointer");
6918 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006919 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006920
6921
6922
6923
6924
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006925}
6926
Jeremy Hayes99a96322015-06-26 12:48:09 -06006927VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
6928 VkCmdBuffer cmdBuffer,
6929 uint32_t firstIndex,
6930 uint32_t indexCount,
6931 int32_t vertexOffset,
6932 uint32_t firstInstance,
6933 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006934{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006935 PreCmdDrawIndexed(cmdBuffer);
6936 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6937
6938 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6939}
6940
6941void PreCmdDrawIndirect(
6942 VkCmdBuffer cmdBuffer)
6943{
6944 if(cmdBuffer == nullptr)
6945 {
6946 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6947 "vkCmdDrawIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
6948 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006949 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006950}
6951
6952void PostCmdDrawIndirect(
6953 VkCmdBuffer cmdBuffer,
6954 VkBuffer buffer,
6955 VkDeviceSize offset,
6956 uint32_t count,
6957 uint32_t stride)
6958{
6959 if(cmdBuffer == nullptr)
6960 {
6961 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6962 "vkCmdDrawIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
6963 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006964 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006965
Jeremy Hayes99a96322015-06-26 12:48:09 -06006966 if(buffer == nullptr)
6967 {
6968 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6969 "vkCmdDrawIndirect parameter, VkBuffer buffer, is null pointer");
6970 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006971 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006972
6973
6974
6975}
6976
6977VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
6978 VkCmdBuffer cmdBuffer,
6979 VkBuffer buffer,
6980 VkDeviceSize offset,
6981 uint32_t count,
6982 uint32_t stride)
6983{
6984 PreCmdDrawIndirect(cmdBuffer);
6985 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6986
6987 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6988}
6989
6990void PreCmdDrawIndexedIndirect(
6991 VkCmdBuffer cmdBuffer)
6992{
6993 if(cmdBuffer == nullptr)
6994 {
6995 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6996 "vkCmdDrawIndexedIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
6997 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006998 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006999}
7000
Jeremy Hayes99a96322015-06-26 12:48:09 -06007001void PostCmdDrawIndexedIndirect(
7002 VkCmdBuffer cmdBuffer,
7003 VkBuffer buffer,
7004 VkDeviceSize offset,
7005 uint32_t count,
7006 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007007{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007008 if(cmdBuffer == nullptr)
7009 {
7010 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7011 "vkCmdDrawIndexedIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
7012 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007013 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06007014
7015 if(buffer == nullptr)
7016 {
7017 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7018 "vkCmdDrawIndexedIndirect parameter, VkBuffer buffer, is null pointer");
7019 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007020 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06007021
7022
7023
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007024}
7025
Jeremy Hayes99a96322015-06-26 12:48:09 -06007026VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7027 VkCmdBuffer cmdBuffer,
7028 VkBuffer buffer,
7029 VkDeviceSize offset,
7030 uint32_t count,
7031 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007032{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007033 PreCmdDrawIndexedIndirect(cmdBuffer);
7034 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7035
7036 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7037}
7038
7039void PreCmdDispatch(
7040 VkCmdBuffer cmdBuffer)
7041{
7042 if(cmdBuffer == nullptr)
7043 {
7044 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7045 "vkCmdDispatch parameter, VkCmdBuffer cmdBuffer, is null pointer");
7046 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007047 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06007048}
7049
7050void PostCmdDispatch(
7051 VkCmdBuffer cmdBuffer,
7052 uint32_t x,
7053 uint32_t y,
7054 uint32_t z)
7055{
7056 if(cmdBuffer == nullptr)
7057 {
7058 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7059 "vkCmdDispatch parameter, VkCmdBuffer cmdBuffer, is null pointer");
7060 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007061 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06007062
7063
7064
7065}
7066
7067VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7068 VkCmdBuffer cmdBuffer,
7069 uint32_t x,
7070 uint32_t y,
7071 uint32_t z)
7072{
7073 PreCmdDispatch(cmdBuffer);
7074 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7075
7076 PostCmdDispatch(cmdBuffer, x, y, z);
7077}
7078
7079void PreCmdDispatchIndirect(
7080 VkCmdBuffer cmdBuffer)
7081{
7082 if(cmdBuffer == nullptr)
7083 {
7084 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7085 "vkCmdDispatchIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
7086 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007087 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007088}
7089
Jeremy Hayes99a96322015-06-26 12:48:09 -06007090void PostCmdDispatchIndirect(
7091 VkCmdBuffer cmdBuffer,
7092 VkBuffer buffer,
7093 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007094{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007095 if(cmdBuffer == nullptr)
7096 {
7097 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7098 "vkCmdDispatchIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
7099 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007100 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007101
Jeremy Hayes99a96322015-06-26 12:48:09 -06007102 if(buffer == nullptr)
7103 {
7104 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7105 "vkCmdDispatchIndirect parameter, VkBuffer buffer, is null pointer");
7106 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007107 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06007108
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007109}
7110
Jeremy Hayes99a96322015-06-26 12:48:09 -06007111VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7112 VkCmdBuffer cmdBuffer,
7113 VkBuffer buffer,
7114 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007115{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007116 PreCmdDispatchIndirect(cmdBuffer);
7117 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7118
7119 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007120}
7121
Jeremy Hayes99a96322015-06-26 12:48:09 -06007122void PreCmdCopyBuffer(
7123 VkCmdBuffer cmdBuffer,
7124 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007125{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007126 if(cmdBuffer == nullptr)
7127 {
7128 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7129 "vkCmdCopyBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7130 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007131 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06007132
7133 if(pRegions == nullptr)
7134 {
7135 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7136 "vkCmdCopyBuffer parameter, const VkBufferCopy* pRegions, is null pointer");
7137 return;
7138 }
7139}
7140
7141void PostCmdCopyBuffer(
7142 VkCmdBuffer cmdBuffer,
7143 VkBuffer srcBuffer,
7144 VkBuffer destBuffer,
7145 uint32_t regionCount)
7146{
7147 if(cmdBuffer == nullptr)
7148 {
7149 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7150 "vkCmdCopyBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7151 return;
7152 }
7153
7154 if(srcBuffer == nullptr)
7155 {
7156 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7157 "vkCmdCopyBuffer parameter, VkBuffer srcBuffer, is null pointer");
7158 return;
7159 }
7160
7161 if(destBuffer == nullptr)
7162 {
7163 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7164 "vkCmdCopyBuffer parameter, VkBuffer destBuffer, is null pointer");
7165 return;
7166 }
7167
7168}
7169
7170VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7171 VkCmdBuffer cmdBuffer,
7172 VkBuffer srcBuffer,
7173 VkBuffer destBuffer,
7174 uint32_t regionCount,
7175 const VkBufferCopy* pRegions)
7176{
7177 PreCmdCopyBuffer(cmdBuffer, pRegions);
7178 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7179
7180 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7181}
7182
7183void PreCmdCopyImage(
7184 VkCmdBuffer cmdBuffer,
7185 const VkImageCopy* pRegions)
7186{
7187 if(cmdBuffer == nullptr)
7188 {
7189 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7190 "vkCmdCopyImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7191 return;
7192 }
7193
7194 if(pRegions == nullptr)
7195 {
7196 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7197 "vkCmdCopyImage parameter, const VkImageCopy* pRegions, is null pointer");
7198 return;
7199 }
7200 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7201 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7202 {
7203 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7204 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
7205 return;
7206 }
7207 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7208 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7209 {
7210 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7211 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
7212 return;
7213 }
7214}
7215
7216void PostCmdCopyImage(
7217 VkCmdBuffer cmdBuffer,
7218 VkImage srcImage,
7219 VkImageLayout srcImageLayout,
7220 VkImage destImage,
7221 VkImageLayout destImageLayout,
7222 uint32_t regionCount)
7223{
7224 if(cmdBuffer == nullptr)
7225 {
7226 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7227 "vkCmdCopyImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7228 return;
7229 }
7230
7231 if(srcImage == nullptr)
7232 {
7233 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7234 "vkCmdCopyImage parameter, VkImage srcImage, is null pointer");
7235 return;
7236 }
7237
7238 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7239 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7240 {
7241 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7242 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
7243 return;
7244 }
7245
7246 if(destImage == nullptr)
7247 {
7248 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7249 "vkCmdCopyImage parameter, VkImage destImage, is null pointer");
7250 return;
7251 }
7252
7253 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7254 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7255 {
7256 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7257 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
7258 return;
7259 }
7260
7261}
7262
7263VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7264 VkCmdBuffer cmdBuffer,
7265 VkImage srcImage,
7266 VkImageLayout srcImageLayout,
7267 VkImage destImage,
7268 VkImageLayout destImageLayout,
7269 uint32_t regionCount,
7270 const VkImageCopy* pRegions)
7271{
7272 PreCmdCopyImage(cmdBuffer, pRegions);
7273 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7274
7275 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7276}
7277
7278void PreCmdBlitImage(
7279 VkCmdBuffer cmdBuffer,
7280 const VkImageBlit* pRegions)
7281{
7282 if(cmdBuffer == nullptr)
7283 {
7284 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7285 "vkCmdBlitImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7286 return;
7287 }
7288
7289 if(pRegions == nullptr)
7290 {
7291 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7292 "vkCmdBlitImage parameter, const VkImageBlit* pRegions, is null pointer");
7293 return;
7294 }
7295 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7296 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7297 {
7298 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7299 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
7300 return;
7301 }
7302 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7303 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7304 {
7305 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7306 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
7307 return;
7308 }
7309}
7310
7311void PostCmdBlitImage(
7312 VkCmdBuffer cmdBuffer,
7313 VkImage srcImage,
7314 VkImageLayout srcImageLayout,
7315 VkImage destImage,
7316 VkImageLayout destImageLayout,
7317 uint32_t regionCount,
7318 VkTexFilter filter)
7319{
7320 if(cmdBuffer == nullptr)
7321 {
7322 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7323 "vkCmdBlitImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7324 return;
7325 }
7326
7327 if(srcImage == nullptr)
7328 {
7329 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7330 "vkCmdBlitImage parameter, VkImage srcImage, is null pointer");
7331 return;
7332 }
7333
7334 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7335 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7336 {
7337 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7338 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
7339 return;
7340 }
7341
7342 if(destImage == nullptr)
7343 {
7344 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7345 "vkCmdBlitImage parameter, VkImage destImage, is null pointer");
7346 return;
7347 }
7348
7349 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7350 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7351 {
7352 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7353 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
7354 return;
7355 }
7356
7357
7358 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7359 filter > VK_TEX_FILTER_END_RANGE)
7360 {
7361 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7362 "vkCmdBlitImage parameter, VkTexFilter filter, is unrecognized enumerator");
7363 return;
7364 }
7365}
7366
7367VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7368 VkCmdBuffer cmdBuffer,
7369 VkImage srcImage,
7370 VkImageLayout srcImageLayout,
7371 VkImage destImage,
7372 VkImageLayout destImageLayout,
7373 uint32_t regionCount,
7374 const VkImageBlit* pRegions,
7375 VkTexFilter filter)
7376{
7377 PreCmdBlitImage(cmdBuffer, pRegions);
7378 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7379
7380 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7381}
7382
7383void PreCmdCopyBufferToImage(
7384 VkCmdBuffer cmdBuffer,
7385 const VkBufferImageCopy* pRegions)
7386{
7387 if(cmdBuffer == nullptr)
7388 {
7389 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7390 "vkCmdCopyBufferToImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7391 return;
7392 }
7393
7394 if(pRegions == nullptr)
7395 {
7396 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7397 "vkCmdCopyBufferToImage parameter, const VkBufferImageCopy* pRegions, is null pointer");
7398 return;
7399 }
7400 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7401 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7402 {
7403 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7404 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
7405 return;
7406 }
7407}
7408
7409void PostCmdCopyBufferToImage(
7410 VkCmdBuffer cmdBuffer,
7411 VkBuffer srcBuffer,
7412 VkImage destImage,
7413 VkImageLayout destImageLayout,
7414 uint32_t regionCount)
7415{
7416 if(cmdBuffer == nullptr)
7417 {
7418 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7419 "vkCmdCopyBufferToImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7420 return;
7421 }
7422
7423 if(srcBuffer == nullptr)
7424 {
7425 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7426 "vkCmdCopyBufferToImage parameter, VkBuffer srcBuffer, is null pointer");
7427 return;
7428 }
7429
7430 if(destImage == nullptr)
7431 {
7432 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7433 "vkCmdCopyBufferToImage parameter, VkImage destImage, is null pointer");
7434 return;
7435 }
7436
7437 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7438 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7439 {
7440 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7441 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
7442 return;
7443 }
7444
7445}
7446
7447VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7448 VkCmdBuffer cmdBuffer,
7449 VkBuffer srcBuffer,
7450 VkImage destImage,
7451 VkImageLayout destImageLayout,
7452 uint32_t regionCount,
7453 const VkBufferImageCopy* pRegions)
7454{
7455 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
7456 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7457
7458 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7459}
7460
7461void PreCmdCopyImageToBuffer(
7462 VkCmdBuffer cmdBuffer,
7463 const VkBufferImageCopy* pRegions)
7464{
7465 if(cmdBuffer == nullptr)
7466 {
7467 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7468 "vkCmdCopyImageToBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7469 return;
7470 }
7471
7472 if(pRegions == nullptr)
7473 {
7474 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7475 "vkCmdCopyImageToBuffer parameter, const VkBufferImageCopy* pRegions, is null pointer");
7476 return;
7477 }
7478 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7479 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7480 {
7481 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7482 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
7483 return;
7484 }
7485}
7486
7487void PostCmdCopyImageToBuffer(
7488 VkCmdBuffer cmdBuffer,
7489 VkImage srcImage,
7490 VkImageLayout srcImageLayout,
7491 VkBuffer destBuffer,
7492 uint32_t regionCount)
7493{
7494 if(cmdBuffer == nullptr)
7495 {
7496 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7497 "vkCmdCopyImageToBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7498 return;
7499 }
7500
7501 if(srcImage == nullptr)
7502 {
7503 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7504 "vkCmdCopyImageToBuffer parameter, VkImage srcImage, is null pointer");
7505 return;
7506 }
7507
7508 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7509 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7510 {
7511 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7512 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
7513 return;
7514 }
7515
7516 if(destBuffer == nullptr)
7517 {
7518 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7519 "vkCmdCopyImageToBuffer parameter, VkBuffer destBuffer, is null pointer");
7520 return;
7521 }
7522
7523}
7524
7525VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7526 VkCmdBuffer cmdBuffer,
7527 VkImage srcImage,
7528 VkImageLayout srcImageLayout,
7529 VkBuffer destBuffer,
7530 uint32_t regionCount,
7531 const VkBufferImageCopy* pRegions)
7532{
7533 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
7534 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7535
7536 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7537}
7538
7539void PreCmdUpdateBuffer(
7540 VkCmdBuffer cmdBuffer,
7541 const uint32_t* pData)
7542{
7543 if(cmdBuffer == nullptr)
7544 {
7545 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7546 "vkCmdUpdateBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7547 return;
7548 }
7549
7550 if(pData == nullptr)
7551 {
7552 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7553 "vkCmdUpdateBuffer parameter, const uint32_t* pData, is null pointer");
7554 return;
7555 }
7556}
7557
7558void PostCmdUpdateBuffer(
7559 VkCmdBuffer cmdBuffer,
7560 VkBuffer destBuffer,
7561 VkDeviceSize destOffset,
7562 VkDeviceSize dataSize)
7563{
7564 if(cmdBuffer == nullptr)
7565 {
7566 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7567 "vkCmdUpdateBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7568 return;
7569 }
7570
7571 if(destBuffer == nullptr)
7572 {
7573 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7574 "vkCmdUpdateBuffer parameter, VkBuffer destBuffer, is null pointer");
7575 return;
7576 }
7577
7578
7579}
7580
7581VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7582 VkCmdBuffer cmdBuffer,
7583 VkBuffer destBuffer,
7584 VkDeviceSize destOffset,
7585 VkDeviceSize dataSize,
7586 const uint32_t* pData)
7587{
7588 PreCmdUpdateBuffer(cmdBuffer, pData);
7589 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7590
7591 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7592}
7593
7594void PreCmdFillBuffer(
7595 VkCmdBuffer cmdBuffer)
7596{
7597 if(cmdBuffer == nullptr)
7598 {
7599 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7600 "vkCmdFillBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7601 return;
7602 }
7603}
7604
7605void PostCmdFillBuffer(
7606 VkCmdBuffer cmdBuffer,
7607 VkBuffer destBuffer,
7608 VkDeviceSize destOffset,
7609 VkDeviceSize fillSize,
7610 uint32_t data)
7611{
7612 if(cmdBuffer == nullptr)
7613 {
7614 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7615 "vkCmdFillBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7616 return;
7617 }
7618
7619 if(destBuffer == nullptr)
7620 {
7621 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7622 "vkCmdFillBuffer parameter, VkBuffer destBuffer, is null pointer");
7623 return;
7624 }
7625
7626
7627
7628}
7629
7630VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7631 VkCmdBuffer cmdBuffer,
7632 VkBuffer destBuffer,
7633 VkDeviceSize destOffset,
7634 VkDeviceSize fillSize,
7635 uint32_t data)
7636{
7637 PreCmdFillBuffer(cmdBuffer);
7638 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7639
7640 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7641}
7642
7643void PreCmdClearColorImage(
7644 VkCmdBuffer cmdBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12007645 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007646 const VkImageSubresourceRange* pRanges)
7647{
7648 if(cmdBuffer == nullptr)
7649 {
7650 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7651 "vkCmdClearColorImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7652 return;
7653 }
7654
7655 if(pColor == nullptr)
7656 {
7657 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7658 "vkCmdClearColorImage parameter, const VkClearColor* pColor, is null pointer");
7659 return;
7660 }
7661
7662 if(pRanges == nullptr)
7663 {
7664 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7665 "vkCmdClearColorImage parameter, const VkImageSubresourceRange* pRanges, is null pointer");
7666 return;
7667 }
7668 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7669 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7670 {
7671 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7672 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
7673 return;
7674 }
7675}
7676
7677void PostCmdClearColorImage(
7678 VkCmdBuffer cmdBuffer,
7679 VkImage image,
7680 VkImageLayout imageLayout,
7681 uint32_t rangeCount)
7682{
7683 if(cmdBuffer == nullptr)
7684 {
7685 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7686 "vkCmdClearColorImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7687 return;
7688 }
7689
7690 if(image == nullptr)
7691 {
7692 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7693 "vkCmdClearColorImage parameter, VkImage image, is null pointer");
7694 return;
7695 }
7696
7697 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7698 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7699 {
7700 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7701 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7702 return;
7703 }
7704
7705}
7706
7707VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7708 VkCmdBuffer cmdBuffer,
7709 VkImage image,
7710 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12007711 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007712 uint32_t rangeCount,
7713 const VkImageSubresourceRange* pRanges)
7714{
7715 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
7716 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7717
7718 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7719}
7720
Chris Forbesd9be82b2015-06-22 17:21:59 +12007721void PreCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007722 VkCmdBuffer cmdBuffer,
7723 const VkImageSubresourceRange* pRanges)
7724{
7725 if(cmdBuffer == nullptr)
7726 {
7727 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7728 "vkCmdClearDepthStencil parameter, VkCmdBuffer cmdBuffer, is null pointer");
7729 return;
7730 }
7731
7732 if(pRanges == nullptr)
7733 {
7734 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7735 "vkCmdClearDepthStencil parameter, const VkImageSubresourceRange* pRanges, is null pointer");
7736 return;
7737 }
7738 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7739 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7740 {
7741 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7742 "vkCmdClearDepthStencil parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
7743 return;
7744 }
7745}
7746
Chris Forbesd9be82b2015-06-22 17:21:59 +12007747void PostCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007748 VkCmdBuffer cmdBuffer,
7749 VkImage image,
7750 VkImageLayout imageLayout,
7751 float depth,
7752 uint32_t stencil,
7753 uint32_t rangeCount)
7754{
7755 if(cmdBuffer == nullptr)
7756 {
7757 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7758 "vkCmdClearDepthStencil parameter, VkCmdBuffer cmdBuffer, is null pointer");
7759 return;
7760 }
7761
7762 if(image == nullptr)
7763 {
7764 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7765 "vkCmdClearDepthStencil parameter, VkImage image, is null pointer");
7766 return;
7767 }
7768
7769 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7770 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7771 {
7772 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7773 "vkCmdClearDepthStencil parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7774 return;
7775 }
7776
7777
7778
7779}
7780
Chris Forbesd9be82b2015-06-22 17:21:59 +12007781VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007782 VkCmdBuffer cmdBuffer,
7783 VkImage image,
7784 VkImageLayout imageLayout,
7785 float depth,
7786 uint32_t stencil,
7787 uint32_t rangeCount,
7788 const VkImageSubresourceRange* pRanges)
7789{
Chris Forbesd9be82b2015-06-22 17:21:59 +12007790 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
7791 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007792
Chris Forbesd9be82b2015-06-22 17:21:59 +12007793 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007794}
7795
7796void PreCmdResolveImage(
7797 VkCmdBuffer cmdBuffer,
7798 const VkImageResolve* pRegions)
7799{
7800 if(cmdBuffer == nullptr)
7801 {
7802 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7803 "vkCmdResolveImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7804 return;
7805 }
7806
7807 if(pRegions == nullptr)
7808 {
7809 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7810 "vkCmdResolveImage parameter, const VkImageResolve* pRegions, is null pointer");
7811 return;
7812 }
7813 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7814 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7815 {
7816 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7817 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
7818 return;
7819 }
7820 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7821 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7822 {
7823 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7824 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
7825 return;
7826 }
7827}
7828
7829void PostCmdResolveImage(
7830 VkCmdBuffer cmdBuffer,
7831 VkImage srcImage,
7832 VkImageLayout srcImageLayout,
7833 VkImage destImage,
7834 VkImageLayout destImageLayout,
7835 uint32_t regionCount)
7836{
7837 if(cmdBuffer == nullptr)
7838 {
7839 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7840 "vkCmdResolveImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7841 return;
7842 }
7843
7844 if(srcImage == nullptr)
7845 {
7846 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7847 "vkCmdResolveImage parameter, VkImage srcImage, is null pointer");
7848 return;
7849 }
7850
7851 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7852 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7853 {
7854 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7855 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
7856 return;
7857 }
7858
7859 if(destImage == nullptr)
7860 {
7861 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7862 "vkCmdResolveImage parameter, VkImage destImage, is null pointer");
7863 return;
7864 }
7865
7866 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7867 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7868 {
7869 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7870 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
7871 return;
7872 }
7873
7874}
7875
7876VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7877 VkCmdBuffer cmdBuffer,
7878 VkImage srcImage,
7879 VkImageLayout srcImageLayout,
7880 VkImage destImage,
7881 VkImageLayout destImageLayout,
7882 uint32_t regionCount,
7883 const VkImageResolve* pRegions)
7884{
7885 PreCmdResolveImage(cmdBuffer, pRegions);
7886 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7887
7888 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7889}
7890
7891void PreCmdSetEvent(
7892 VkCmdBuffer cmdBuffer)
7893{
7894 if(cmdBuffer == nullptr)
7895 {
7896 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7897 "vkCmdSetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer");
7898 return;
7899 }
7900}
7901
7902void PostCmdSetEvent(
7903 VkCmdBuffer cmdBuffer,
7904 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007905 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007906{
7907 if(cmdBuffer == nullptr)
7908 {
7909 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7910 "vkCmdSetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer");
7911 return;
7912 }
7913
7914 if(event == nullptr)
7915 {
7916 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7917 "vkCmdSetEvent parameter, VkEvent event, is null pointer");
7918 return;
7919 }
7920
Jeremy Hayes99a96322015-06-26 12:48:09 -06007921}
7922
7923VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7924 VkCmdBuffer cmdBuffer,
7925 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007926 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007927{
7928 PreCmdSetEvent(cmdBuffer);
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007929 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007930
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007931 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007932}
7933
7934void PreCmdResetEvent(
7935 VkCmdBuffer cmdBuffer)
7936{
7937 if(cmdBuffer == nullptr)
7938 {
7939 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7940 "vkCmdResetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer");
7941 return;
7942 }
7943}
7944
7945void PostCmdResetEvent(
7946 VkCmdBuffer cmdBuffer,
7947 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007948 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007949{
7950 if(cmdBuffer == nullptr)
7951 {
7952 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7953 "vkCmdResetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer");
7954 return;
7955 }
7956
7957 if(event == nullptr)
7958 {
7959 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7960 "vkCmdResetEvent parameter, VkEvent event, is null pointer");
7961 return;
7962 }
7963
Jeremy Hayes99a96322015-06-26 12:48:09 -06007964}
7965
7966VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7967 VkCmdBuffer cmdBuffer,
7968 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007969 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007970{
7971 PreCmdResetEvent(cmdBuffer);
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007972 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007973
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007974 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007975}
7976
7977void PreCmdWaitEvents(
7978 VkCmdBuffer cmdBuffer,
7979 const VkEvent* pEvents,
7980 const void** ppMemBarriers)
7981{
7982 if(cmdBuffer == nullptr)
7983 {
7984 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7985 "vkCmdWaitEvents parameter, VkCmdBuffer cmdBuffer, is null pointer");
7986 return;
7987 }
7988
7989 if(pEvents == nullptr)
7990 {
7991 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7992 "vkCmdWaitEvents parameter, const VkEvent* pEvents, is null pointer");
7993 return;
7994 }
7995 if((*pEvents) == nullptr)
7996 {
7997 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7998 "vkCmdWaitEvents parameter, const VkEvent* pEvents, is null pointer");
7999 return;
8000 }
8001
8002 if(ppMemBarriers == nullptr)
8003 {
8004 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8005 "vkCmdWaitEvents parameter, const void** ppMemBarriers, is null pointer");
8006 return;
8007 }
8008}
8009
8010void PostCmdWaitEvents(
8011 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06008012 uint32_t eventCount,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008013 VkPipelineStageFlags sourceStageMask,
8014 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06008015 uint32_t memBarrierCount)
8016{
8017 if(cmdBuffer == nullptr)
8018 {
8019 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8020 "vkCmdWaitEvents parameter, VkCmdBuffer cmdBuffer, is null pointer");
8021 return;
8022 }
8023
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008024
Jeremy Hayes99a96322015-06-26 12:48:09 -06008025
8026
8027}
8028
8029VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
8030 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06008031 uint32_t eventCount,
8032 const VkEvent* pEvents,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008033 VkPipelineStageFlags sourceStageMask,
8034 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06008035 uint32_t memBarrierCount,
8036 const void** ppMemBarriers)
8037{
8038 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008039 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06008040
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008041 PostCmdWaitEvents(cmdBuffer, eventCount, sourceStageMask, destStageMask, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06008042}
8043
8044void PreCmdPipelineBarrier(
8045 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06008046 const void** ppMemBarriers)
8047{
8048 if(cmdBuffer == nullptr)
8049 {
8050 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8051 "vkCmdPipelineBarrier parameter, VkCmdBuffer cmdBuffer, is null pointer");
8052 return;
8053 }
8054
Jeremy Hayes99a96322015-06-26 12:48:09 -06008055 if(ppMemBarriers == nullptr)
8056 {
8057 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8058 "vkCmdPipelineBarrier parameter, const void** ppMemBarriers, is null pointer");
8059 return;
8060 }
8061}
8062
8063void PostCmdPipelineBarrier(
8064 VkCmdBuffer cmdBuffer,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008065 VkPipelineStageFlags sourceStageMask,
8066 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06008067 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06008068 uint32_t memBarrierCount)
8069{
8070 if(cmdBuffer == nullptr)
8071 {
8072 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8073 "vkCmdPipelineBarrier parameter, VkCmdBuffer cmdBuffer, is null pointer");
8074 return;
8075 }
8076
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008077
Jeremy Hayes99a96322015-06-26 12:48:09 -06008078
8079
8080}
8081
8082VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
8083 VkCmdBuffer cmdBuffer,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008084 VkPipelineStageFlags sourceStageMask,
8085 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06008086 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06008087 uint32_t memBarrierCount,
8088 const void** ppMemBarriers)
8089{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008090 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
8091 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06008092
Tony Barbour0b2cfb22015-06-29 16:20:35 -06008093 PostCmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06008094}
8095
8096void PreCmdBeginQuery(
8097 VkCmdBuffer cmdBuffer)
8098{
8099 if(cmdBuffer == nullptr)
8100 {
8101 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8102 "vkCmdBeginQuery parameter, VkCmdBuffer cmdBuffer, is null pointer");
8103 return;
8104 }
8105}
8106
8107void PostCmdBeginQuery(
8108 VkCmdBuffer cmdBuffer,
8109 VkQueryPool queryPool,
8110 uint32_t slot,
8111 VkQueryControlFlags flags)
8112{
8113 if(cmdBuffer == nullptr)
8114 {
8115 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8116 "vkCmdBeginQuery parameter, VkCmdBuffer cmdBuffer, is null pointer");
8117 return;
8118 }
8119
8120 if(queryPool == nullptr)
8121 {
8122 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8123 "vkCmdBeginQuery parameter, VkQueryPool queryPool, is null pointer");
8124 return;
8125 }
8126
8127
8128 if(!ValidateEnumerator((VkQueryControlFlagBits)flags))
8129 {
8130 std::string reason = "vkCmdBeginQuery parameter, VkQueryControlFlags flags, is " + EnumeratorString((VkQueryControlFlagBits)flags);
8131 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
8132 return;
8133 }
8134}
8135
8136VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
8137 VkCmdBuffer cmdBuffer,
8138 VkQueryPool queryPool,
8139 uint32_t slot,
8140 VkQueryControlFlags flags)
8141{
8142 PreCmdBeginQuery(cmdBuffer);
8143 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8144
8145 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8146}
8147
8148void PreCmdEndQuery(
8149 VkCmdBuffer cmdBuffer)
8150{
8151 if(cmdBuffer == nullptr)
8152 {
8153 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8154 "vkCmdEndQuery parameter, VkCmdBuffer cmdBuffer, is null pointer");
8155 return;
8156 }
8157}
8158
8159void PostCmdEndQuery(
8160 VkCmdBuffer cmdBuffer,
8161 VkQueryPool queryPool,
8162 uint32_t slot)
8163{
8164 if(cmdBuffer == nullptr)
8165 {
8166 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8167 "vkCmdEndQuery parameter, VkCmdBuffer cmdBuffer, is null pointer");
8168 return;
8169 }
8170
8171 if(queryPool == nullptr)
8172 {
8173 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8174 "vkCmdEndQuery parameter, VkQueryPool queryPool, is null pointer");
8175 return;
8176 }
8177
8178}
8179
8180VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
8181 VkCmdBuffer cmdBuffer,
8182 VkQueryPool queryPool,
8183 uint32_t slot)
8184{
8185 PreCmdEndQuery(cmdBuffer);
8186 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
8187
8188 PostCmdEndQuery(cmdBuffer, queryPool, slot);
8189}
8190
8191void PreCmdResetQueryPool(
8192 VkCmdBuffer cmdBuffer)
8193{
8194 if(cmdBuffer == nullptr)
8195 {
8196 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8197 "vkCmdResetQueryPool parameter, VkCmdBuffer cmdBuffer, is null pointer");
8198 return;
8199 }
8200}
8201
8202void PostCmdResetQueryPool(
8203 VkCmdBuffer cmdBuffer,
8204 VkQueryPool queryPool,
8205 uint32_t startQuery,
8206 uint32_t queryCount)
8207{
8208 if(cmdBuffer == nullptr)
8209 {
8210 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8211 "vkCmdResetQueryPool parameter, VkCmdBuffer cmdBuffer, is null pointer");
8212 return;
8213 }
8214
8215 if(queryPool == nullptr)
8216 {
8217 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8218 "vkCmdResetQueryPool parameter, VkQueryPool queryPool, is null pointer");
8219 return;
8220 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008221}
8222
8223VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8224 VkCmdBuffer cmdBuffer,
8225 VkQueryPool queryPool,
8226 uint32_t startQuery,
8227 uint32_t queryCount)
8228{
8229 PreCmdResetQueryPool(cmdBuffer);
8230 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8231
8232 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8233}
8234
8235void PreCmdWriteTimestamp(
8236 VkCmdBuffer cmdBuffer)
8237{
8238 if(cmdBuffer == nullptr)
8239 {
8240 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8241 "vkCmdWriteTimestamp parameter, VkCmdBuffer cmdBuffer, is null pointer");
8242 return;
8243 }
8244}
8245
8246void PostCmdWriteTimestamp(
8247 VkCmdBuffer cmdBuffer,
8248 VkTimestampType timestampType,
8249 VkBuffer destBuffer,
8250 VkDeviceSize destOffset)
8251{
8252 if(cmdBuffer == nullptr)
8253 {
8254 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8255 "vkCmdWriteTimestamp parameter, VkCmdBuffer cmdBuffer, is null pointer");
8256 return;
8257 }
8258
8259 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8260 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8261 {
8262 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8263 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is unrecognized enumerator");
8264 return;
8265 }
8266
8267 if(destBuffer == nullptr)
8268 {
8269 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8270 "vkCmdWriteTimestamp parameter, VkBuffer destBuffer, is null pointer");
8271 return;
8272 }
8273
8274}
8275
8276VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8277 VkCmdBuffer cmdBuffer,
8278 VkTimestampType timestampType,
8279 VkBuffer destBuffer,
8280 VkDeviceSize destOffset)
8281{
8282 PreCmdWriteTimestamp(cmdBuffer);
8283 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8284
8285 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8286}
8287
8288void PreCmdCopyQueryPoolResults(
8289 VkCmdBuffer cmdBuffer)
8290{
8291 if(cmdBuffer == nullptr)
8292 {
8293 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8294 "vkCmdCopyQueryPoolResults parameter, VkCmdBuffer cmdBuffer, is null pointer");
8295 return;
8296 }
8297}
8298
8299void PostCmdCopyQueryPoolResults(
8300 VkCmdBuffer cmdBuffer,
8301 VkQueryPool queryPool,
8302 uint32_t startQuery,
8303 uint32_t queryCount,
8304 VkBuffer destBuffer,
8305 VkDeviceSize destOffset,
8306 VkDeviceSize destStride,
8307 VkQueryResultFlags flags)
8308{
8309 if(cmdBuffer == nullptr)
8310 {
8311 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8312 "vkCmdCopyQueryPoolResults parameter, VkCmdBuffer cmdBuffer, is null pointer");
8313 return;
8314 }
8315
8316 if(queryPool == nullptr)
8317 {
8318 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8319 "vkCmdCopyQueryPoolResults parameter, VkQueryPool queryPool, is null pointer");
8320 return;
8321 }
8322
8323
8324
8325 if(destBuffer == nullptr)
8326 {
8327 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8328 "vkCmdCopyQueryPoolResults parameter, VkBuffer destBuffer, is null pointer");
8329 return;
8330 }
8331
8332
8333
8334 if(!ValidateEnumerator((VkQueryResultFlagBits)flags))
8335 {
8336 std::string reason = "vkCmdCopyQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags);
8337 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
8338 return;
8339 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008340}
8341
Jeremy Hayesad367152015-04-17 10:36:53 -06008342VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008343 VkCmdBuffer cmdBuffer,
8344 VkQueryPool queryPool,
8345 uint32_t startQuery,
8346 uint32_t queryCount,
8347 VkBuffer destBuffer,
8348 VkDeviceSize destOffset,
8349 VkDeviceSize destStride,
8350 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06008351{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008352 PreCmdCopyQueryPoolResults(cmdBuffer);
8353 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8354
8355 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06008356}
8357
Jeremy Hayes99a96322015-06-26 12:48:09 -06008358void PreCreateFramebuffer(
8359 VkDevice device,
8360 const VkFramebufferCreateInfo* pCreateInfo)
8361{
8362 if(device == nullptr)
8363 {
8364 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8365 "vkCreateFramebuffer parameter, VkDevice device, is null pointer");
8366 return;
8367 }
8368
8369 if(pCreateInfo == nullptr)
8370 {
8371 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8372 "vkCreateFramebuffer parameter, const VkFramebufferCreateInfo* pCreateInfo, is null pointer");
8373 return;
8374 }
8375 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
8376 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
8377 {
8378 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8379 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
8380 return;
8381 }
8382 if(pCreateInfo->pColorAttachments == nullptr)
8383 {
8384 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8385 "vkCreateFramebuffer parameter, const VkColorAttachmentBindInfo* pCreateInfo->pColorAttachments, is null pointer");
8386 return;
8387 }
8388 if(pCreateInfo->pColorAttachments->view == nullptr)
8389 {
8390 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8391 "vkCreateFramebuffer parameter, VkColorAttachmentView pCreateInfo->pColorAttachments->view, is null pointer");
8392 return;
8393 }
8394 if(pCreateInfo->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8395 pCreateInfo->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
8396 {
8397 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8398 "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pColorAttachments->layout, is unrecognized enumerator");
8399 return;
8400 }
8401 if(pCreateInfo->pDepthStencilAttachment == nullptr)
8402 {
8403 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8404 "vkCreateFramebuffer parameter, const VkDepthStencilBindInfo* pCreateInfo->pDepthStencilAttachment, is null pointer");
8405 return;
8406 }
8407 if(pCreateInfo->pDepthStencilAttachment->view == nullptr)
8408 {
8409 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8410 "vkCreateFramebuffer parameter, VkDepthStencilView pCreateInfo->pDepthStencilAttachment->view, is null pointer");
8411 return;
8412 }
8413 if(pCreateInfo->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8414 pCreateInfo->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)
8415 {
8416 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8417 "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pDepthStencilAttachment->layout, is unrecognized enumerator");
8418 return;
8419 }
8420}
8421
8422void PostCreateFramebuffer(
8423 VkDevice device,
8424 VkFramebuffer* pFramebuffer,
8425 VkResult result)
8426{
8427 if(device == nullptr)
8428 {
8429 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8430 "vkCreateFramebuffer parameter, VkDevice device, is null pointer");
8431 return;
8432 }
8433
8434 if(pFramebuffer == nullptr)
8435 {
8436 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8437 "vkCreateFramebuffer parameter, VkFramebuffer* pFramebuffer, is null pointer");
8438 return;
8439 }
8440 if((*pFramebuffer) == nullptr)
8441 {
8442 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8443 "vkCreateFramebuffer parameter, VkFramebuffer* pFramebuffer, is null pointer");
8444 return;
8445 }
8446
8447 if(result != VK_SUCCESS)
8448 {
8449 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
8450 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
8451 return;
8452 }
8453}
8454
8455VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
8456 VkDevice device,
8457 const VkFramebufferCreateInfo* pCreateInfo,
8458 VkFramebuffer* pFramebuffer)
8459{
8460 PreCreateFramebuffer(device, pCreateInfo);
8461 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
8462
8463 PostCreateFramebuffer(device, pFramebuffer, result);
8464
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008465 return result;
8466}
8467
Jeremy Hayes99a96322015-06-26 12:48:09 -06008468void PreCreateRenderPass(
8469 VkDevice device,
8470 const VkRenderPassCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008471{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008472 if(device == nullptr)
8473 {
8474 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8475 "vkCreateRenderPass parameter, VkDevice device, is null pointer");
8476 return;
8477 }
8478
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008479 if(pCreateInfo == nullptr)
8480 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008481 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8482 "vkCreateRenderPass parameter, const VkRenderPassCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008483 return;
8484 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008485 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
8486 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008487 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008488 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8489 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008490 return;
8491 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008492 if(pCreateInfo->pColorFormats == nullptr)
8493 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008494 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8495 "vkCreateRenderPass parameter, const VkFormat* pCreateInfo->pColorFormats, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008496 return;
8497 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008498 if((*pCreateInfo->pColorFormats) < VK_FORMAT_BEGIN_RANGE ||
8499 (*pCreateInfo->pColorFormats) > VK_FORMAT_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008500 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008501 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8502 "vkCreateRenderPass parameter, const VkFormat* pCreateInfo->pColorFormats, is unrecognized enumerator");
8503 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008504 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008505 if(pCreateInfo->pColorLayouts == nullptr)
8506 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008507 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8508 "vkCreateRenderPass parameter, const VkImageLayout* pCreateInfo->pColorLayouts, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008509 return;
8510 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008511 if((*pCreateInfo->pColorLayouts) < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8512 (*pCreateInfo->pColorLayouts) > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008513 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008514 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8515 "vkCreateRenderPass parameter, const VkImageLayout* pCreateInfo->pColorLayouts, is unrecognized enumerator");
8516 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008517 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008518 if(pCreateInfo->pColorLoadOps == nullptr)
8519 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008520 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8521 "vkCreateRenderPass parameter, const VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008522 return;
8523 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008524 if((*pCreateInfo->pColorLoadOps) < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
8525 (*pCreateInfo->pColorLoadOps) > VK_ATTACHMENT_LOAD_OP_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008526 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008527 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8528 "vkCreateRenderPass parameter, const VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, is unrecognized enumerator");
8529 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008530 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008531 if(pCreateInfo->pColorStoreOps == nullptr)
8532 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008533 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8534 "vkCreateRenderPass parameter, const VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008535 return;
8536 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008537 if((*pCreateInfo->pColorStoreOps) < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
8538 (*pCreateInfo->pColorStoreOps) > VK_ATTACHMENT_STORE_OP_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008539 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008540 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8541 "vkCreateRenderPass parameter, const VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, is unrecognized enumerator");
8542 return;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008543 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008544 if(pCreateInfo->pColorLoadClearValues == nullptr)
8545 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008546 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8547 "vkCreateRenderPass parameter, const VkClearColor* pCreateInfo->pColorLoadClearValues, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008548 return;
8549 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008550 if(pCreateInfo->depthStencilFormat < VK_FORMAT_BEGIN_RANGE ||
8551 pCreateInfo->depthStencilFormat > VK_FORMAT_END_RANGE)
Jeremy Hayesb1792dd2015-04-07 09:49:05 -06008552 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008553 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8554 "vkCreateRenderPass parameter, VkFormat pCreateInfo->depthStencilFormat, is unrecognized enumerator");
Jeremy Hayesb1792dd2015-04-07 09:49:05 -06008555 return;
8556 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008557 if(pCreateInfo->depthStencilLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8558 pCreateInfo->depthStencilLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesb1792dd2015-04-07 09:49:05 -06008559 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008560 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8561 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->depthStencilLayout, is unrecognized enumerator");
Jeremy Hayesb1792dd2015-04-07 09:49:05 -06008562 return;
8563 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008564 if(pCreateInfo->depthLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
8565 pCreateInfo->depthLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008566 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008567 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8568 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->depthLoadOp, is unrecognized enumerator");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008569 return;
8570 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008571 if(pCreateInfo->depthStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
8572 pCreateInfo->depthStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008573 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008574 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8575 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->depthStoreOp, is unrecognized enumerator");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008576 return;
8577 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008578 if(pCreateInfo->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
8579 pCreateInfo->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008580 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008581 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8582 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->stencilLoadOp, is unrecognized enumerator");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008583 return;
8584 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008585 if(pCreateInfo->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
8586 pCreateInfo->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008587 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008588 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8589 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->stencilStoreOp, is unrecognized enumerator");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008590 return;
8591 }
8592}
8593
Jeremy Hayes99a96322015-06-26 12:48:09 -06008594void PostCreateRenderPass(
8595 VkDevice device,
8596 VkRenderPass* pRenderPass,
8597 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008598{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008599 if(device == nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008600 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008601 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8602 "vkCreateRenderPass parameter, VkDevice device, is null pointer");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008603 return;
8604 }
8605
8606 if(pRenderPass == nullptr)
8607 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008608 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8609 "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is null pointer");
8610 return;
8611 }
8612 if((*pRenderPass) == nullptr)
8613 {
8614 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8615 "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is null pointer");
8616 return;
8617 }
8618
8619 if(result != VK_SUCCESS)
8620 {
8621 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
8622 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008623 return;
8624 }
8625}
8626
Jeremy Hayes99a96322015-06-26 12:48:09 -06008627VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
8628 VkDevice device,
8629 const VkRenderPassCreateInfo* pCreateInfo,
8630 VkRenderPass* pRenderPass)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008631{
8632 PreCreateRenderPass(device, pCreateInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06008633 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
8634
8635 PostCreateRenderPass(device, pRenderPass, result);
8636
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008637 return result;
8638}
8639
Jeremy Hayes99a96322015-06-26 12:48:09 -06008640void PreCmdBeginRenderPass(
8641 VkCmdBuffer cmdBuffer,
8642 const VkRenderPassBegin* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008643{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008644 if(cmdBuffer == nullptr)
8645 {
8646 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8647 "vkCmdBeginRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
Jon Ashburneab34492015-06-01 09:37:38 -06008648 return;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06008649 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008650
Jeremy Hayes99a96322015-06-26 12:48:09 -06008651 if(pRenderPassBegin == nullptr)
8652 {
8653 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8654 "vkCmdBeginRenderPass parameter, const VkRenderPassBegin* pRenderPassBegin, is null pointer");
Jon Ashburneab34492015-06-01 09:37:38 -06008655 return;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06008656 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008657 if(pRenderPassBegin->renderPass == nullptr)
8658 {
8659 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8660 "vkCmdBeginRenderPass parameter, VkRenderPass pRenderPassBegin->renderPass, is null pointer");
8661 return;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06008662 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008663 if(pRenderPassBegin->framebuffer == nullptr)
8664 {
8665 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8666 "vkCmdBeginRenderPass parameter, VkFramebuffer pRenderPassBegin->framebuffer, is null pointer");
8667 return;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06008668 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008669}
8670
Jeremy Hayes99a96322015-06-26 12:48:09 -06008671void PostCmdBeginRenderPass(
8672 VkCmdBuffer cmdBuffer)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008673{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008674 if(cmdBuffer == nullptr)
8675 {
8676 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8677 "vkCmdBeginRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8678 return;
8679 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008680}
8681
Jeremy Hayes99a96322015-06-26 12:48:09 -06008682VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8683 VkCmdBuffer cmdBuffer,
8684 const VkRenderPassBegin* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008685{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008686 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8687 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8688
8689 PostCmdBeginRenderPass(cmdBuffer);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008690}
8691
Jeremy Hayes99a96322015-06-26 12:48:09 -06008692void PreCmdEndRenderPass(
8693 VkCmdBuffer cmdBuffer)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008694{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008695 if(cmdBuffer == nullptr)
8696 {
8697 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8698 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8699 return;
8700 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008701}
8702
Jeremy Hayes99a96322015-06-26 12:48:09 -06008703void PostCmdEndRenderPass(
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008704 VkCmdBuffer cmdBuffer)
Chia-I Wuf8693382015-04-16 22:02:10 +08008705{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008706 if(cmdBuffer == nullptr)
8707 {
8708 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8709 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8710 return;
8711 }
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008712}
Jeremy Hayes99a96322015-06-26 12:48:09 -06008713
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008714void PreCmdExecuteCommands(
8715 VkCmdBuffer cmdBuffer)
8716{
8717 if(cmdBuffer == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06008718 {
8719 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008720 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
8721 return;
8722 }
8723}
8724
8725void PostCmdExecuteCommands(
8726 VkCmdBuffer cmdBuffer)
8727{
8728 if(cmdBuffer == nullptr)
8729 {
8730 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8731 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
Jeremy Hayes99a96322015-06-26 12:48:09 -06008732 return;
8733 }
Chia-I Wuf8693382015-04-16 22:02:10 +08008734}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008735
Jeremy Hayes99a96322015-06-26 12:48:09 -06008736VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008737 VkCmdBuffer cmdBuffer)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008738{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008739 PreCmdEndRenderPass(cmdBuffer);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008740 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008741
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008742 PostCmdEndRenderPass(cmdBuffer);
8743}
8744
8745VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
8746 VkCmdBuffer cmdBuffer,
8747 uint32_t cmdBuffersCount,
8748 const VkCmdBuffer* pCmdBuffers)
8749{
8750 PreCmdExecuteCommands(cmdBuffer);
8751 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8752
8753 PostCmdExecuteCommands(cmdBuffer);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008754}
8755
Jon Ashburn8d1b0b52015-05-18 13:20:15 -06008756VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008757{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008758 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008759 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008760 }
8761
Jon Ashburn8fd08252015-05-28 16:25:02 -06008762 /* loader uses this to force layer initialization; device object is wrapped */
8763 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008764 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Jon Ashburn8fd08252015-05-28 16:25:02 -06008765 return (void*) vkGetDeviceProcAddr;
8766 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008767
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06008768 if (!strcmp(funcName, "vkCreateDevice"))
8769 return (void*) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008770 if (!strcmp(funcName, "vkDestroyDevice"))
8771 return (void*) vkDestroyDevice;
8772 if (!strcmp(funcName, "vkGetDeviceQueue"))
8773 return (void*) vkGetDeviceQueue;
8774 if (!strcmp(funcName, "vkQueueSubmit"))
8775 return (void*) vkQueueSubmit;
8776 if (!strcmp(funcName, "vkQueueWaitIdle"))
8777 return (void*) vkQueueWaitIdle;
8778 if (!strcmp(funcName, "vkDeviceWaitIdle"))
8779 return (void*) vkDeviceWaitIdle;
8780 if (!strcmp(funcName, "vkAllocMemory"))
8781 return (void*) vkAllocMemory;
8782 if (!strcmp(funcName, "vkFreeMemory"))
8783 return (void*) vkFreeMemory;
8784 if (!strcmp(funcName, "vkMapMemory"))
8785 return (void*) vkMapMemory;
8786 if (!strcmp(funcName, "vkUnmapMemory"))
8787 return (void*) vkUnmapMemory;
8788 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
8789 return (void*) vkFlushMappedMemoryRanges;
8790 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
8791 return (void*) vkInvalidateMappedMemoryRanges;
8792 if (!strcmp(funcName, "vkDestroyObject"))
8793 return (void*) vkDestroyObject;
8794 if (!strcmp(funcName, "vkGetObjectMemoryRequirements"))
8795 return (void*) vkGetObjectMemoryRequirements;
8796 if (!strcmp(funcName, "vkCreateFence"))
8797 return (void*) vkCreateFence;
8798 if (!strcmp(funcName, "vkResetFences"))
8799 return (void*) vkResetFences;
8800 if (!strcmp(funcName, "vkGetFenceStatus"))
8801 return (void*) vkGetFenceStatus;
8802 if (!strcmp(funcName, "vkWaitForFences"))
8803 return (void*) vkWaitForFences;
8804 if (!strcmp(funcName, "vkCreateSemaphore"))
8805 return (void*) vkCreateSemaphore;
8806 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
8807 return (void*) vkQueueSignalSemaphore;
8808 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
8809 return (void*) vkQueueWaitSemaphore;
8810 if (!strcmp(funcName, "vkCreateEvent"))
8811 return (void*) vkCreateEvent;
8812 if (!strcmp(funcName, "vkGetEventStatus"))
8813 return (void*) vkGetEventStatus;
8814 if (!strcmp(funcName, "vkSetEvent"))
8815 return (void*) vkSetEvent;
8816 if (!strcmp(funcName, "vkResetEvent"))
8817 return (void*) vkResetEvent;
8818 if (!strcmp(funcName, "vkCreateQueryPool"))
8819 return (void*) vkCreateQueryPool;
8820 if (!strcmp(funcName, "vkGetQueryPoolResults"))
8821 return (void*) vkGetQueryPoolResults;
8822 if (!strcmp(funcName, "vkCreateBuffer"))
8823 return (void*) vkCreateBuffer;
8824 if (!strcmp(funcName, "vkCreateBufferView"))
8825 return (void*) vkCreateBufferView;
8826 if (!strcmp(funcName, "vkCreateImage"))
8827 return (void*) vkCreateImage;
8828 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
8829 return (void*) vkGetImageSubresourceLayout;
8830 if (!strcmp(funcName, "vkCreateImageView"))
8831 return (void*) vkCreateImageView;
8832 if (!strcmp(funcName, "vkCreateColorAttachmentView"))
8833 return (void*) vkCreateColorAttachmentView;
8834 if (!strcmp(funcName, "vkCreateDepthStencilView"))
8835 return (void*) vkCreateDepthStencilView;
8836 if (!strcmp(funcName, "vkCreateShader"))
8837 return (void*) vkCreateShader;
Jon Ashburnc669cc62015-07-09 15:02:25 -06008838 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
8839 return (void*) vkCreateGraphicsPipelines;
8840 if (!strcmp(funcName, "vkCreateComputePipelines"))
8841 return (void*) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008842 if (!strcmp(funcName, "vkCreatePipelineLayout"))
8843 return (void*) vkCreatePipelineLayout;
8844 if (!strcmp(funcName, "vkCreateSampler"))
8845 return (void*) vkCreateSampler;
8846 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
8847 return (void*) vkCreateDescriptorSetLayout;
8848 if (!strcmp(funcName, "vkCreateDescriptorPool"))
8849 return (void*) vkCreateDescriptorPool;
8850 if (!strcmp(funcName, "vkResetDescriptorPool"))
8851 return (void*) vkResetDescriptorPool;
8852 if (!strcmp(funcName, "vkAllocDescriptorSets"))
8853 return (void*) vkAllocDescriptorSets;
8854 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
8855 return (void*) vkCreateDynamicViewportState;
8856 if (!strcmp(funcName, "vkCreateDynamicRasterState"))
8857 return (void*) vkCreateDynamicRasterState;
8858 if (!strcmp(funcName, "vkCreateDynamicColorBlendState"))
8859 return (void*) vkCreateDynamicColorBlendState;
8860 if (!strcmp(funcName, "vkCreateDynamicDepthStencilState"))
8861 return (void*) vkCreateDynamicDepthStencilState;
8862 if (!strcmp(funcName, "vkCreateCommandBuffer"))
8863 return (void*) vkCreateCommandBuffer;
8864 if (!strcmp(funcName, "vkBeginCommandBuffer"))
8865 return (void*) vkBeginCommandBuffer;
8866 if (!strcmp(funcName, "vkEndCommandBuffer"))
8867 return (void*) vkEndCommandBuffer;
8868 if (!strcmp(funcName, "vkResetCommandBuffer"))
8869 return (void*) vkResetCommandBuffer;
8870 if (!strcmp(funcName, "vkCmdBindPipeline"))
8871 return (void*) vkCmdBindPipeline;
8872 if (!strcmp(funcName, "vkCmdBindDynamicStateObject"))
8873 return (void*) vkCmdBindDynamicStateObject;
8874 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
8875 return (void*) vkCmdBindDescriptorSets;
8876 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
8877 return (void*) vkCmdBindVertexBuffers;
8878 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
8879 return (void*) vkCmdBindIndexBuffer;
8880 if (!strcmp(funcName, "vkCmdDraw"))
8881 return (void*) vkCmdDraw;
8882 if (!strcmp(funcName, "vkCmdDrawIndexed"))
8883 return (void*) vkCmdDrawIndexed;
8884 if (!strcmp(funcName, "vkCmdDrawIndirect"))
8885 return (void*) vkCmdDrawIndirect;
8886 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
8887 return (void*) vkCmdDrawIndexedIndirect;
8888 if (!strcmp(funcName, "vkCmdDispatch"))
8889 return (void*) vkCmdDispatch;
8890 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
8891 return (void*) vkCmdDispatchIndirect;
8892 if (!strcmp(funcName, "vkCmdCopyBuffer"))
8893 return (void*) vkCmdCopyBuffer;
8894 if (!strcmp(funcName, "vkCmdCopyImage"))
8895 return (void*) vkCmdCopyImage;
8896 if (!strcmp(funcName, "vkCmdBlitImage"))
8897 return (void*) vkCmdBlitImage;
8898 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
8899 return (void*) vkCmdCopyBufferToImage;
8900 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
8901 return (void*) vkCmdCopyImageToBuffer;
8902 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
8903 return (void*) vkCmdUpdateBuffer;
8904 if (!strcmp(funcName, "vkCmdFillBuffer"))
8905 return (void*) vkCmdFillBuffer;
8906 if (!strcmp(funcName, "vkCmdClearColorImage"))
8907 return (void*) vkCmdClearColorImage;
Chris Forbesd9be82b2015-06-22 17:21:59 +12008908 if (!strcmp(funcName, "vkCmdClearDepthStencilImage"))
8909 return (void*) vkCmdClearDepthStencilImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008910 if (!strcmp(funcName, "vkCmdResolveImage"))
8911 return (void*) vkCmdResolveImage;
8912 if (!strcmp(funcName, "vkCmdSetEvent"))
8913 return (void*) vkCmdSetEvent;
8914 if (!strcmp(funcName, "vkCmdResetEvent"))
8915 return (void*) vkCmdResetEvent;
8916 if (!strcmp(funcName, "vkCmdWaitEvents"))
8917 return (void*) vkCmdWaitEvents;
8918 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
8919 return (void*) vkCmdPipelineBarrier;
8920 if (!strcmp(funcName, "vkCmdBeginQuery"))
8921 return (void*) vkCmdBeginQuery;
8922 if (!strcmp(funcName, "vkCmdEndQuery"))
8923 return (void*) vkCmdEndQuery;
8924 if (!strcmp(funcName, "vkCmdResetQueryPool"))
8925 return (void*) vkCmdResetQueryPool;
8926 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
8927 return (void*) vkCmdWriteTimestamp;
8928 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
8929 return (void*) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008930 if (!strcmp(funcName, "vkCreateFramebuffer"))
8931 return (void*) vkCreateFramebuffer;
8932 if (!strcmp(funcName, "vkCreateRenderPass"))
8933 return (void*) vkCreateRenderPass;
8934 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
8935 return (void*) vkCmdBeginRenderPass;
8936 if (!strcmp(funcName, "vkCmdEndRenderPass"))
8937 return (void*) vkCmdEndRenderPass;
Jon Ashburneab34492015-06-01 09:37:38 -06008938
Jon Ashburneab34492015-06-01 09:37:38 -06008939 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008940 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008941 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008942 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008943 }
8944}
8945
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008946VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008947{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008948 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008949 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008950 }
8951
Jon Ashburn8fd08252015-05-28 16:25:02 -06008952 /* loader uses this to force layer initialization; instance object is wrapped */
8953 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008954 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
8955 return (void *) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06008956 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008957
Jeremy Hayes99a96322015-06-26 12:48:09 -06008958 if (!strcmp(funcName, "vkCreateInstance"))
8959 return (void*) vkCreateInstance;
8960 if (!strcmp(funcName, "vkDestroyInstance"))
8961 return (void*) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008962 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
8963 return (void*) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008964 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
8965 return (void*) vkGetPhysicalDeviceProperties;
8966 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
8967 return (void*) vkGetPhysicalDeviceFeatures;
8968 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatInfo"))
8969 return (void*) vkGetPhysicalDeviceFormatInfo;
8970 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
8971 return (void*) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06008972 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
8973 return (void*) vkGetGlobalLayerProperties;
8974 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
8975 return (void*) vkGetGlobalExtensionProperties;
8976 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
8977 return (void*) vkGetPhysicalDeviceLayerProperties;
8978 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
8979 return (void*) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06008980
Jeremy Hayes99a96322015-06-26 12:48:09 -06008981 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
8982 void* fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
8983 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06008984 return fptr;
8985
Jeremy Hayes99a96322015-06-26 12:48:09 -06008986 {
8987 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8988 return NULL;
8989 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8990 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008991}