blob: 1f55e38ffdfad69c17b72282a6fb4397c4537858 [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <iostream>
30#include <string>
31#include <sstream>
Mark Lobodzinski3723c512015-05-26 10:58:40 -050032#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060033#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060034
Tobin Ehlis7a51d902015-07-03 10:34:49 -060035#include "vk_loader_platform.h"
Tobin Ehlis2d1d9702015-07-03 09:42:57 -060036#include "vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060037#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060038#include "vk_enum_validate_helper.h"
39#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060040//The following is #included again to catch certain OS-specific functions being used:
Tobin Ehlis7a51d902015-07-03 10:34:49 -060041#include "vk_loader_platform.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060042
Tobin Ehlis56d204a2015-07-03 10:15:26 -060043#include "vk_layer_table.h"
44#include "vk_layer_data.h"
45#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060046#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060047
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060048typedef struct _layer_data {
49 debug_report_data *report_data;
50 VkDbgMsgCallback logging_callback;
51} layer_data;
Mark Lobodzinski3723c512015-05-26 10:58:40 -050052
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060053static std::unordered_map<void*, layer_data*> layer_data_map;
54static device_table_map pc_device_table_map;
55static instance_table_map pc_instance_table_map;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060056
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060057// "my instance data"
58debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060059{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060060 dispatch_key key = get_dispatch_key(object);
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 Goeltzenleuchter24d5abb2015-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 Barbour426b9052015-06-24 16:06:58 -0600145
146VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600147 const char *pLayerName,
148 uint32_t *pCount,
149 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600150{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600151 /* ParamChecker does not have any global extensions */
152 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600153}
154
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600155VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties(
156 uint32_t *pCount,
157 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600158{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600159 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
160 pc_global_layers,
161 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600162}
163
164VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600165 VkPhysicalDevice physicalDevice,
166 const char* pLayerName,
167 uint32_t* pCount,
168 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600169{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600170 /* ParamChecker does not have any physical device extensions */
171 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayescf469132015-04-17 10:36:53 -0600172}
173
Courtney Goeltzenleuchter24d5abb2015-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 Hayesea53d6f2015-06-26 12:48:09 -0600183
184static
185std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600186{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -0600384 }
Jeremy Hayesea53d6f2015-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 Lobodzinski99d272a2015-07-02 17:09:57 -0600450 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(
Jeremy Hayesea53d6f2015-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 Hayesea53d6f2015-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 Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001503 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06001532 return result;
1533}
1534
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001535void PreEnumeratePhysicalDevices(
1536 VkInstance instance,
1537 VkPhysicalDevice* pPhysicalDevices)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001538{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06001545
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06001611 return result;
1612}
1613
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001614void PreGetPhysicalDeviceFeatures(
1615 VkPhysicalDevice physicalDevice)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001616{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06001624
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06001661 return result;
1662}
1663
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001664void PreGetPhysicalDeviceFormatInfo(
1665 VkPhysicalDevice physicalDevice)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001666{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06001674
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06001733 return result;
1734}
1735
Jeremy Hayesea53d6f2015-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 Goeltzenleuchterbe637992015-06-25 18:01:43 -06001791 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-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 Hayesea53d6f2015-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 Hayesea53d6f2015-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 Goeltzenleuchtera569a502015-04-29 17:16:21 -06002597VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002598 VkDevice device,
2599 uint32_t memRangeCount,
2600 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002601{
Jeremy Hayesea53d6f2015-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 Barbour859ceab2015-04-16 19:23:13 -06002604
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002605 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2606
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002607 return result;
2608}
2609
Jeremy Hayesea53d6f2015-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 Goeltzenleuchtera569a502015-04-29 17:16:21 -06002663VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002664 VkDevice device,
2665 uint32_t memRangeCount,
2666 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002667{
Jeremy Hayesea53d6f2015-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 Goeltzenleuchtera569a502015-04-29 17:16:21 -06002670
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002671 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2672
Tony Barbour859ceab2015-04-16 19:23:13 -06002673 return result;
2674}
2675
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002676void PreDestroyObject(
2677 VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002678{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002684 }
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002698 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002699
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002706 }
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002713 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002714
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002720 }
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002744 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002745}
2746
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002754{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002760 }
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002768 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002769
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002775 }
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002782 }
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002805 return result;
2806}
2807
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002808void PreGetObjectMemoryRequirements(
2809 VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002810{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002818
Jeremy Hayesea53d6f2015-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 Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002874 return result;
2875}
2876
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002877void PreQueueBindSparseBufferMemory(
2878 VkQueue queue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002879{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002885 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002886}
2887
2888void PostQueueBindSparseBufferMemory(
2889 VkQueue queue,
2890 VkBuffer buffer,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002891 uint32_t numBindings,
2892 const VkSparseMemoryBindInfo* pBindInfo,
Jeremy Hayesea53d6f2015-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 Hayesea53d6f2015-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 Lobodzinski83d4e6a2015-07-03 15:58:09 -06002918 VkQueue queue,
2919 VkBuffer buffer,
2920 uint32_t numBindings,
2921 const VkSparseMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002922{
2923 PreQueueBindSparseBufferMemory(queue);
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002924 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002925
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002926 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002927
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002928 return result;
2929}
2930
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002931void PreQueueBindSparseImageMemory(
2932 VkQueue queue,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002933 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002934{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002940 }
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06002947 }
Jeremy Hayesea53d6f2015-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 Lobodzinski83d4e6a2015-07-03 15:58:09 -06002988 VkQueue queue,
2989 VkImage image,
2990 uint32_t numBindings,
2991 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002992{
2993 PreQueueBindSparseImageMemory(queue, pBindInfo);
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002994 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002995
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002996 PostQueueBindSparseImageMemory(queue, image, pBindInfo->mem, pBindInfo->memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002997
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002998 return result;
2999}
3000
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003001void PreCreateFence(
3002 VkDevice device,
3003 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003004{
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06003010 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003011
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003012 if(pCreateInfo == nullptr)
3013 {
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06003016 return;
3017 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003018 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3019 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003020 {
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06003023 return;
3024 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003025 if(!ValidateEnumerator((VkFenceCreateFlagBits)pCreateInfo->flags))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003026 {
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06003029 return;
3030 }
3031}
3032
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003033void PostCreateFence(
3034 VkDevice device,
3035 VkFence* pFence,
3036 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003037{
Jeremy Hayesea53d6f2015-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 Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06003058 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003059 {
Jeremy Hayesea53d6f2015-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,
3216 bool32_t waitAll,
3217 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,
3242 bool32_t waitAll,
3243 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 Hayesc6cfa572015-04-06 13:46:11 -06004059 return;
4060 }
4061
4062 if(pImage == nullptr)
4063 {
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06004079 return;
4080 }
4081}
4082
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004083VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
4084 VkDevice device,
4085 const VkImageCreateInfo* pCreateInfo,
4086 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004087{
4088 PreCreateImage(device, pCreateInfo);
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06004093 return result;
4094}
4095
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004096void PreGetImageSubresourceLayout(
4097 VkDevice device,
4098 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004099{
4100 if(device == nullptr)
4101 {
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06004179 return;
4180 }
4181
4182 if(pCreateInfo == nullptr)
4183 {
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06004186 return;
4187 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004188 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4189 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004190 {
Jeremy Hayesea53d6f2015-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 Hayesc6cfa572015-04-06 13:46:11 -06004248 return;
4249 }
4250}
4251
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004252void PostCreateImageView(
4253 VkDevice device,
4254 VkImageView* pView,
4255 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004256{
Jeremy Hayesea53d6f2015-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 Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06004277 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004278 {
Jeremy Hayesea53d6f2015-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 Goeltzenleuchter2d034fd2015-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 Hayesea53d6f2015-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 Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004594 if(pCreateInfo->pName == nullptr)
Jeremy Hayesea53d6f2015-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 Hayesea53d6f2015-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
4648void PreCreateGraphicsPipeline(
4649 VkDevice device,
4650 const VkGraphicsPipelineCreateInfo* pCreateInfo)
4651{
4652 if(device == nullptr)
4653 {
4654 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4655 "vkCreateGraphicsPipeline parameter, VkDevice device, is null pointer");
4656 return;
4657 }
4658
4659 if(pCreateInfo == nullptr)
4660 {
4661 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4662 "vkCreateGraphicsPipeline parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer");
4663 return;
4664 }
4665 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4666 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4667 {
4668 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4669 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4670 return;
4671 }
4672 if(pCreateInfo->pStages == nullptr)
4673 {
4674 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4675 "vkCreateGraphicsPipeline parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer");
4676 return;
4677 }
4678 if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4679 pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE)
4680 {
4681 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4682 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator");
4683 return;
4684 }
4685 if(pCreateInfo->pStages->pNext == nullptr)
4686 {
4687 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4688 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pNext, is null pointer");
4689 return;
4690 }
4691 if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4692 pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4693 {
4694 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4695 "vkCreateGraphicsPipeline parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator");
4696 return;
4697 }
4698 if(pCreateInfo->pStages->shader == nullptr)
4699 {
4700 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4701 "vkCreateGraphicsPipeline parameter, VkShader pCreateInfo->pStages->shader, is null pointer");
4702 return;
4703 }
4704 if(pCreateInfo->pStages->pLinkConstBufferInfo == nullptr)
4705 {
4706 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4707 "vkCreateGraphicsPipeline parameter, const VkLinkConstBuffer* pCreateInfo->pStages->pLinkConstBufferInfo, is null pointer");
4708 return;
4709 }
4710 if(pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData == nullptr)
4711 {
4712 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4713 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData, is null pointer");
4714 return;
4715 }
4716 if(pCreateInfo->pStages->pSpecializationInfo == nullptr)
4717 {
4718 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4719 "vkCreateGraphicsPipeline parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer");
4720 return;
4721 }
4722 if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr)
4723 {
4724 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4725 "vkCreateGraphicsPipeline parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer");
4726 return;
4727 }
4728 if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr)
4729 {
4730 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4731 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer");
4732 return;
4733 }
4734 if(pCreateInfo->pVertexInputState == nullptr)
4735 {
4736 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4737 "vkCreateGraphicsPipeline parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer");
4738 return;
4739 }
4740 if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4741 pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4742 {
4743 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4744 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator");
4745 return;
4746 }
4747 if(pCreateInfo->pVertexInputState->pNext == nullptr)
4748 {
4749 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4750 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pVertexInputState->pNext, is null pointer");
4751 return;
4752 }
4753 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr)
4754 {
4755 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4756 "vkCreateGraphicsPipeline parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer");
4757 return;
4758 }
4759 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4760 pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4761 {
4762 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4763 "vkCreateGraphicsPipeline parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator");
4764 return;
4765 }
4766 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr)
4767 {
4768 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4769 "vkCreateGraphicsPipeline parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer");
4770 return;
4771 }
4772 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4773 pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4774 {
4775 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4776 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator");
4777 return;
4778 }
4779 if(pCreateInfo->pIaState == nullptr)
4780 {
4781 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4782 "vkCreateGraphicsPipeline parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer");
4783 return;
4784 }
4785 if(pCreateInfo->pIaState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4786 pCreateInfo->pIaState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4787 {
4788 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4789 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator");
4790 return;
4791 }
4792 if(pCreateInfo->pIaState->pNext == nullptr)
4793 {
4794 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4795 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pIaState->pNext, is null pointer");
4796 return;
4797 }
4798 if(pCreateInfo->pIaState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4799 pCreateInfo->pIaState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4800 {
4801 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4802 "vkCreateGraphicsPipeline parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator");
4803 return;
4804 }
4805 if(pCreateInfo->pTessState == nullptr)
4806 {
4807 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4808 "vkCreateGraphicsPipeline parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer");
4809 return;
4810 }
4811 if(pCreateInfo->pTessState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4812 pCreateInfo->pTessState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4813 {
4814 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4815 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator");
4816 return;
4817 }
4818 if(pCreateInfo->pTessState->pNext == nullptr)
4819 {
4820 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4821 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pTessState->pNext, is null pointer");
4822 return;
4823 }
4824 if(pCreateInfo->pVpState == nullptr)
4825 {
4826 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4827 "vkCreateGraphicsPipeline parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer");
4828 return;
4829 }
4830 if(pCreateInfo->pVpState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4831 pCreateInfo->pVpState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4832 {
4833 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4834 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator");
4835 return;
4836 }
4837 if(pCreateInfo->pVpState->pNext == nullptr)
4838 {
4839 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4840 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pVpState->pNext, is null pointer");
4841 return;
4842 }
4843 if(pCreateInfo->pVpState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4844 pCreateInfo->pVpState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
4845 {
4846 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4847 "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator");
4848 return;
4849 }
4850 if(pCreateInfo->pVpState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE ||
4851 pCreateInfo->pVpState->depthMode > VK_DEPTH_MODE_END_RANGE)
4852 {
4853 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4854 "vkCreateGraphicsPipeline parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator");
4855 return;
4856 }
4857 if(pCreateInfo->pRsState == nullptr)
4858 {
4859 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4860 "vkCreateGraphicsPipeline parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer");
4861 return;
4862 }
4863 if(pCreateInfo->pRsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4864 pCreateInfo->pRsState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4865 {
4866 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4867 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator");
4868 return;
4869 }
4870 if(pCreateInfo->pRsState->pNext == nullptr)
4871 {
4872 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4873 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pRsState->pNext, is null pointer");
4874 return;
4875 }
4876 if(pCreateInfo->pRsState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4877 pCreateInfo->pRsState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
4878 {
4879 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4880 "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator");
4881 return;
4882 }
4883 if(pCreateInfo->pRsState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE ||
4884 pCreateInfo->pRsState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE)
4885 {
4886 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4887 "vkCreateGraphicsPipeline parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator");
4888 return;
4889 }
4890 if(pCreateInfo->pRsState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4891 pCreateInfo->pRsState->fillMode > VK_FILL_MODE_END_RANGE)
4892 {
4893 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4894 "vkCreateGraphicsPipeline parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator");
4895 return;
4896 }
4897 if(pCreateInfo->pRsState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4898 pCreateInfo->pRsState->cullMode > VK_CULL_MODE_END_RANGE)
4899 {
4900 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4901 "vkCreateGraphicsPipeline parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator");
4902 return;
4903 }
4904 if(pCreateInfo->pRsState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4905 pCreateInfo->pRsState->frontFace > VK_FRONT_FACE_END_RANGE)
4906 {
4907 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4908 "vkCreateGraphicsPipeline parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator");
4909 return;
4910 }
4911 if(pCreateInfo->pMsState == nullptr)
4912 {
4913 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4914 "vkCreateGraphicsPipeline parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer");
4915 return;
4916 }
4917 if(pCreateInfo->pMsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4918 pCreateInfo->pMsState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4919 {
4920 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4921 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator");
4922 return;
4923 }
4924 if(pCreateInfo->pMsState->pNext == nullptr)
4925 {
4926 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4927 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pMsState->pNext, is null pointer");
4928 return;
4929 }
4930 if(pCreateInfo->pDsState == nullptr)
4931 {
4932 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4933 "vkCreateGraphicsPipeline parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer");
4934 return;
4935 }
4936 if(pCreateInfo->pDsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4937 pCreateInfo->pDsState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4938 {
4939 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4940 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
4941 return;
4942 }
4943 if(pCreateInfo->pDsState->pNext == nullptr)
4944 {
4945 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4946 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pDsState->pNext, is null pointer");
4947 return;
4948 }
4949 if(pCreateInfo->pDsState->format < VK_FORMAT_BEGIN_RANGE ||
4950 pCreateInfo->pDsState->format > VK_FORMAT_END_RANGE)
4951 {
4952 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4953 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pDsState->format, is unrecognized enumerator");
4954 return;
4955 }
4956 if(pCreateInfo->pDsState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4957 pCreateInfo->pDsState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4958 {
4959 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4960 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
4961 return;
4962 }
4963 if(pCreateInfo->pDsState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4964 pCreateInfo->pDsState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4965 {
4966 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4967 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator");
4968 return;
4969 }
4970 if(pCreateInfo->pDsState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4971 pCreateInfo->pDsState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4972 {
4973 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4974 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator");
4975 return;
4976 }
4977 if(pCreateInfo->pDsState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4978 pCreateInfo->pDsState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4979 {
4980 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4981 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator");
4982 return;
4983 }
4984 if(pCreateInfo->pDsState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4985 pCreateInfo->pDsState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4986 {
4987 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4988 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator");
4989 return;
4990 }
4991 if(pCreateInfo->pDsState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4992 pCreateInfo->pDsState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4993 {
4994 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
4995 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator");
4996 return;
4997 }
4998 if(pCreateInfo->pDsState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4999 pCreateInfo->pDsState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5000 {
5001 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5002 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator");
5003 return;
5004 }
5005 if(pCreateInfo->pDsState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5006 pCreateInfo->pDsState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5007 {
5008 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5009 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator");
5010 return;
5011 }
5012 if(pCreateInfo->pDsState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5013 pCreateInfo->pDsState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5014 {
5015 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5016 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator");
5017 return;
5018 }
5019 if(pCreateInfo->pCbState == nullptr)
5020 {
5021 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5022 "vkCreateGraphicsPipeline parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer");
5023 return;
5024 }
5025 if(pCreateInfo->pCbState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5026 pCreateInfo->pCbState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5027 {
5028 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5029 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator");
5030 return;
5031 }
5032 if(pCreateInfo->pCbState->pNext == nullptr)
5033 {
5034 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5035 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pCbState->pNext, is null pointer");
5036 return;
5037 }
5038 if(pCreateInfo->pCbState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
5039 pCreateInfo->pCbState->logicOp > VK_LOGIC_OP_END_RANGE)
5040 {
5041 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5042 "vkCreateGraphicsPipeline parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator");
5043 return;
5044 }
5045 if(pCreateInfo->pCbState->pAttachments == nullptr)
5046 {
5047 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5048 "vkCreateGraphicsPipeline parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer");
5049 return;
5050 }
5051 if(pCreateInfo->pCbState->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5052 pCreateInfo->pCbState->pAttachments->format > VK_FORMAT_END_RANGE)
5053 {
5054 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5055 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator");
5056 return;
5057 }
5058 if(pCreateInfo->pCbState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
5059 pCreateInfo->pCbState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
5060 {
5061 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5062 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator");
5063 return;
5064 }
5065 if(pCreateInfo->pCbState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
5066 pCreateInfo->pCbState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
5067 {
5068 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5069 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator");
5070 return;
5071 }
5072 if(pCreateInfo->pCbState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
5073 pCreateInfo->pCbState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
5074 {
5075 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5076 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator");
5077 return;
5078 }
5079 if(pCreateInfo->pCbState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5080 pCreateInfo->pCbState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
5081 {
5082 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5083 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator");
5084 return;
5085 }
5086 if(pCreateInfo->pCbState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5087 pCreateInfo->pCbState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
5088 {
5089 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5090 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator");
5091 return;
5092 }
5093 if(pCreateInfo->pCbState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
5094 pCreateInfo->pCbState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
5095 {
5096 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5097 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator");
5098 return;
5099 }
5100 if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask))
5101 {
5102 std::string reason = "vkCreateGraphicsPipeline parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask);
5103 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5104 return;
5105 }
5106 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5107 {
5108 std::string reason = "vkCreateGraphicsPipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5109 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5110 return;
5111 }
5112 if(pCreateInfo->layout == nullptr)
5113 {
5114 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5115 "vkCreateGraphicsPipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
5116 return;
5117 }
5118}
5119
5120void PostCreateGraphicsPipeline(
5121 VkDevice device,
5122 VkPipeline* pPipeline,
5123 VkResult result)
5124{
5125 if(device == nullptr)
5126 {
5127 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5128 "vkCreateGraphicsPipeline parameter, VkDevice device, is null pointer");
5129 return;
5130 }
5131
5132 if(pPipeline == nullptr)
5133 {
5134 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5135 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5136 return;
5137 }
5138 if((*pPipeline) == nullptr)
5139 {
5140 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5141 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5142 return;
5143 }
5144
5145 if(result != VK_SUCCESS)
5146 {
5147 std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
5148 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5149 return;
5150 }
5151}
5152
5153VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(
5154 VkDevice device,
5155 const VkGraphicsPipelineCreateInfo* pCreateInfo,
5156 VkPipeline* pPipeline)
5157{
5158 PreCreateGraphicsPipeline(device, pCreateInfo);
5159 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
5160
5161 PostCreateGraphicsPipeline(device, pPipeline, result);
5162
5163 return result;
5164}
5165
5166void PreCreateGraphicsPipelineDerivative(
5167 VkDevice device,
5168 const VkGraphicsPipelineCreateInfo* pCreateInfo)
5169{
5170 if(device == nullptr)
5171 {
5172 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5173 "vkCreateGraphicsPipelineDerivative parameter, VkDevice device, is null pointer");
5174 return;
5175 }
5176
5177 if(pCreateInfo == nullptr)
5178 {
5179 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5180 "vkCreateGraphicsPipelineDerivative parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer");
5181 return;
5182 }
5183 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5184 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5185 {
5186 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5187 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5188 return;
5189 }
5190 if(pCreateInfo->pStages == nullptr)
5191 {
5192 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5193 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer");
5194 return;
5195 }
5196 if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5197 pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE)
5198 {
5199 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5200 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator");
5201 return;
5202 }
5203 if(pCreateInfo->pStages->pNext == nullptr)
5204 {
5205 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5206 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pStages->pNext, is null pointer");
5207 return;
5208 }
5209 if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5210 pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE)
5211 {
5212 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5213 "vkCreateGraphicsPipelineDerivative parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator");
5214 return;
5215 }
5216 if(pCreateInfo->pStages->shader == nullptr)
5217 {
5218 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5219 "vkCreateGraphicsPipelineDerivative parameter, VkShader pCreateInfo->pStages->shader, is null pointer");
5220 return;
5221 }
5222 if(pCreateInfo->pStages->pLinkConstBufferInfo == nullptr)
5223 {
5224 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5225 "vkCreateGraphicsPipelineDerivative parameter, const VkLinkConstBuffer* pCreateInfo->pStages->pLinkConstBufferInfo, is null pointer");
5226 return;
5227 }
5228 if(pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData == nullptr)
5229 {
5230 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5231 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pStages->pLinkConstBufferInfo->pBufferData, is null pointer");
5232 return;
5233 }
5234 if(pCreateInfo->pStages->pSpecializationInfo == nullptr)
5235 {
5236 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5237 "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer");
5238 return;
5239 }
5240 if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr)
5241 {
5242 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5243 "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer");
5244 return;
5245 }
5246 if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr)
5247 {
5248 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5249 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer");
5250 return;
5251 }
5252 if(pCreateInfo->pVertexInputState == nullptr)
5253 {
5254 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5255 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer");
5256 return;
5257 }
5258 if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5259 pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5260 {
5261 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5262 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator");
5263 return;
5264 }
5265 if(pCreateInfo->pVertexInputState->pNext == nullptr)
5266 {
5267 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5268 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pVertexInputState->pNext, is null pointer");
5269 return;
5270 }
5271 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr)
5272 {
5273 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5274 "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer");
5275 return;
5276 }
5277 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
5278 pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
5279 {
5280 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5281 "vkCreateGraphicsPipelineDerivative parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator");
5282 return;
5283 }
5284 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr)
5285 {
5286 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5287 "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer");
5288 return;
5289 }
5290 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
5291 pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
5292 {
5293 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5294 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator");
5295 return;
5296 }
5297 if(pCreateInfo->pIaState == nullptr)
5298 {
5299 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5300 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer");
5301 return;
5302 }
5303 if(pCreateInfo->pIaState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5304 pCreateInfo->pIaState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5305 {
5306 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5307 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator");
5308 return;
5309 }
5310 if(pCreateInfo->pIaState->pNext == nullptr)
5311 {
5312 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5313 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pIaState->pNext, is null pointer");
5314 return;
5315 }
5316 if(pCreateInfo->pIaState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
5317 pCreateInfo->pIaState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
5318 {
5319 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5320 "vkCreateGraphicsPipelineDerivative parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator");
5321 return;
5322 }
5323 if(pCreateInfo->pTessState == nullptr)
5324 {
5325 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5326 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer");
5327 return;
5328 }
5329 if(pCreateInfo->pTessState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5330 pCreateInfo->pTessState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5331 {
5332 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5333 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator");
5334 return;
5335 }
5336 if(pCreateInfo->pTessState->pNext == nullptr)
5337 {
5338 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5339 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pTessState->pNext, is null pointer");
5340 return;
5341 }
5342 if(pCreateInfo->pVpState == nullptr)
5343 {
5344 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5345 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer");
5346 return;
5347 }
5348 if(pCreateInfo->pVpState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5349 pCreateInfo->pVpState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5350 {
5351 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5352 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator");
5353 return;
5354 }
5355 if(pCreateInfo->pVpState->pNext == nullptr)
5356 {
5357 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5358 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pVpState->pNext, is null pointer");
5359 return;
5360 }
5361 if(pCreateInfo->pVpState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
5362 pCreateInfo->pVpState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
5363 {
5364 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5365 "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator");
5366 return;
5367 }
5368 if(pCreateInfo->pVpState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE ||
5369 pCreateInfo->pVpState->depthMode > VK_DEPTH_MODE_END_RANGE)
5370 {
5371 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5372 "vkCreateGraphicsPipelineDerivative parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator");
5373 return;
5374 }
5375 if(pCreateInfo->pRsState == nullptr)
5376 {
5377 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5378 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer");
5379 return;
5380 }
5381 if(pCreateInfo->pRsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5382 pCreateInfo->pRsState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5383 {
5384 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5385 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator");
5386 return;
5387 }
5388 if(pCreateInfo->pRsState->pNext == nullptr)
5389 {
5390 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5391 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pRsState->pNext, is null pointer");
5392 return;
5393 }
5394 if(pCreateInfo->pRsState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
5395 pCreateInfo->pRsState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
5396 {
5397 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5398 "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator");
5399 return;
5400 }
5401 if(pCreateInfo->pRsState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE ||
5402 pCreateInfo->pRsState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE)
5403 {
5404 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5405 "vkCreateGraphicsPipelineDerivative parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator");
5406 return;
5407 }
5408 if(pCreateInfo->pRsState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
5409 pCreateInfo->pRsState->fillMode > VK_FILL_MODE_END_RANGE)
5410 {
5411 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5412 "vkCreateGraphicsPipelineDerivative parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator");
5413 return;
5414 }
5415 if(pCreateInfo->pRsState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
5416 pCreateInfo->pRsState->cullMode > VK_CULL_MODE_END_RANGE)
5417 {
5418 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5419 "vkCreateGraphicsPipelineDerivative parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator");
5420 return;
5421 }
5422 if(pCreateInfo->pRsState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
5423 pCreateInfo->pRsState->frontFace > VK_FRONT_FACE_END_RANGE)
5424 {
5425 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5426 "vkCreateGraphicsPipelineDerivative parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator");
5427 return;
5428 }
5429 if(pCreateInfo->pMsState == nullptr)
5430 {
5431 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5432 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer");
5433 return;
5434 }
5435 if(pCreateInfo->pMsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5436 pCreateInfo->pMsState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5437 {
5438 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5439 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator");
5440 return;
5441 }
5442 if(pCreateInfo->pMsState->pNext == nullptr)
5443 {
5444 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5445 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pMsState->pNext, is null pointer");
5446 return;
5447 }
5448 if(pCreateInfo->pDsState == nullptr)
5449 {
5450 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5451 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer");
5452 return;
5453 }
5454 if(pCreateInfo->pDsState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5455 pCreateInfo->pDsState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5456 {
5457 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5458 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
5459 return;
5460 }
5461 if(pCreateInfo->pDsState->pNext == nullptr)
5462 {
5463 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5464 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pDsState->pNext, is null pointer");
5465 return;
5466 }
5467 if(pCreateInfo->pDsState->format < VK_FORMAT_BEGIN_RANGE ||
5468 pCreateInfo->pDsState->format > VK_FORMAT_END_RANGE)
5469 {
5470 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5471 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pDsState->format, is unrecognized enumerator");
5472 return;
5473 }
5474 if(pCreateInfo->pDsState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5475 pCreateInfo->pDsState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
5476 {
5477 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5478 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
5479 return;
5480 }
5481 if(pCreateInfo->pDsState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5482 pCreateInfo->pDsState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
5483 {
5484 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5485 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator");
5486 return;
5487 }
5488 if(pCreateInfo->pDsState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
5489 pCreateInfo->pDsState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5490 {
5491 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5492 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator");
5493 return;
5494 }
5495 if(pCreateInfo->pDsState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5496 pCreateInfo->pDsState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5497 {
5498 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5499 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator");
5500 return;
5501 }
5502 if(pCreateInfo->pDsState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5503 pCreateInfo->pDsState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5504 {
5505 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5506 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator");
5507 return;
5508 }
5509 if(pCreateInfo->pDsState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5510 pCreateInfo->pDsState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
5511 {
5512 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5513 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator");
5514 return;
5515 }
5516 if(pCreateInfo->pDsState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
5517 pCreateInfo->pDsState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5518 {
5519 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5520 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator");
5521 return;
5522 }
5523 if(pCreateInfo->pDsState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5524 pCreateInfo->pDsState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5525 {
5526 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5527 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator");
5528 return;
5529 }
5530 if(pCreateInfo->pDsState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5531 pCreateInfo->pDsState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5532 {
5533 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5534 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator");
5535 return;
5536 }
5537 if(pCreateInfo->pCbState == nullptr)
5538 {
5539 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5540 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer");
5541 return;
5542 }
5543 if(pCreateInfo->pCbState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5544 pCreateInfo->pCbState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5545 {
5546 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5547 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator");
5548 return;
5549 }
5550 if(pCreateInfo->pCbState->pNext == nullptr)
5551 {
5552 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5553 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pCbState->pNext, is null pointer");
5554 return;
5555 }
5556 if(pCreateInfo->pCbState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
5557 pCreateInfo->pCbState->logicOp > VK_LOGIC_OP_END_RANGE)
5558 {
5559 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5560 "vkCreateGraphicsPipelineDerivative parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator");
5561 return;
5562 }
5563 if(pCreateInfo->pCbState->pAttachments == nullptr)
5564 {
5565 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5566 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer");
5567 return;
5568 }
5569 if(pCreateInfo->pCbState->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5570 pCreateInfo->pCbState->pAttachments->format > VK_FORMAT_END_RANGE)
5571 {
5572 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5573 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator");
5574 return;
5575 }
5576 if(pCreateInfo->pCbState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
5577 pCreateInfo->pCbState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
5578 {
5579 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5580 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator");
5581 return;
5582 }
5583 if(pCreateInfo->pCbState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
5584 pCreateInfo->pCbState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
5585 {
5586 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5587 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator");
5588 return;
5589 }
5590 if(pCreateInfo->pCbState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
5591 pCreateInfo->pCbState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
5592 {
5593 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5594 "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator");
5595 return;
5596 }
5597 if(pCreateInfo->pCbState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5598 pCreateInfo->pCbState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
5599 {
5600 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5601 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator");
5602 return;
5603 }
5604 if(pCreateInfo->pCbState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5605 pCreateInfo->pCbState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
5606 {
5607 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5608 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator");
5609 return;
5610 }
5611 if(pCreateInfo->pCbState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
5612 pCreateInfo->pCbState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
5613 {
5614 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5615 "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator");
5616 return;
5617 }
5618 if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask))
5619 {
5620 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask);
5621 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5622 return;
5623 }
5624 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5625 {
5626 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5627 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5628 return;
5629 }
5630 if(pCreateInfo->layout == nullptr)
5631 {
5632 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5633 "vkCreateGraphicsPipelineDerivative parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
5634 return;
5635 }
5636}
5637
5638void PostCreateGraphicsPipelineDerivative(
5639 VkDevice device,
5640 VkPipeline basePipeline,
5641 VkPipeline* pPipeline,
5642 VkResult result)
5643{
5644 if(device == nullptr)
5645 {
5646 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5647 "vkCreateGraphicsPipelineDerivative parameter, VkDevice device, is null pointer");
5648 return;
5649 }
5650
5651 if(basePipeline == nullptr)
5652 {
5653 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5654 "vkCreateGraphicsPipelineDerivative parameter, VkPipeline basePipeline, is null pointer");
5655 return;
5656 }
5657
5658 if(pPipeline == nullptr)
5659 {
5660 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5661 "vkCreateGraphicsPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer");
5662 return;
5663 }
5664 if((*pPipeline) == nullptr)
5665 {
5666 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5667 "vkCreateGraphicsPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer");
5668 return;
5669 }
5670
5671 if(result != VK_SUCCESS)
5672 {
5673 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkResult result, is " + EnumeratorString(result);
5674 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5675 return;
5676 }
5677}
5678
5679VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(
5680 VkDevice device,
5681 const VkGraphicsPipelineCreateInfo* pCreateInfo,
5682 VkPipeline basePipeline,
5683 VkPipeline* pPipeline)
5684{
5685 PreCreateGraphicsPipelineDerivative(device, pCreateInfo);
5686 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
5687
5688 PostCreateGraphicsPipelineDerivative(device, basePipeline, pPipeline, result);
5689
5690 return result;
5691}
5692
5693void PreCreateComputePipeline(
5694 VkDevice device,
5695 const VkComputePipelineCreateInfo* pCreateInfo)
5696{
5697 if(device == nullptr)
5698 {
5699 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5700 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5701 return;
5702 }
5703
5704 if(pCreateInfo == nullptr)
5705 {
5706 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5707 "vkCreateComputePipeline parameter, const VkComputePipelineCreateInfo* pCreateInfo, is null pointer");
5708 return;
5709 }
5710 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5711 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5712 {
5713 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5714 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5715 return;
5716 }
5717 if(pCreateInfo->cs.sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5718 pCreateInfo->cs.sType > VK_STRUCTURE_TYPE_END_RANGE)
5719 {
5720 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5721 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->cs.sType, is unrecognized enumerator");
5722 return;
5723 }
5724 if(pCreateInfo->cs.pNext == nullptr)
5725 {
5726 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5727 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pNext, is null pointer");
5728 return;
5729 }
5730 if(pCreateInfo->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5731 pCreateInfo->cs.stage > VK_SHADER_STAGE_END_RANGE)
5732 {
5733 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5734 "vkCreateComputePipeline parameter, VkShaderStage pCreateInfo->cs.stage, is unrecognized enumerator");
5735 return;
5736 }
5737 if(pCreateInfo->cs.shader == nullptr)
5738 {
5739 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5740 "vkCreateComputePipeline parameter, VkShader pCreateInfo->cs.shader, is null pointer");
5741 return;
5742 }
5743 if(pCreateInfo->cs.pLinkConstBufferInfo == nullptr)
5744 {
5745 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5746 "vkCreateComputePipeline parameter, const VkLinkConstBuffer* pCreateInfo->cs.pLinkConstBufferInfo, is null pointer");
5747 return;
5748 }
5749 if(pCreateInfo->cs.pLinkConstBufferInfo->pBufferData == nullptr)
5750 {
5751 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5752 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pLinkConstBufferInfo->pBufferData, is null pointer");
5753 return;
5754 }
5755 if(pCreateInfo->cs.pSpecializationInfo == nullptr)
5756 {
5757 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5758 "vkCreateComputePipeline parameter, const VkSpecializationInfo* pCreateInfo->cs.pSpecializationInfo, is null pointer");
5759 return;
5760 }
5761 if(pCreateInfo->cs.pSpecializationInfo->pMap == nullptr)
5762 {
5763 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5764 "vkCreateComputePipeline parameter, const VkSpecializationMapEntry* pCreateInfo->cs.pSpecializationInfo->pMap, is null pointer");
5765 return;
5766 }
5767 if(pCreateInfo->cs.pSpecializationInfo->pData == nullptr)
5768 {
5769 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5770 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pSpecializationInfo->pData, is null pointer");
5771 return;
5772 }
5773 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5774 {
5775 std::string reason = "vkCreateComputePipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5776 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5777 return;
5778 }
5779 if(pCreateInfo->layout == nullptr)
5780 {
5781 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5782 "vkCreateComputePipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
5783 return;
5784 }
5785}
5786
5787void PostCreateComputePipeline(
5788 VkDevice device,
5789 VkPipeline* pPipeline,
5790 VkResult result)
5791{
5792 if(device == nullptr)
5793 {
5794 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5795 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5796 return;
5797 }
5798
5799 if(pPipeline == nullptr)
5800 {
5801 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5802 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5803 return;
5804 }
5805 if((*pPipeline) == nullptr)
5806 {
5807 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5808 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5809 return;
5810 }
5811
5812 if(result != VK_SUCCESS)
5813 {
5814 std::string reason = "vkCreateComputePipeline parameter, VkResult result, is " + EnumeratorString(result);
5815 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5816 return;
5817 }
5818}
5819
5820VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(
5821 VkDevice device,
5822 const VkComputePipelineCreateInfo* pCreateInfo,
5823 VkPipeline* pPipeline)
5824{
5825 PreCreateComputePipeline(device, pCreateInfo);
5826 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipeline(device, pCreateInfo, pPipeline);
5827
5828 PostCreateComputePipeline(device, pPipeline, result);
5829
5830 return result;
5831}
5832
5833void PreStorePipeline(
5834 VkDevice device)
5835{
5836 if(device == nullptr)
5837 {
5838 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5839 "vkStorePipeline parameter, VkDevice device, is null pointer");
5840 return;
5841 }
5842}
5843
5844void PostStorePipeline(
5845 VkDevice device,
5846 VkPipeline pipeline,
5847 size_t* pDataSize,
5848 void* pData,
5849 VkResult result)
5850{
5851 if(device == nullptr)
5852 {
5853 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5854 "vkStorePipeline parameter, VkDevice device, is null pointer");
5855 return;
5856 }
5857
5858 if(pipeline == nullptr)
5859 {
5860 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5861 "vkStorePipeline parameter, VkPipeline pipeline, is null pointer");
5862 return;
5863 }
5864
5865 if(pDataSize == nullptr)
5866 {
5867 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5868 "vkStorePipeline parameter, size_t* pDataSize, is null pointer");
5869 return;
5870 }
5871
5872 if(pData == nullptr)
5873 {
5874 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5875 "vkStorePipeline parameter, void* pData, is null pointer");
5876 return;
5877 }
5878
5879 if(result != VK_SUCCESS)
5880 {
5881 std::string reason = "vkStorePipeline parameter, VkResult result, is " + EnumeratorString(result);
5882 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5883 return;
5884 }
5885}
5886
5887VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(
5888 VkDevice device,
5889 VkPipeline pipeline,
5890 size_t* pDataSize,
5891 void* pData)
5892{
5893 PreStorePipeline(device);
5894 VkResult result = get_dispatch_table(pc_device_table_map, device)->StorePipeline(device, pipeline, pDataSize, pData);
5895
5896 PostStorePipeline(device, pipeline, pDataSize, pData, result);
5897
5898 return result;
5899}
5900
5901void PreLoadPipeline(
5902 VkDevice device,
5903 const void* pData)
5904{
5905 if(device == nullptr)
5906 {
5907 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5908 "vkLoadPipeline parameter, VkDevice device, is null pointer");
5909 return;
5910 }
5911
5912 if(pData == nullptr)
5913 {
5914 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5915 "vkLoadPipeline parameter, const void* pData, is null pointer");
5916 return;
5917 }
5918}
5919
5920void PostLoadPipeline(
5921 VkDevice device,
5922 size_t dataSize,
5923 VkPipeline* pPipeline,
5924 VkResult result)
5925{
5926 if(device == nullptr)
5927 {
5928 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5929 "vkLoadPipeline parameter, VkDevice device, is null pointer");
5930 return;
5931 }
5932
5933
5934 if(pPipeline == nullptr)
5935 {
5936 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5937 "vkLoadPipeline parameter, VkPipeline* pPipeline, is null pointer");
5938 return;
5939 }
5940 if((*pPipeline) == nullptr)
5941 {
5942 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5943 "vkLoadPipeline parameter, VkPipeline* pPipeline, is null pointer");
5944 return;
5945 }
5946
5947 if(result != VK_SUCCESS)
5948 {
5949 std::string reason = "vkLoadPipeline parameter, VkResult result, is " + EnumeratorString(result);
5950 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
5951 return;
5952 }
5953}
5954
5955VK_LAYER_EXPORT VkResult VKAPI vkLoadPipeline(
5956 VkDevice device,
5957 size_t dataSize,
5958 const void* pData,
5959 VkPipeline* pPipeline)
5960{
5961 PreLoadPipeline(device, pData);
5962 VkResult result = get_dispatch_table(pc_device_table_map, device)->LoadPipeline(device, dataSize, pData, pPipeline);
5963
5964 PostLoadPipeline(device, dataSize, pPipeline, result);
5965
5966 return result;
5967}
5968
5969void PreLoadPipelineDerivative(
5970 VkDevice device,
5971 const void* pData)
5972{
5973 if(device == nullptr)
5974 {
5975 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5976 "vkLoadPipelineDerivative parameter, VkDevice device, is null pointer");
5977 return;
5978 }
5979
5980 if(pData == nullptr)
5981 {
5982 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5983 "vkLoadPipelineDerivative parameter, const void* pData, is null pointer");
5984 return;
5985 }
5986}
5987
5988void PostLoadPipelineDerivative(
5989 VkDevice device,
5990 size_t dataSize,
5991 VkPipeline basePipeline,
5992 VkPipeline* pPipeline,
5993 VkResult result)
5994{
5995 if(device == nullptr)
5996 {
5997 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
5998 "vkLoadPipelineDerivative parameter, VkDevice device, is null pointer");
5999 return;
6000 }
6001
6002
6003 if(basePipeline == nullptr)
6004 {
6005 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6006 "vkLoadPipelineDerivative parameter, VkPipeline basePipeline, is null pointer");
6007 return;
6008 }
6009
6010 if(pPipeline == nullptr)
6011 {
6012 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6013 "vkLoadPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer");
6014 return;
6015 }
6016 if((*pPipeline) == nullptr)
6017 {
6018 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6019 "vkLoadPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer");
6020 return;
6021 }
6022
6023 if(result != VK_SUCCESS)
6024 {
6025 std::string reason = "vkLoadPipelineDerivative parameter, VkResult result, is " + EnumeratorString(result);
6026 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6027 return;
6028 }
6029}
6030
6031VK_LAYER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(
6032 VkDevice device,
6033 size_t dataSize,
6034 const void* pData,
6035 VkPipeline basePipeline,
6036 VkPipeline* pPipeline)
6037{
6038 PreLoadPipelineDerivative(device, pData);
6039 VkResult result = get_dispatch_table(pc_device_table_map, device)->LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
6040
6041 PostLoadPipelineDerivative(device, dataSize, basePipeline, pPipeline, result);
6042
6043 return result;
6044}
6045
6046void PreCreatePipelineLayout(
6047 VkDevice device,
6048 const VkPipelineLayoutCreateInfo* pCreateInfo)
6049{
6050 if(device == nullptr)
6051 {
6052 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6053 "vkCreatePipelineLayout parameter, VkDevice device, is null pointer");
6054 return;
6055 }
6056
6057 if(pCreateInfo == nullptr)
6058 {
6059 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6060 "vkCreatePipelineLayout parameter, const VkPipelineLayoutCreateInfo* pCreateInfo, is null pointer");
6061 return;
6062 }
6063 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6064 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6065 {
6066 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6067 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6068 return;
6069 }
6070 if(pCreateInfo->pSetLayouts == nullptr)
6071 {
6072 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6073 "vkCreatePipelineLayout parameter, const VkDescriptorSetLayout* pCreateInfo->pSetLayouts, is null pointer");
6074 return;
6075 }
6076 if((*pCreateInfo->pSetLayouts) == nullptr)
6077 {
6078 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6079 "vkCreatePipelineLayout parameter, const VkDescriptorSetLayout* pCreateInfo->pSetLayouts, is null pointer");
6080 return;
6081 }
6082}
6083
6084void PostCreatePipelineLayout(
6085 VkDevice device,
6086 VkPipelineLayout* pPipelineLayout,
6087 VkResult result)
6088{
6089 if(device == nullptr)
6090 {
6091 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6092 "vkCreatePipelineLayout parameter, VkDevice device, is null pointer");
6093 return;
6094 }
6095
6096 if(pPipelineLayout == nullptr)
6097 {
6098 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6099 "vkCreatePipelineLayout parameter, VkPipelineLayout* pPipelineLayout, is null pointer");
6100 return;
6101 }
6102 if((*pPipelineLayout) == nullptr)
6103 {
6104 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6105 "vkCreatePipelineLayout parameter, VkPipelineLayout* pPipelineLayout, is null pointer");
6106 return;
6107 }
6108
6109 if(result != VK_SUCCESS)
6110 {
6111 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
6112 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6113 return;
6114 }
6115}
6116
6117VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
6118 VkDevice device,
6119 const VkPipelineLayoutCreateInfo* pCreateInfo,
6120 VkPipelineLayout* pPipelineLayout)
6121{
6122 PreCreatePipelineLayout(device, pCreateInfo);
6123 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
6124
6125 PostCreatePipelineLayout(device, pPipelineLayout, result);
6126
6127 return result;
6128}
6129
6130void PreCreateSampler(
6131 VkDevice device,
6132 const VkSamplerCreateInfo* pCreateInfo)
6133{
6134 if(device == nullptr)
6135 {
6136 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6137 "vkCreateSampler parameter, VkDevice device, is null pointer");
6138 return;
6139 }
6140
6141 if(pCreateInfo == nullptr)
6142 {
6143 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6144 "vkCreateSampler parameter, const VkSamplerCreateInfo* pCreateInfo, is null pointer");
6145 return;
6146 }
6147 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6148 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6149 {
6150 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6151 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6152 return;
6153 }
6154 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
6155 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
6156 {
6157 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6158 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is unrecognized enumerator");
6159 return;
6160 }
6161 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
6162 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
6163 {
6164 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6165 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is unrecognized enumerator");
6166 return;
6167 }
6168 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
6169 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
6170 {
6171 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6172 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is unrecognized enumerator");
6173 return;
6174 }
6175 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
6176 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
6177 {
6178 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6179 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is unrecognized enumerator");
6180 return;
6181 }
6182 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
6183 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
6184 {
6185 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6186 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is unrecognized enumerator");
6187 return;
6188 }
6189 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
6190 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
6191 {
6192 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6193 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is unrecognized enumerator");
6194 return;
6195 }
6196 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
6197 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
6198 {
6199 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6200 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is unrecognized enumerator");
6201 return;
6202 }
6203 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
6204 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
6205 {
6206 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6207 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is unrecognized enumerator");
6208 return;
6209 }
6210}
6211
6212void PostCreateSampler(
6213 VkDevice device,
6214 VkSampler* pSampler,
6215 VkResult result)
6216{
6217 if(device == nullptr)
6218 {
6219 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6220 "vkCreateSampler parameter, VkDevice device, is null pointer");
6221 return;
6222 }
6223
6224 if(pSampler == nullptr)
6225 {
6226 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6227 "vkCreateSampler parameter, VkSampler* pSampler, is null pointer");
6228 return;
6229 }
6230 if((*pSampler) == nullptr)
6231 {
6232 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6233 "vkCreateSampler parameter, VkSampler* pSampler, is null pointer");
6234 return;
6235 }
6236
6237 if(result != VK_SUCCESS)
6238 {
6239 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
6240 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6241 return;
6242 }
6243}
6244
6245VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
6246 VkDevice device,
6247 const VkSamplerCreateInfo* pCreateInfo,
6248 VkSampler* pSampler)
6249{
6250 PreCreateSampler(device, pCreateInfo);
6251 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
6252
6253 PostCreateSampler(device, pSampler, result);
6254
6255 return result;
6256}
6257
6258void PreCreateDescriptorSetLayout(
6259 VkDevice device,
6260 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
6261{
6262 if(device == nullptr)
6263 {
6264 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6265 "vkCreateDescriptorSetLayout parameter, VkDevice device, is null pointer");
6266 return;
6267 }
6268
6269 if(pCreateInfo == nullptr)
6270 {
6271 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6272 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, is null pointer");
6273 return;
6274 }
6275 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6276 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6277 {
6278 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6279 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6280 return;
6281 }
6282 if(pCreateInfo->pBinding == nullptr)
6283 {
6284 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6285 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutBinding* pCreateInfo->pBinding, is null pointer");
6286 return;
6287 }
6288 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
6289 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
6290 {
6291 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6292 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is unrecognized enumerator");
6293 return;
6294 }
6295 if(!ValidateEnumerator((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags))
6296 {
6297 std::string reason = "vkCreateDescriptorSetLayout parameter, VkShaderStageFlags pCreateInfo->pBinding->stageFlags, is " + EnumeratorString((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags);
6298 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6299 return;
6300 }
6301 if(pCreateInfo->pBinding->pImmutableSamplers == nullptr)
6302 {
6303 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6304 "vkCreateDescriptorSetLayout parameter, const VkSampler* pCreateInfo->pBinding->pImmutableSamplers, is null pointer");
6305 return;
6306 }
6307 if((*pCreateInfo->pBinding->pImmutableSamplers) == nullptr)
6308 {
6309 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6310 "vkCreateDescriptorSetLayout parameter, const VkSampler* pCreateInfo->pBinding->pImmutableSamplers, is null pointer");
6311 return;
6312 }
6313}
6314
6315void PostCreateDescriptorSetLayout(
6316 VkDevice device,
6317 VkDescriptorSetLayout* pSetLayout,
6318 VkResult result)
6319{
6320 if(device == nullptr)
6321 {
6322 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6323 "vkCreateDescriptorSetLayout parameter, VkDevice device, is null pointer");
6324 return;
6325 }
6326
6327 if(pSetLayout == nullptr)
6328 {
6329 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6330 "vkCreateDescriptorSetLayout parameter, VkDescriptorSetLayout* pSetLayout, is null pointer");
6331 return;
6332 }
6333 if((*pSetLayout) == nullptr)
6334 {
6335 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6336 "vkCreateDescriptorSetLayout parameter, VkDescriptorSetLayout* pSetLayout, is null pointer");
6337 return;
6338 }
6339
6340 if(result != VK_SUCCESS)
6341 {
6342 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
6343 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6344 return;
6345 }
6346}
6347
6348VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
6349 VkDevice device,
6350 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
6351 VkDescriptorSetLayout* pSetLayout)
6352{
6353 PreCreateDescriptorSetLayout(device, pCreateInfo);
6354 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
6355
6356 PostCreateDescriptorSetLayout(device, pSetLayout, result);
6357
6358 return result;
6359}
6360
6361void PreCreateDescriptorPool(
6362 VkDevice device,
6363 const VkDescriptorPoolCreateInfo* pCreateInfo)
6364{
6365 if(device == nullptr)
6366 {
6367 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6368 "vkCreateDescriptorPool parameter, VkDevice device, is null pointer");
6369 return;
6370 }
6371
6372 if(pCreateInfo == nullptr)
6373 {
6374 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6375 "vkCreateDescriptorPool parameter, const VkDescriptorPoolCreateInfo* pCreateInfo, is null pointer");
6376 return;
6377 }
6378 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6379 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6380 {
6381 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6382 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6383 return;
6384 }
6385 if(pCreateInfo->pTypeCount == nullptr)
6386 {
6387 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6388 "vkCreateDescriptorPool parameter, const VkDescriptorTypeCount* pCreateInfo->pTypeCount, is null pointer");
6389 return;
6390 }
6391 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
6392 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
6393 {
6394 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6395 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is unrecognized enumerator");
6396 return;
6397 }
6398}
6399
6400void PostCreateDescriptorPool(
6401 VkDevice device,
6402 VkDescriptorPoolUsage poolUsage,
6403 uint32_t maxSets,
6404 VkDescriptorPool* pDescriptorPool,
6405 VkResult result)
6406{
6407 if(device == nullptr)
6408 {
6409 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6410 "vkCreateDescriptorPool parameter, VkDevice device, is null pointer");
6411 return;
6412 }
6413
6414 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
6415 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
6416 {
6417 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6418 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is unrecognized enumerator");
6419 return;
6420 }
6421
6422
6423 if(pDescriptorPool == nullptr)
6424 {
6425 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6426 "vkCreateDescriptorPool parameter, VkDescriptorPool* pDescriptorPool, is null pointer");
6427 return;
6428 }
6429 if((*pDescriptorPool) == nullptr)
6430 {
6431 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6432 "vkCreateDescriptorPool parameter, VkDescriptorPool* pDescriptorPool, is null pointer");
6433 return;
6434 }
6435
6436 if(result != VK_SUCCESS)
6437 {
6438 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
6439 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6440 return;
6441 }
6442}
6443
6444VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
6445 VkDevice device,
6446 VkDescriptorPoolUsage poolUsage,
6447 uint32_t maxSets,
6448 const VkDescriptorPoolCreateInfo* pCreateInfo,
6449 VkDescriptorPool* pDescriptorPool)
6450{
6451 PreCreateDescriptorPool(device, pCreateInfo);
6452 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
6453
6454 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
6455
6456 return result;
6457}
6458
6459void PreResetDescriptorPool(
6460 VkDevice device)
6461{
6462 if(device == nullptr)
6463 {
6464 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6465 "vkResetDescriptorPool parameter, VkDevice device, is null pointer");
6466 return;
6467 }
6468}
6469
6470void PostResetDescriptorPool(
6471 VkDevice device,
6472 VkDescriptorPool descriptorPool,
6473 VkResult result)
6474{
6475 if(device == nullptr)
6476 {
6477 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6478 "vkResetDescriptorPool parameter, VkDevice device, is null pointer");
6479 return;
6480 }
6481
6482 if(descriptorPool == nullptr)
6483 {
6484 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6485 "vkResetDescriptorPool parameter, VkDescriptorPool descriptorPool, is null pointer");
6486 return;
6487 }
6488
6489 if(result != VK_SUCCESS)
6490 {
6491 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
6492 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6493 return;
6494 }
6495}
6496
6497VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
6498 VkDevice device,
6499 VkDescriptorPool descriptorPool)
6500{
6501 PreResetDescriptorPool(device);
6502 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
6503
6504 PostResetDescriptorPool(device, descriptorPool, result);
6505
6506 return result;
6507}
6508
6509void PreAllocDescriptorSets(
6510 VkDevice device,
6511 const VkDescriptorSetLayout* pSetLayouts)
6512{
6513 if(device == nullptr)
6514 {
6515 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6516 "vkAllocDescriptorSets parameter, VkDevice device, is null pointer");
6517 return;
6518 }
6519
6520 if(pSetLayouts == nullptr)
6521 {
6522 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6523 "vkAllocDescriptorSets parameter, const VkDescriptorSetLayout* pSetLayouts, is null pointer");
6524 return;
6525 }
6526 if((*pSetLayouts) == nullptr)
6527 {
6528 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6529 "vkAllocDescriptorSets parameter, const VkDescriptorSetLayout* pSetLayouts, is null pointer");
6530 return;
6531 }
6532}
6533
6534void PostAllocDescriptorSets(
6535 VkDevice device,
6536 VkDescriptorPool descriptorPool,
6537 VkDescriptorSetUsage setUsage,
6538 uint32_t count,
6539 VkDescriptorSet* pDescriptorSets,
6540 uint32_t* pCount,
6541 VkResult result)
6542{
6543 if(device == nullptr)
6544 {
6545 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6546 "vkAllocDescriptorSets parameter, VkDevice device, is null pointer");
6547 return;
6548 }
6549
6550 if(descriptorPool == nullptr)
6551 {
6552 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6553 "vkAllocDescriptorSets parameter, VkDescriptorPool descriptorPool, is null pointer");
6554 return;
6555 }
6556
6557 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
6558 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
6559 {
6560 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6561 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is unrecognized enumerator");
6562 return;
6563 }
6564
6565
6566 if(pDescriptorSets == nullptr)
6567 {
6568 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6569 "vkAllocDescriptorSets parameter, VkDescriptorSet* pDescriptorSets, is null pointer");
6570 return;
6571 }
6572 if((*pDescriptorSets) == nullptr)
6573 {
6574 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6575 "vkAllocDescriptorSets parameter, VkDescriptorSet* pDescriptorSets, is null pointer");
6576 return;
6577 }
6578
6579 if(pCount == nullptr)
6580 {
6581 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6582 "vkAllocDescriptorSets parameter, uint32_t* pCount, is null pointer");
6583 return;
6584 }
6585
6586 if(result != VK_SUCCESS)
6587 {
6588 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
6589 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6590 return;
6591 }
6592}
6593
6594VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
6595 VkDevice device,
6596 VkDescriptorPool descriptorPool,
6597 VkDescriptorSetUsage setUsage,
6598 uint32_t count,
6599 const VkDescriptorSetLayout* pSetLayouts,
6600 VkDescriptorSet* pDescriptorSets,
6601 uint32_t* pCount)
6602{
6603 PreAllocDescriptorSets(device, pSetLayouts);
6604 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
6605
6606 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, pCount, result);
6607
6608 return result;
6609}
6610
6611void PreUpdateDescriptorSets(
6612 VkDevice device,
6613 const VkWriteDescriptorSet* pDescriptorWrites,
6614 const VkCopyDescriptorSet* pDescriptorCopies)
6615{
6616 if(device == nullptr)
6617 {
6618 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6619 "vkUpdateDescriptorSets parameter, VkDevice device, is null pointer");
6620 return;
6621 }
6622
6623 if(pDescriptorWrites == nullptr)
6624 {
6625 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6626 "vkUpdateDescriptorSets parameter, const VkWriteDescriptorSet* pDescriptorWrites, is null pointer");
6627 return;
6628 }
6629 if(pDescriptorWrites->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6630 pDescriptorWrites->sType > VK_STRUCTURE_TYPE_END_RANGE)
6631 {
6632 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6633 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is unrecognized enumerator");
6634 return;
6635 }
6636 if(pDescriptorWrites->pNext == nullptr)
6637 {
6638 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6639 "vkUpdateDescriptorSets parameter, const void* pDescriptorWrites->pNext, is null pointer");
6640 return;
6641 }
6642 if(pDescriptorWrites->destSet == nullptr)
6643 {
6644 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6645 "vkUpdateDescriptorSets parameter, VkDescriptorSet pDescriptorWrites->destSet, is null pointer");
6646 return;
6647 }
6648 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
6649 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
6650 {
6651 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6652 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is unrecognized enumerator");
6653 return;
6654 }
6655 if(pDescriptorWrites->pDescriptors == nullptr)
6656 {
6657 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6658 "vkUpdateDescriptorSets parameter, const VkDescriptorInfo* pDescriptorWrites->pDescriptors, is null pointer");
6659 return;
6660 }
6661 if(pDescriptorWrites->pDescriptors->bufferView == nullptr)
6662 {
6663 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6664 "vkUpdateDescriptorSets parameter, VkBufferView pDescriptorWrites->pDescriptors->bufferView, is null pointer");
6665 return;
6666 }
6667 if(pDescriptorWrites->pDescriptors->sampler == nullptr)
6668 {
6669 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6670 "vkUpdateDescriptorSets parameter, VkSampler pDescriptorWrites->pDescriptors->sampler, is null pointer");
6671 return;
6672 }
6673 if(pDescriptorWrites->pDescriptors->imageView == nullptr)
6674 {
6675 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6676 "vkUpdateDescriptorSets parameter, VkImageView pDescriptorWrites->pDescriptors->imageView, is null pointer");
6677 return;
6678 }
6679 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6680 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6681 {
6682 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6683 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is unrecognized enumerator");
6684 return;
6685 }
6686
6687 if(pDescriptorCopies == nullptr)
6688 {
6689 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6690 "vkUpdateDescriptorSets parameter, const VkCopyDescriptorSet* pDescriptorCopies, is null pointer");
6691 return;
6692 }
6693 if(pDescriptorCopies->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6694 pDescriptorCopies->sType > VK_STRUCTURE_TYPE_END_RANGE)
6695 {
6696 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6697 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is unrecognized enumerator");
6698 return;
6699 }
6700 if(pDescriptorCopies->pNext == nullptr)
6701 {
6702 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6703 "vkUpdateDescriptorSets parameter, const void* pDescriptorCopies->pNext, is null pointer");
6704 return;
6705 }
6706 if(pDescriptorCopies->srcSet == nullptr)
6707 {
6708 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6709 "vkUpdateDescriptorSets parameter, VkDescriptorSet pDescriptorCopies->srcSet, is null pointer");
6710 return;
6711 }
6712 if(pDescriptorCopies->destSet == nullptr)
6713 {
6714 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6715 "vkUpdateDescriptorSets parameter, VkDescriptorSet pDescriptorCopies->destSet, is null pointer");
6716 return;
6717 }
6718}
6719
6720void PostUpdateDescriptorSets(
6721 VkDevice device,
6722 uint32_t writeCount,
6723 uint32_t copyCount,
6724 VkResult result)
6725{
6726 if(device == nullptr)
6727 {
6728 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6729 "vkUpdateDescriptorSets parameter, VkDevice device, is null pointer");
6730 return;
6731 }
6732
6733
6734
6735 if(result != VK_SUCCESS)
6736 {
6737 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
6738 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6739 return;
6740 }
6741}
6742
6743VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
6744 VkDevice device,
6745 uint32_t writeCount,
6746 const VkWriteDescriptorSet* pDescriptorWrites,
6747 uint32_t copyCount,
6748 const VkCopyDescriptorSet* pDescriptorCopies)
6749{
6750 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
6751 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
6752
6753 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
6754
6755 return result;
6756}
6757
6758void PreCreateDynamicViewportState(
6759 VkDevice device,
6760 const VkDynamicVpStateCreateInfo* pCreateInfo)
6761{
6762 if(device == nullptr)
6763 {
6764 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6765 "vkCreateDynamicViewportState parameter, VkDevice device, is null pointer");
6766 return;
6767 }
6768
6769 if(pCreateInfo == nullptr)
6770 {
6771 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6772 "vkCreateDynamicViewportState parameter, const VkDynamicVpStateCreateInfo* pCreateInfo, is null pointer");
6773 return;
6774 }
6775 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6776 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6777 {
6778 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6779 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6780 return;
6781 }
6782 if(pCreateInfo->pViewports == nullptr)
6783 {
6784 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6785 "vkCreateDynamicViewportState parameter, const VkViewport* pCreateInfo->pViewports, is null pointer");
6786 return;
6787 }
6788 if(pCreateInfo->pScissors == nullptr)
6789 {
6790 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6791 "vkCreateDynamicViewportState parameter, const VkRect* pCreateInfo->pScissors, is null pointer");
6792 return;
6793 }
6794}
6795
6796void PostCreateDynamicViewportState(
6797 VkDevice device,
6798 VkDynamicVpState* pState,
6799 VkResult result)
6800{
6801 if(device == nullptr)
6802 {
6803 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6804 "vkCreateDynamicViewportState parameter, VkDevice device, is null pointer");
6805 return;
6806 }
6807
6808 if(pState == nullptr)
6809 {
6810 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6811 "vkCreateDynamicViewportState parameter, VkDynamicVpState* pState, is null pointer");
6812 return;
6813 }
6814 if((*pState) == nullptr)
6815 {
6816 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6817 "vkCreateDynamicViewportState parameter, VkDynamicVpState* pState, is null pointer");
6818 return;
6819 }
6820
6821 if(result != VK_SUCCESS)
6822 {
6823 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
6824 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6825 return;
6826 }
6827}
6828
6829VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
6830 VkDevice device,
6831 const VkDynamicVpStateCreateInfo* pCreateInfo,
6832 VkDynamicVpState* pState)
6833{
6834 PreCreateDynamicViewportState(device, pCreateInfo);
6835 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
6836
6837 PostCreateDynamicViewportState(device, pState, result);
6838
6839 return result;
6840}
6841
6842void PreCreateDynamicRasterState(
6843 VkDevice device,
6844 const VkDynamicRsStateCreateInfo* pCreateInfo)
6845{
6846 if(device == nullptr)
6847 {
6848 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6849 "vkCreateDynamicRasterState parameter, VkDevice device, is null pointer");
6850 return;
6851 }
6852
6853 if(pCreateInfo == nullptr)
6854 {
6855 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6856 "vkCreateDynamicRasterState parameter, const VkDynamicRsStateCreateInfo* pCreateInfo, is null pointer");
6857 return;
6858 }
6859 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6860 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6861 {
6862 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6863 "vkCreateDynamicRasterState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6864 return;
6865 }
6866}
6867
6868void PostCreateDynamicRasterState(
6869 VkDevice device,
6870 VkDynamicRsState* pState,
6871 VkResult result)
6872{
6873 if(device == nullptr)
6874 {
6875 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6876 "vkCreateDynamicRasterState parameter, VkDevice device, is null pointer");
6877 return;
6878 }
6879
6880 if(pState == nullptr)
6881 {
6882 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6883 "vkCreateDynamicRasterState parameter, VkDynamicRsState* pState, is null pointer");
6884 return;
6885 }
6886 if((*pState) == nullptr)
6887 {
6888 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6889 "vkCreateDynamicRasterState parameter, VkDynamicRsState* pState, is null pointer");
6890 return;
6891 }
6892
6893 if(result != VK_SUCCESS)
6894 {
6895 std::string reason = "vkCreateDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
6896 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6897 return;
6898 }
6899}
6900
6901VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(
6902 VkDevice device,
6903 const VkDynamicRsStateCreateInfo* pCreateInfo,
6904 VkDynamicRsState* pState)
6905{
6906 PreCreateDynamicRasterState(device, pCreateInfo);
6907 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterState(device, pCreateInfo, pState);
6908
6909 PostCreateDynamicRasterState(device, pState, result);
6910
6911 return result;
6912}
6913
6914void PreCreateDynamicColorBlendState(
6915 VkDevice device,
6916 const VkDynamicCbStateCreateInfo* pCreateInfo)
6917{
6918 if(device == nullptr)
6919 {
6920 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6921 "vkCreateDynamicColorBlendState parameter, VkDevice device, is null pointer");
6922 return;
6923 }
6924
6925 if(pCreateInfo == nullptr)
6926 {
6927 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6928 "vkCreateDynamicColorBlendState parameter, const VkDynamicCbStateCreateInfo* pCreateInfo, is null pointer");
6929 return;
6930 }
6931 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6932 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6933 {
6934 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6935 "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
6936 return;
6937 }
6938}
6939
6940void PostCreateDynamicColorBlendState(
6941 VkDevice device,
6942 VkDynamicCbState* pState,
6943 VkResult result)
6944{
6945 if(device == nullptr)
6946 {
6947 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6948 "vkCreateDynamicColorBlendState parameter, VkDevice device, is null pointer");
6949 return;
6950 }
6951
6952 if(pState == nullptr)
6953 {
6954 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6955 "vkCreateDynamicColorBlendState parameter, VkDynamicCbState* pState, is null pointer");
6956 return;
6957 }
6958 if((*pState) == nullptr)
6959 {
6960 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6961 "vkCreateDynamicColorBlendState parameter, VkDynamicCbState* pState, is null pointer");
6962 return;
6963 }
6964
6965 if(result != VK_SUCCESS)
6966 {
6967 std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
6968 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
6969 return;
6970 }
6971}
6972
6973VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
6974 VkDevice device,
6975 const VkDynamicCbStateCreateInfo* pCreateInfo,
6976 VkDynamicCbState* pState)
6977{
6978 PreCreateDynamicColorBlendState(device, pCreateInfo);
6979 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState);
6980
6981 PostCreateDynamicColorBlendState(device, pState, result);
6982
6983 return result;
6984}
6985
6986void PreCreateDynamicDepthStencilState(
6987 VkDevice device,
6988 const VkDynamicDsStateCreateInfo* pCreateInfo)
6989{
6990 if(device == nullptr)
6991 {
6992 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
6993 "vkCreateDynamicDepthStencilState parameter, VkDevice device, is null pointer");
6994 return;
6995 }
6996
6997 if(pCreateInfo == nullptr)
6998 {
6999 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7000 "vkCreateDynamicDepthStencilState parameter, const VkDynamicDsStateCreateInfo* pCreateInfo, is null pointer");
7001 return;
7002 }
7003 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
7004 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
7005 {
7006 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7007 "vkCreateDynamicDepthStencilState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
7008 return;
7009 }
7010}
7011
7012void PostCreateDynamicDepthStencilState(
7013 VkDevice device,
7014 VkDynamicDsState* pState,
7015 VkResult result)
7016{
7017 if(device == nullptr)
7018 {
7019 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7020 "vkCreateDynamicDepthStencilState parameter, VkDevice device, is null pointer");
7021 return;
7022 }
7023
7024 if(pState == nullptr)
7025 {
7026 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7027 "vkCreateDynamicDepthStencilState parameter, VkDynamicDsState* pState, is null pointer");
7028 return;
7029 }
7030 if((*pState) == nullptr)
7031 {
7032 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7033 "vkCreateDynamicDepthStencilState parameter, VkDynamicDsState* pState, is null pointer");
7034 return;
7035 }
7036
7037 if(result != VK_SUCCESS)
7038 {
7039 std::string reason = "vkCreateDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
7040 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
7041 return;
7042 }
7043}
7044
7045VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(
7046 VkDevice device,
7047 const VkDynamicDsStateCreateInfo* pCreateInfo,
7048 VkDynamicDsState* pState)
7049{
7050 PreCreateDynamicDepthStencilState(device, pCreateInfo);
7051 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
7052
7053 PostCreateDynamicDepthStencilState(device, pState, result);
7054
7055 return result;
7056}
7057
7058void PreCreateCommandBuffer(
7059 VkDevice device,
7060 const VkCmdBufferCreateInfo* pCreateInfo,
7061 VkCmdBuffer* pCmdBuffer)
7062{
7063 if(device == nullptr)
7064 {
7065 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7066 "vkCreateCommandBuffer parameter, VkDevice device, is null pointer");
7067 return;
7068 }
7069
7070 if(pCreateInfo == nullptr)
7071 {
7072 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7073 "vkCreateCommandBuffer parameter, const VkCmdBufferCreateInfo* pCreateInfo, is null pointer");
7074 return;
7075 }
7076 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
7077 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
7078 {
7079 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7080 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007081 return;
7082 }
7083
7084 if(pCmdBuffer == nullptr)
7085 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007086 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7087 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
7088 return;
7089 }
7090 if((*pCmdBuffer) == nullptr)
7091 {
7092 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7093 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007094 return;
7095 }
7096}
7097
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007098void PostCreateCommandBuffer(
7099 VkDevice device,
7100 VkCmdBuffer* pCmdBuffer,
7101 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007102{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007103 if(device == nullptr)
7104 {
7105 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7106 "vkCreateCommandBuffer parameter, VkDevice device, is null pointer");
7107 return;
7108 }
7109
7110 if(pCmdBuffer == nullptr)
7111 {
7112 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7113 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
7114 return;
7115 }
7116 if((*pCmdBuffer) == nullptr)
7117 {
7118 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7119 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
7120 return;
7121 }
7122
7123 if(result != VK_SUCCESS)
7124 {
7125 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
7126 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
7127 return;
7128 }
7129}
7130
7131VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
7132 VkDevice device,
7133 const VkCmdBufferCreateInfo* pCreateInfo,
7134 VkCmdBuffer* pCmdBuffer)
7135{
7136 PreCreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
7137 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
7138
7139 PostCreateCommandBuffer(device, pCmdBuffer, result);
7140
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007141 return result;
7142}
7143
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007144void PreBeginCommandBuffer(
7145 VkCmdBuffer cmdBuffer,
7146 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007147{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007148 if(cmdBuffer == nullptr)
7149 {
7150 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7151 "vkBeginCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7152 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007153 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007154
7155 if(pBeginInfo == nullptr)
7156 {
7157 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7158 "vkBeginCommandBuffer parameter, const VkCmdBufferBeginInfo* pBeginInfo, is null pointer");
7159 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007160 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007161 if(pBeginInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
7162 pBeginInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
7163 {
7164 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7165 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is unrecognized enumerator");
7166 return;
7167 }
7168 if(!ValidateEnumerator((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags))
7169 {
7170 std::string reason = "vkBeginCommandBuffer parameter, VkCmdBufferOptimizeFlags pBeginInfo->flags, is " + EnumeratorString((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags);
7171 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
7172 return;
7173 }
7174}
7175
7176void PostBeginCommandBuffer(
7177 VkCmdBuffer cmdBuffer,
7178 VkResult result)
7179{
7180 if(cmdBuffer == nullptr)
7181 {
7182 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7183 "vkBeginCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7184 return;
7185 }
7186
7187 if(result != VK_SUCCESS)
7188 {
7189 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
7190 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
7191 return;
7192 }
7193}
7194
7195VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
7196 VkCmdBuffer cmdBuffer,
7197 const VkCmdBufferBeginInfo* pBeginInfo)
7198{
7199 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
7200 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
7201
7202 PostBeginCommandBuffer(cmdBuffer, result);
7203
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007204 return result;
7205}
7206
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007207void PreEndCommandBuffer(
7208 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007209{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007210 if(cmdBuffer == nullptr)
7211 {
7212 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7213 "vkEndCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7214 return;
7215 }
7216}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007217
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007218void PostEndCommandBuffer(
7219 VkCmdBuffer cmdBuffer,
7220 VkResult result)
7221{
7222 if(cmdBuffer == nullptr)
7223 {
7224 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7225 "vkEndCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7226 return;
7227 }
7228
7229 if(result != VK_SUCCESS)
7230 {
7231 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
7232 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
7233 return;
7234 }
7235}
7236
7237VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
7238 VkCmdBuffer cmdBuffer)
7239{
7240 PreEndCommandBuffer(cmdBuffer);
7241 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
7242
7243 PostEndCommandBuffer(cmdBuffer, result);
7244
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007245 return result;
7246}
7247
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007248void PreResetCommandBuffer(
7249 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007250{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007251 if(cmdBuffer == nullptr)
7252 {
7253 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7254 "vkResetCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7255 return;
7256 }
7257}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007258
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007259void PostResetCommandBuffer(
7260 VkCmdBuffer cmdBuffer,
7261 VkResult result)
7262{
7263 if(cmdBuffer == nullptr)
7264 {
7265 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7266 "vkResetCommandBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7267 return;
7268 }
7269
7270 if(result != VK_SUCCESS)
7271 {
7272 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
7273 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
7274 return;
7275 }
7276}
7277
7278VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
7279 VkCmdBuffer cmdBuffer)
7280{
7281 PreResetCommandBuffer(cmdBuffer);
7282 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer);
7283
7284 PostResetCommandBuffer(cmdBuffer, result);
7285
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007286 return result;
7287}
7288
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007289void PreCmdBindPipeline(
7290 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007291{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007292 if(cmdBuffer == nullptr)
7293 {
7294 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7295 "vkCmdBindPipeline parameter, VkCmdBuffer cmdBuffer, is null pointer");
7296 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007297 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007298}
7299
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007300void PostCmdBindPipeline(
7301 VkCmdBuffer cmdBuffer,
7302 VkPipelineBindPoint pipelineBindPoint,
7303 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007304{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007305 if(cmdBuffer == nullptr)
7306 {
7307 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7308 "vkCmdBindPipeline parameter, VkCmdBuffer cmdBuffer, is null pointer");
7309 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007310 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007311
7312 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
7313 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
7314 {
7315 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7316 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
7317 return;
7318 }
7319
7320 if(pipeline == nullptr)
7321 {
7322 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7323 "vkCmdBindPipeline parameter, VkPipeline pipeline, is null pointer");
7324 return;
7325 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007326}
7327
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007328VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
7329 VkCmdBuffer cmdBuffer,
7330 VkPipelineBindPoint pipelineBindPoint,
7331 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007332{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007333 PreCmdBindPipeline(cmdBuffer);
7334 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
7335
7336 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
7337}
7338
7339void PreCmdBindDynamicStateObject(
7340 VkCmdBuffer cmdBuffer)
7341{
7342 if(cmdBuffer == nullptr)
7343 {
7344 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7345 "vkCmdBindDynamicStateObject parameter, VkCmdBuffer cmdBuffer, is null pointer");
7346 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007347 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007348}
7349
7350void PostCmdBindDynamicStateObject(
7351 VkCmdBuffer cmdBuffer,
7352 VkStateBindPoint stateBindPoint,
7353 VkDynamicStateObject dynamicState)
7354{
7355 if(cmdBuffer == nullptr)
7356 {
7357 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7358 "vkCmdBindDynamicStateObject parameter, VkCmdBuffer cmdBuffer, is null pointer");
7359 return;
7360 }
7361
7362 if(stateBindPoint < VK_STATE_BIND_POINT_BEGIN_RANGE ||
7363 stateBindPoint > VK_STATE_BIND_POINT_END_RANGE)
7364 {
7365 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7366 "vkCmdBindDynamicStateObject parameter, VkStateBindPoint stateBindPoint, is unrecognized enumerator");
7367 return;
7368 }
7369
7370 if(dynamicState == nullptr)
7371 {
7372 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7373 "vkCmdBindDynamicStateObject parameter, VkDynamicStateObject dynamicState, is null pointer");
7374 return;
7375 }
7376}
7377
7378VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject(
7379 VkCmdBuffer cmdBuffer,
7380 VkStateBindPoint stateBindPoint,
7381 VkDynamicStateObject dynamicState)
7382{
7383 PreCmdBindDynamicStateObject(cmdBuffer);
7384 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, dynamicState);
7385
7386 PostCmdBindDynamicStateObject(cmdBuffer, stateBindPoint, dynamicState);
7387}
7388
7389void PreCmdBindDescriptorSets(
7390 VkCmdBuffer cmdBuffer,
7391 const VkDescriptorSet* pDescriptorSets,
7392 const uint32_t* pDynamicOffsets)
7393{
7394 if(cmdBuffer == nullptr)
7395 {
7396 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7397 "vkCmdBindDescriptorSets parameter, VkCmdBuffer cmdBuffer, is null pointer");
7398 return;
7399 }
7400
7401 if(pDescriptorSets == nullptr)
7402 {
7403 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7404 "vkCmdBindDescriptorSets parameter, const VkDescriptorSet* pDescriptorSets, is null pointer");
7405 return;
7406 }
7407 if((*pDescriptorSets) == nullptr)
7408 {
7409 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7410 "vkCmdBindDescriptorSets parameter, const VkDescriptorSet* pDescriptorSets, is null pointer");
7411 return;
7412 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007413}
7414
7415void PostCmdBindDescriptorSets(
7416 VkCmdBuffer cmdBuffer,
7417 VkPipelineBindPoint pipelineBindPoint,
7418 VkPipelineLayout layout,
7419 uint32_t firstSet,
7420 uint32_t setCount,
7421 uint32_t dynamicOffsetCount)
7422{
7423 if(cmdBuffer == nullptr)
7424 {
7425 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7426 "vkCmdBindDescriptorSets parameter, VkCmdBuffer cmdBuffer, is null pointer");
7427 return;
7428 }
7429
7430 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
7431 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
7432 {
7433 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7434 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
7435 return;
7436 }
7437
7438 if(layout == nullptr)
7439 {
7440 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7441 "vkCmdBindDescriptorSets parameter, VkPipelineLayout layout, is null pointer");
7442 return;
7443 }
7444
7445
7446
7447}
7448
7449VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
7450 VkCmdBuffer cmdBuffer,
7451 VkPipelineBindPoint pipelineBindPoint,
7452 VkPipelineLayout layout,
7453 uint32_t firstSet,
7454 uint32_t setCount,
7455 const VkDescriptorSet* pDescriptorSets,
7456 uint32_t dynamicOffsetCount,
7457 const uint32_t* pDynamicOffsets)
7458{
7459 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
7460 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
7461
7462 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
7463}
7464
7465void PreCmdBindIndexBuffer(
7466 VkCmdBuffer cmdBuffer)
7467{
7468 if(cmdBuffer == nullptr)
7469 {
7470 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7471 "vkCmdBindIndexBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7472 return;
7473 }
7474}
7475
7476void PostCmdBindIndexBuffer(
7477 VkCmdBuffer cmdBuffer,
7478 VkBuffer buffer,
7479 VkDeviceSize offset,
7480 VkIndexType indexType)
7481{
7482 if(cmdBuffer == nullptr)
7483 {
7484 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7485 "vkCmdBindIndexBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7486 return;
7487 }
7488
7489 if(buffer == nullptr)
7490 {
7491 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7492 "vkCmdBindIndexBuffer parameter, VkBuffer buffer, is null pointer");
7493 return;
7494 }
7495
7496
7497 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
7498 indexType > VK_INDEX_TYPE_END_RANGE)
7499 {
7500 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7501 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is unrecognized enumerator");
7502 return;
7503 }
7504}
7505
7506VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
7507 VkCmdBuffer cmdBuffer,
7508 VkBuffer buffer,
7509 VkDeviceSize offset,
7510 VkIndexType indexType)
7511{
7512 PreCmdBindIndexBuffer(cmdBuffer);
7513 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7514
7515 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7516}
7517
7518void PreCmdBindVertexBuffers(
7519 VkCmdBuffer cmdBuffer,
7520 const VkBuffer* pBuffers,
7521 const VkDeviceSize* pOffsets)
7522{
7523 if(cmdBuffer == nullptr)
7524 {
7525 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7526 "vkCmdBindVertexBuffers parameter, VkCmdBuffer cmdBuffer, is null pointer");
7527 return;
7528 }
7529
7530 if(pBuffers == nullptr)
7531 {
7532 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7533 "vkCmdBindVertexBuffers parameter, const VkBuffer* pBuffers, is null pointer");
7534 return;
7535 }
7536 if((*pBuffers) == nullptr)
7537 {
7538 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7539 "vkCmdBindVertexBuffers parameter, const VkBuffer* pBuffers, is null pointer");
7540 return;
7541 }
7542
7543 if(pOffsets == nullptr)
7544 {
7545 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7546 "vkCmdBindVertexBuffers parameter, const VkDeviceSize* pOffsets, is null pointer");
7547 return;
7548 }
7549}
7550
7551void PostCmdBindVertexBuffers(
7552 VkCmdBuffer cmdBuffer,
7553 uint32_t startBinding,
7554 uint32_t bindingCount)
7555{
7556 if(cmdBuffer == nullptr)
7557 {
7558 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7559 "vkCmdBindVertexBuffers parameter, VkCmdBuffer cmdBuffer, is null pointer");
7560 return;
7561 }
7562
7563
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007564}
7565
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06007566VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007567 VkCmdBuffer cmdBuffer,
7568 uint32_t startBinding,
7569 uint32_t bindingCount,
7570 const VkBuffer* pBuffers,
7571 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007572{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007573 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
7574 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
7575
7576 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007577}
7578
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007579void PreCmdDraw(
7580 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007581{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007582 if(cmdBuffer == nullptr)
7583 {
7584 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7585 "vkCmdDraw parameter, VkCmdBuffer cmdBuffer, is null pointer");
7586 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007587 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007588}
7589
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007590void PostCmdDraw(
7591 VkCmdBuffer cmdBuffer,
7592 uint32_t firstVertex,
7593 uint32_t vertexCount,
7594 uint32_t firstInstance,
7595 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007596{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007597 if(cmdBuffer == nullptr)
7598 {
7599 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7600 "vkCmdDraw parameter, VkCmdBuffer cmdBuffer, is null pointer");
7601 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007602 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007603
7604
7605
7606
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007607}
7608
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007609VK_LAYER_EXPORT void VKAPI vkCmdDraw(
7610 VkCmdBuffer cmdBuffer,
7611 uint32_t firstVertex,
7612 uint32_t vertexCount,
7613 uint32_t firstInstance,
7614 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007615{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007616 PreCmdDraw(cmdBuffer);
7617 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
7618
7619 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007620}
7621
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007622void PreCmdDrawIndexed(
7623 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007624{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007625 if(cmdBuffer == nullptr)
7626 {
7627 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7628 "vkCmdDrawIndexed parameter, VkCmdBuffer cmdBuffer, is null pointer");
7629 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007630 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007631}
7632
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007633void PostCmdDrawIndexed(
7634 VkCmdBuffer cmdBuffer,
7635 uint32_t firstIndex,
7636 uint32_t indexCount,
7637 int32_t vertexOffset,
7638 uint32_t firstInstance,
7639 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007640{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007641 if(cmdBuffer == nullptr)
7642 {
7643 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7644 "vkCmdDrawIndexed parameter, VkCmdBuffer cmdBuffer, is null pointer");
7645 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007646 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007647
7648
7649
7650
7651
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007652}
7653
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007654VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7655 VkCmdBuffer cmdBuffer,
7656 uint32_t firstIndex,
7657 uint32_t indexCount,
7658 int32_t vertexOffset,
7659 uint32_t firstInstance,
7660 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007661{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007662 PreCmdDrawIndexed(cmdBuffer);
7663 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7664
7665 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7666}
7667
7668void PreCmdDrawIndirect(
7669 VkCmdBuffer cmdBuffer)
7670{
7671 if(cmdBuffer == nullptr)
7672 {
7673 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7674 "vkCmdDrawIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
7675 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007676 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007677}
7678
7679void PostCmdDrawIndirect(
7680 VkCmdBuffer cmdBuffer,
7681 VkBuffer buffer,
7682 VkDeviceSize offset,
7683 uint32_t count,
7684 uint32_t stride)
7685{
7686 if(cmdBuffer == nullptr)
7687 {
7688 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7689 "vkCmdDrawIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
7690 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007691 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007692
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007693 if(buffer == nullptr)
7694 {
7695 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7696 "vkCmdDrawIndirect parameter, VkBuffer buffer, is null pointer");
7697 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007698 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007699
7700
7701
7702}
7703
7704VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7705 VkCmdBuffer cmdBuffer,
7706 VkBuffer buffer,
7707 VkDeviceSize offset,
7708 uint32_t count,
7709 uint32_t stride)
7710{
7711 PreCmdDrawIndirect(cmdBuffer);
7712 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7713
7714 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7715}
7716
7717void PreCmdDrawIndexedIndirect(
7718 VkCmdBuffer cmdBuffer)
7719{
7720 if(cmdBuffer == nullptr)
7721 {
7722 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7723 "vkCmdDrawIndexedIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
7724 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007725 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007726}
7727
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007728void PostCmdDrawIndexedIndirect(
7729 VkCmdBuffer cmdBuffer,
7730 VkBuffer buffer,
7731 VkDeviceSize offset,
7732 uint32_t count,
7733 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007734{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007735 if(cmdBuffer == nullptr)
7736 {
7737 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7738 "vkCmdDrawIndexedIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
7739 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007740 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007741
7742 if(buffer == nullptr)
7743 {
7744 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7745 "vkCmdDrawIndexedIndirect parameter, VkBuffer buffer, is null pointer");
7746 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007747 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007748
7749
7750
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007751}
7752
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007753VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7754 VkCmdBuffer cmdBuffer,
7755 VkBuffer buffer,
7756 VkDeviceSize offset,
7757 uint32_t count,
7758 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007759{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007760 PreCmdDrawIndexedIndirect(cmdBuffer);
7761 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7762
7763 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7764}
7765
7766void PreCmdDispatch(
7767 VkCmdBuffer cmdBuffer)
7768{
7769 if(cmdBuffer == nullptr)
7770 {
7771 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7772 "vkCmdDispatch parameter, VkCmdBuffer cmdBuffer, is null pointer");
7773 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007774 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007775}
7776
7777void PostCmdDispatch(
7778 VkCmdBuffer cmdBuffer,
7779 uint32_t x,
7780 uint32_t y,
7781 uint32_t z)
7782{
7783 if(cmdBuffer == nullptr)
7784 {
7785 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7786 "vkCmdDispatch parameter, VkCmdBuffer cmdBuffer, is null pointer");
7787 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007788 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007789
7790
7791
7792}
7793
7794VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7795 VkCmdBuffer cmdBuffer,
7796 uint32_t x,
7797 uint32_t y,
7798 uint32_t z)
7799{
7800 PreCmdDispatch(cmdBuffer);
7801 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7802
7803 PostCmdDispatch(cmdBuffer, x, y, z);
7804}
7805
7806void PreCmdDispatchIndirect(
7807 VkCmdBuffer cmdBuffer)
7808{
7809 if(cmdBuffer == nullptr)
7810 {
7811 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7812 "vkCmdDispatchIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
7813 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007814 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007815}
7816
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007817void PostCmdDispatchIndirect(
7818 VkCmdBuffer cmdBuffer,
7819 VkBuffer buffer,
7820 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007821{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007822 if(cmdBuffer == nullptr)
7823 {
7824 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7825 "vkCmdDispatchIndirect parameter, VkCmdBuffer cmdBuffer, is null pointer");
7826 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007827 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007828
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007829 if(buffer == nullptr)
7830 {
7831 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7832 "vkCmdDispatchIndirect parameter, VkBuffer buffer, is null pointer");
7833 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007834 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007835
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007836}
7837
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007838VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7839 VkCmdBuffer cmdBuffer,
7840 VkBuffer buffer,
7841 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007842{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007843 PreCmdDispatchIndirect(cmdBuffer);
7844 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7845
7846 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007847}
7848
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007849void PreCmdCopyBuffer(
7850 VkCmdBuffer cmdBuffer,
7851 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007852{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007853 if(cmdBuffer == nullptr)
7854 {
7855 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7856 "vkCmdCopyBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7857 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007858 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007859
7860 if(pRegions == nullptr)
7861 {
7862 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7863 "vkCmdCopyBuffer parameter, const VkBufferCopy* pRegions, is null pointer");
7864 return;
7865 }
7866}
7867
7868void PostCmdCopyBuffer(
7869 VkCmdBuffer cmdBuffer,
7870 VkBuffer srcBuffer,
7871 VkBuffer destBuffer,
7872 uint32_t regionCount)
7873{
7874 if(cmdBuffer == nullptr)
7875 {
7876 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7877 "vkCmdCopyBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
7878 return;
7879 }
7880
7881 if(srcBuffer == nullptr)
7882 {
7883 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7884 "vkCmdCopyBuffer parameter, VkBuffer srcBuffer, is null pointer");
7885 return;
7886 }
7887
7888 if(destBuffer == nullptr)
7889 {
7890 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7891 "vkCmdCopyBuffer parameter, VkBuffer destBuffer, is null pointer");
7892 return;
7893 }
7894
7895}
7896
7897VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7898 VkCmdBuffer cmdBuffer,
7899 VkBuffer srcBuffer,
7900 VkBuffer destBuffer,
7901 uint32_t regionCount,
7902 const VkBufferCopy* pRegions)
7903{
7904 PreCmdCopyBuffer(cmdBuffer, pRegions);
7905 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7906
7907 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7908}
7909
7910void PreCmdCopyImage(
7911 VkCmdBuffer cmdBuffer,
7912 const VkImageCopy* pRegions)
7913{
7914 if(cmdBuffer == nullptr)
7915 {
7916 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7917 "vkCmdCopyImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7918 return;
7919 }
7920
7921 if(pRegions == nullptr)
7922 {
7923 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7924 "vkCmdCopyImage parameter, const VkImageCopy* pRegions, is null pointer");
7925 return;
7926 }
7927 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7928 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7929 {
7930 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7931 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
7932 return;
7933 }
7934 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7935 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7936 {
7937 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7938 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
7939 return;
7940 }
7941}
7942
7943void PostCmdCopyImage(
7944 VkCmdBuffer cmdBuffer,
7945 VkImage srcImage,
7946 VkImageLayout srcImageLayout,
7947 VkImage destImage,
7948 VkImageLayout destImageLayout,
7949 uint32_t regionCount)
7950{
7951 if(cmdBuffer == nullptr)
7952 {
7953 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7954 "vkCmdCopyImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
7955 return;
7956 }
7957
7958 if(srcImage == nullptr)
7959 {
7960 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7961 "vkCmdCopyImage parameter, VkImage srcImage, is null pointer");
7962 return;
7963 }
7964
7965 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7966 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7967 {
7968 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7969 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
7970 return;
7971 }
7972
7973 if(destImage == nullptr)
7974 {
7975 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7976 "vkCmdCopyImage parameter, VkImage destImage, is null pointer");
7977 return;
7978 }
7979
7980 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7981 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7982 {
7983 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
7984 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
7985 return;
7986 }
7987
7988}
7989
7990VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7991 VkCmdBuffer cmdBuffer,
7992 VkImage srcImage,
7993 VkImageLayout srcImageLayout,
7994 VkImage destImage,
7995 VkImageLayout destImageLayout,
7996 uint32_t regionCount,
7997 const VkImageCopy* pRegions)
7998{
7999 PreCmdCopyImage(cmdBuffer, pRegions);
8000 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
8001
8002 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
8003}
8004
8005void PreCmdBlitImage(
8006 VkCmdBuffer cmdBuffer,
8007 const VkImageBlit* pRegions)
8008{
8009 if(cmdBuffer == nullptr)
8010 {
8011 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8012 "vkCmdBlitImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
8013 return;
8014 }
8015
8016 if(pRegions == nullptr)
8017 {
8018 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8019 "vkCmdBlitImage parameter, const VkImageBlit* pRegions, is null pointer");
8020 return;
8021 }
8022 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
8023 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
8024 {
8025 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8026 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
8027 return;
8028 }
8029 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
8030 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
8031 {
8032 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8033 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
8034 return;
8035 }
8036}
8037
8038void PostCmdBlitImage(
8039 VkCmdBuffer cmdBuffer,
8040 VkImage srcImage,
8041 VkImageLayout srcImageLayout,
8042 VkImage destImage,
8043 VkImageLayout destImageLayout,
8044 uint32_t regionCount,
8045 VkTexFilter filter)
8046{
8047 if(cmdBuffer == nullptr)
8048 {
8049 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8050 "vkCmdBlitImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
8051 return;
8052 }
8053
8054 if(srcImage == nullptr)
8055 {
8056 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8057 "vkCmdBlitImage parameter, VkImage srcImage, is null pointer");
8058 return;
8059 }
8060
8061 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8062 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
8063 {
8064 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8065 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
8066 return;
8067 }
8068
8069 if(destImage == nullptr)
8070 {
8071 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8072 "vkCmdBlitImage parameter, VkImage destImage, is null pointer");
8073 return;
8074 }
8075
8076 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8077 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
8078 {
8079 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8080 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
8081 return;
8082 }
8083
8084
8085 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
8086 filter > VK_TEX_FILTER_END_RANGE)
8087 {
8088 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8089 "vkCmdBlitImage parameter, VkTexFilter filter, is unrecognized enumerator");
8090 return;
8091 }
8092}
8093
8094VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
8095 VkCmdBuffer cmdBuffer,
8096 VkImage srcImage,
8097 VkImageLayout srcImageLayout,
8098 VkImage destImage,
8099 VkImageLayout destImageLayout,
8100 uint32_t regionCount,
8101 const VkImageBlit* pRegions,
8102 VkTexFilter filter)
8103{
8104 PreCmdBlitImage(cmdBuffer, pRegions);
8105 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
8106
8107 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
8108}
8109
8110void PreCmdCopyBufferToImage(
8111 VkCmdBuffer cmdBuffer,
8112 const VkBufferImageCopy* pRegions)
8113{
8114 if(cmdBuffer == nullptr)
8115 {
8116 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8117 "vkCmdCopyBufferToImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
8118 return;
8119 }
8120
8121 if(pRegions == nullptr)
8122 {
8123 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8124 "vkCmdCopyBufferToImage parameter, const VkBufferImageCopy* pRegions, is null pointer");
8125 return;
8126 }
8127 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
8128 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
8129 {
8130 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8131 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
8132 return;
8133 }
8134}
8135
8136void PostCmdCopyBufferToImage(
8137 VkCmdBuffer cmdBuffer,
8138 VkBuffer srcBuffer,
8139 VkImage destImage,
8140 VkImageLayout destImageLayout,
8141 uint32_t regionCount)
8142{
8143 if(cmdBuffer == nullptr)
8144 {
8145 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8146 "vkCmdCopyBufferToImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
8147 return;
8148 }
8149
8150 if(srcBuffer == nullptr)
8151 {
8152 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8153 "vkCmdCopyBufferToImage parameter, VkBuffer srcBuffer, is null pointer");
8154 return;
8155 }
8156
8157 if(destImage == nullptr)
8158 {
8159 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8160 "vkCmdCopyBufferToImage parameter, VkImage destImage, is null pointer");
8161 return;
8162 }
8163
8164 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8165 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
8166 {
8167 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8168 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
8169 return;
8170 }
8171
8172}
8173
8174VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
8175 VkCmdBuffer cmdBuffer,
8176 VkBuffer srcBuffer,
8177 VkImage destImage,
8178 VkImageLayout destImageLayout,
8179 uint32_t regionCount,
8180 const VkBufferImageCopy* pRegions)
8181{
8182 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
8183 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
8184
8185 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
8186}
8187
8188void PreCmdCopyImageToBuffer(
8189 VkCmdBuffer cmdBuffer,
8190 const VkBufferImageCopy* pRegions)
8191{
8192 if(cmdBuffer == nullptr)
8193 {
8194 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8195 "vkCmdCopyImageToBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
8196 return;
8197 }
8198
8199 if(pRegions == nullptr)
8200 {
8201 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8202 "vkCmdCopyImageToBuffer parameter, const VkBufferImageCopy* pRegions, is null pointer");
8203 return;
8204 }
8205 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
8206 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
8207 {
8208 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8209 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
8210 return;
8211 }
8212}
8213
8214void PostCmdCopyImageToBuffer(
8215 VkCmdBuffer cmdBuffer,
8216 VkImage srcImage,
8217 VkImageLayout srcImageLayout,
8218 VkBuffer destBuffer,
8219 uint32_t regionCount)
8220{
8221 if(cmdBuffer == nullptr)
8222 {
8223 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8224 "vkCmdCopyImageToBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
8225 return;
8226 }
8227
8228 if(srcImage == nullptr)
8229 {
8230 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8231 "vkCmdCopyImageToBuffer parameter, VkImage srcImage, is null pointer");
8232 return;
8233 }
8234
8235 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8236 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
8237 {
8238 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8239 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
8240 return;
8241 }
8242
8243 if(destBuffer == nullptr)
8244 {
8245 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8246 "vkCmdCopyImageToBuffer parameter, VkBuffer destBuffer, is null pointer");
8247 return;
8248 }
8249
8250}
8251
8252VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
8253 VkCmdBuffer cmdBuffer,
8254 VkImage srcImage,
8255 VkImageLayout srcImageLayout,
8256 VkBuffer destBuffer,
8257 uint32_t regionCount,
8258 const VkBufferImageCopy* pRegions)
8259{
8260 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
8261 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
8262
8263 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
8264}
8265
8266void PreCmdUpdateBuffer(
8267 VkCmdBuffer cmdBuffer,
8268 const uint32_t* pData)
8269{
8270 if(cmdBuffer == nullptr)
8271 {
8272 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8273 "vkCmdUpdateBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
8274 return;
8275 }
8276
8277 if(pData == nullptr)
8278 {
8279 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8280 "vkCmdUpdateBuffer parameter, const uint32_t* pData, is null pointer");
8281 return;
8282 }
8283}
8284
8285void PostCmdUpdateBuffer(
8286 VkCmdBuffer cmdBuffer,
8287 VkBuffer destBuffer,
8288 VkDeviceSize destOffset,
8289 VkDeviceSize dataSize)
8290{
8291 if(cmdBuffer == nullptr)
8292 {
8293 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8294 "vkCmdUpdateBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
8295 return;
8296 }
8297
8298 if(destBuffer == nullptr)
8299 {
8300 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8301 "vkCmdUpdateBuffer parameter, VkBuffer destBuffer, is null pointer");
8302 return;
8303 }
8304
8305
8306}
8307
8308VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
8309 VkCmdBuffer cmdBuffer,
8310 VkBuffer destBuffer,
8311 VkDeviceSize destOffset,
8312 VkDeviceSize dataSize,
8313 const uint32_t* pData)
8314{
8315 PreCmdUpdateBuffer(cmdBuffer, pData);
8316 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
8317
8318 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
8319}
8320
8321void PreCmdFillBuffer(
8322 VkCmdBuffer cmdBuffer)
8323{
8324 if(cmdBuffer == nullptr)
8325 {
8326 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8327 "vkCmdFillBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
8328 return;
8329 }
8330}
8331
8332void PostCmdFillBuffer(
8333 VkCmdBuffer cmdBuffer,
8334 VkBuffer destBuffer,
8335 VkDeviceSize destOffset,
8336 VkDeviceSize fillSize,
8337 uint32_t data)
8338{
8339 if(cmdBuffer == nullptr)
8340 {
8341 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8342 "vkCmdFillBuffer parameter, VkCmdBuffer cmdBuffer, is null pointer");
8343 return;
8344 }
8345
8346 if(destBuffer == nullptr)
8347 {
8348 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8349 "vkCmdFillBuffer parameter, VkBuffer destBuffer, is null pointer");
8350 return;
8351 }
8352
8353
8354
8355}
8356
8357VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
8358 VkCmdBuffer cmdBuffer,
8359 VkBuffer destBuffer,
8360 VkDeviceSize destOffset,
8361 VkDeviceSize fillSize,
8362 uint32_t data)
8363{
8364 PreCmdFillBuffer(cmdBuffer);
8365 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
8366
8367 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
8368}
8369
8370void PreCmdClearColorImage(
8371 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12008372 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008373 const VkImageSubresourceRange* pRanges)
8374{
8375 if(cmdBuffer == nullptr)
8376 {
8377 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8378 "vkCmdClearColorImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
8379 return;
8380 }
8381
8382 if(pColor == nullptr)
8383 {
8384 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8385 "vkCmdClearColorImage parameter, const VkClearColor* pColor, is null pointer");
8386 return;
8387 }
8388
8389 if(pRanges == nullptr)
8390 {
8391 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8392 "vkCmdClearColorImage parameter, const VkImageSubresourceRange* pRanges, is null pointer");
8393 return;
8394 }
8395 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
8396 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
8397 {
8398 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8399 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
8400 return;
8401 }
8402}
8403
8404void PostCmdClearColorImage(
8405 VkCmdBuffer cmdBuffer,
8406 VkImage image,
8407 VkImageLayout imageLayout,
8408 uint32_t rangeCount)
8409{
8410 if(cmdBuffer == nullptr)
8411 {
8412 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8413 "vkCmdClearColorImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
8414 return;
8415 }
8416
8417 if(image == nullptr)
8418 {
8419 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8420 "vkCmdClearColorImage parameter, VkImage image, is null pointer");
8421 return;
8422 }
8423
8424 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8425 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
8426 {
8427 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8428 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is unrecognized enumerator");
8429 return;
8430 }
8431
8432}
8433
8434VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
8435 VkCmdBuffer cmdBuffer,
8436 VkImage image,
8437 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12008438 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008439 uint32_t rangeCount,
8440 const VkImageSubresourceRange* pRanges)
8441{
8442 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
8443 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
8444
8445 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
8446}
8447
Chris Forbes2951d7d2015-06-22 17:21:59 +12008448void PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008449 VkCmdBuffer cmdBuffer,
8450 const VkImageSubresourceRange* pRanges)
8451{
8452 if(cmdBuffer == nullptr)
8453 {
8454 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8455 "vkCmdClearDepthStencil parameter, VkCmdBuffer cmdBuffer, is null pointer");
8456 return;
8457 }
8458
8459 if(pRanges == nullptr)
8460 {
8461 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8462 "vkCmdClearDepthStencil parameter, const VkImageSubresourceRange* pRanges, is null pointer");
8463 return;
8464 }
8465 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
8466 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
8467 {
8468 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8469 "vkCmdClearDepthStencil parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
8470 return;
8471 }
8472}
8473
Chris Forbes2951d7d2015-06-22 17:21:59 +12008474void PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008475 VkCmdBuffer cmdBuffer,
8476 VkImage image,
8477 VkImageLayout imageLayout,
8478 float depth,
8479 uint32_t stencil,
8480 uint32_t rangeCount)
8481{
8482 if(cmdBuffer == nullptr)
8483 {
8484 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8485 "vkCmdClearDepthStencil parameter, VkCmdBuffer cmdBuffer, is null pointer");
8486 return;
8487 }
8488
8489 if(image == nullptr)
8490 {
8491 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8492 "vkCmdClearDepthStencil parameter, VkImage image, is null pointer");
8493 return;
8494 }
8495
8496 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8497 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
8498 {
8499 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8500 "vkCmdClearDepthStencil parameter, VkImageLayout imageLayout, is unrecognized enumerator");
8501 return;
8502 }
8503
8504
8505
8506}
8507
Chris Forbes2951d7d2015-06-22 17:21:59 +12008508VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008509 VkCmdBuffer cmdBuffer,
8510 VkImage image,
8511 VkImageLayout imageLayout,
8512 float depth,
8513 uint32_t stencil,
8514 uint32_t rangeCount,
8515 const VkImageSubresourceRange* pRanges)
8516{
Chris Forbes2951d7d2015-06-22 17:21:59 +12008517 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
8518 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008519
Chris Forbes2951d7d2015-06-22 17:21:59 +12008520 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008521}
8522
8523void PreCmdResolveImage(
8524 VkCmdBuffer cmdBuffer,
8525 const VkImageResolve* pRegions)
8526{
8527 if(cmdBuffer == nullptr)
8528 {
8529 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8530 "vkCmdResolveImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
8531 return;
8532 }
8533
8534 if(pRegions == nullptr)
8535 {
8536 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8537 "vkCmdResolveImage parameter, const VkImageResolve* pRegions, is null pointer");
8538 return;
8539 }
8540 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
8541 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
8542 {
8543 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8544 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
8545 return;
8546 }
8547 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
8548 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
8549 {
8550 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8551 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
8552 return;
8553 }
8554}
8555
8556void PostCmdResolveImage(
8557 VkCmdBuffer cmdBuffer,
8558 VkImage srcImage,
8559 VkImageLayout srcImageLayout,
8560 VkImage destImage,
8561 VkImageLayout destImageLayout,
8562 uint32_t regionCount)
8563{
8564 if(cmdBuffer == nullptr)
8565 {
8566 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8567 "vkCmdResolveImage parameter, VkCmdBuffer cmdBuffer, is null pointer");
8568 return;
8569 }
8570
8571 if(srcImage == nullptr)
8572 {
8573 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8574 "vkCmdResolveImage parameter, VkImage srcImage, is null pointer");
8575 return;
8576 }
8577
8578 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8579 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
8580 {
8581 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8582 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
8583 return;
8584 }
8585
8586 if(destImage == nullptr)
8587 {
8588 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8589 "vkCmdResolveImage parameter, VkImage destImage, is null pointer");
8590 return;
8591 }
8592
8593 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8594 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
8595 {
8596 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8597 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
8598 return;
8599 }
8600
8601}
8602
8603VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
8604 VkCmdBuffer cmdBuffer,
8605 VkImage srcImage,
8606 VkImageLayout srcImageLayout,
8607 VkImage destImage,
8608 VkImageLayout destImageLayout,
8609 uint32_t regionCount,
8610 const VkImageResolve* pRegions)
8611{
8612 PreCmdResolveImage(cmdBuffer, pRegions);
8613 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
8614
8615 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
8616}
8617
8618void PreCmdSetEvent(
8619 VkCmdBuffer cmdBuffer)
8620{
8621 if(cmdBuffer == nullptr)
8622 {
8623 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8624 "vkCmdSetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer");
8625 return;
8626 }
8627}
8628
8629void PostCmdSetEvent(
8630 VkCmdBuffer cmdBuffer,
8631 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008632 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008633{
8634 if(cmdBuffer == nullptr)
8635 {
8636 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8637 "vkCmdSetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer");
8638 return;
8639 }
8640
8641 if(event == nullptr)
8642 {
8643 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8644 "vkCmdSetEvent parameter, VkEvent event, is null pointer");
8645 return;
8646 }
8647
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008648}
8649
8650VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
8651 VkCmdBuffer cmdBuffer,
8652 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008653 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008654{
8655 PreCmdSetEvent(cmdBuffer);
Tony Barbourc2e987e2015-06-29 16:20:35 -06008656 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008657
Tony Barbourc2e987e2015-06-29 16:20:35 -06008658 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008659}
8660
8661void PreCmdResetEvent(
8662 VkCmdBuffer cmdBuffer)
8663{
8664 if(cmdBuffer == nullptr)
8665 {
8666 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8667 "vkCmdResetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer");
8668 return;
8669 }
8670}
8671
8672void PostCmdResetEvent(
8673 VkCmdBuffer cmdBuffer,
8674 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008675 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008676{
8677 if(cmdBuffer == nullptr)
8678 {
8679 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8680 "vkCmdResetEvent parameter, VkCmdBuffer cmdBuffer, is null pointer");
8681 return;
8682 }
8683
8684 if(event == nullptr)
8685 {
8686 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8687 "vkCmdResetEvent parameter, VkEvent event, is null pointer");
8688 return;
8689 }
8690
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008691}
8692
8693VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
8694 VkCmdBuffer cmdBuffer,
8695 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008696 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008697{
8698 PreCmdResetEvent(cmdBuffer);
Tony Barbourc2e987e2015-06-29 16:20:35 -06008699 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008700
Tony Barbourc2e987e2015-06-29 16:20:35 -06008701 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008702}
8703
8704void PreCmdWaitEvents(
8705 VkCmdBuffer cmdBuffer,
8706 const VkEvent* pEvents,
8707 const void** ppMemBarriers)
8708{
8709 if(cmdBuffer == nullptr)
8710 {
8711 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8712 "vkCmdWaitEvents parameter, VkCmdBuffer cmdBuffer, is null pointer");
8713 return;
8714 }
8715
8716 if(pEvents == nullptr)
8717 {
8718 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8719 "vkCmdWaitEvents parameter, const VkEvent* pEvents, is null pointer");
8720 return;
8721 }
8722 if((*pEvents) == nullptr)
8723 {
8724 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8725 "vkCmdWaitEvents parameter, const VkEvent* pEvents, is null pointer");
8726 return;
8727 }
8728
8729 if(ppMemBarriers == nullptr)
8730 {
8731 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8732 "vkCmdWaitEvents parameter, const void** ppMemBarriers, is null pointer");
8733 return;
8734 }
8735}
8736
8737void PostCmdWaitEvents(
8738 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008739 uint32_t eventCount,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008740 VkPipelineStageFlags sourceStageMask,
8741 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008742 uint32_t memBarrierCount)
8743{
8744 if(cmdBuffer == nullptr)
8745 {
8746 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8747 "vkCmdWaitEvents parameter, VkCmdBuffer cmdBuffer, is null pointer");
8748 return;
8749 }
8750
Tony Barbourc2e987e2015-06-29 16:20:35 -06008751
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008752
8753
8754}
8755
8756VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
8757 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008758 uint32_t eventCount,
8759 const VkEvent* pEvents,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008760 VkPipelineStageFlags sourceStageMask,
8761 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008762 uint32_t memBarrierCount,
8763 const void** ppMemBarriers)
8764{
8765 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Tony Barbourc2e987e2015-06-29 16:20:35 -06008766 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008767
Tony Barbourc2e987e2015-06-29 16:20:35 -06008768 PostCmdWaitEvents(cmdBuffer, eventCount, sourceStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008769}
8770
8771void PreCmdPipelineBarrier(
8772 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008773 const void** ppMemBarriers)
8774{
8775 if(cmdBuffer == nullptr)
8776 {
8777 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8778 "vkCmdPipelineBarrier parameter, VkCmdBuffer cmdBuffer, is null pointer");
8779 return;
8780 }
8781
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008782 if(ppMemBarriers == nullptr)
8783 {
8784 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8785 "vkCmdPipelineBarrier parameter, const void** ppMemBarriers, is null pointer");
8786 return;
8787 }
8788}
8789
8790void PostCmdPipelineBarrier(
8791 VkCmdBuffer cmdBuffer,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008792 VkPipelineStageFlags sourceStageMask,
8793 VkPipelineStageFlags destStageMask,
8794 bool32_t byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008795 uint32_t memBarrierCount)
8796{
8797 if(cmdBuffer == nullptr)
8798 {
8799 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8800 "vkCmdPipelineBarrier parameter, VkCmdBuffer cmdBuffer, is null pointer");
8801 return;
8802 }
8803
Tony Barbourc2e987e2015-06-29 16:20:35 -06008804
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008805
8806
8807}
8808
8809VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
8810 VkCmdBuffer cmdBuffer,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008811 VkPipelineStageFlags sourceStageMask,
8812 VkPipelineStageFlags destStageMask,
8813 bool32_t byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008814 uint32_t memBarrierCount,
8815 const void** ppMemBarriers)
8816{
Tony Barbourc2e987e2015-06-29 16:20:35 -06008817 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
8818 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008819
Tony Barbourc2e987e2015-06-29 16:20:35 -06008820 PostCmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008821}
8822
8823void PreCmdBeginQuery(
8824 VkCmdBuffer cmdBuffer)
8825{
8826 if(cmdBuffer == nullptr)
8827 {
8828 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8829 "vkCmdBeginQuery parameter, VkCmdBuffer cmdBuffer, is null pointer");
8830 return;
8831 }
8832}
8833
8834void PostCmdBeginQuery(
8835 VkCmdBuffer cmdBuffer,
8836 VkQueryPool queryPool,
8837 uint32_t slot,
8838 VkQueryControlFlags flags)
8839{
8840 if(cmdBuffer == nullptr)
8841 {
8842 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8843 "vkCmdBeginQuery parameter, VkCmdBuffer cmdBuffer, is null pointer");
8844 return;
8845 }
8846
8847 if(queryPool == nullptr)
8848 {
8849 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8850 "vkCmdBeginQuery parameter, VkQueryPool queryPool, is null pointer");
8851 return;
8852 }
8853
8854
8855 if(!ValidateEnumerator((VkQueryControlFlagBits)flags))
8856 {
8857 std::string reason = "vkCmdBeginQuery parameter, VkQueryControlFlags flags, is " + EnumeratorString((VkQueryControlFlagBits)flags);
8858 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
8859 return;
8860 }
8861}
8862
8863VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
8864 VkCmdBuffer cmdBuffer,
8865 VkQueryPool queryPool,
8866 uint32_t slot,
8867 VkQueryControlFlags flags)
8868{
8869 PreCmdBeginQuery(cmdBuffer);
8870 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8871
8872 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8873}
8874
8875void PreCmdEndQuery(
8876 VkCmdBuffer cmdBuffer)
8877{
8878 if(cmdBuffer == nullptr)
8879 {
8880 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8881 "vkCmdEndQuery parameter, VkCmdBuffer cmdBuffer, is null pointer");
8882 return;
8883 }
8884}
8885
8886void PostCmdEndQuery(
8887 VkCmdBuffer cmdBuffer,
8888 VkQueryPool queryPool,
8889 uint32_t slot)
8890{
8891 if(cmdBuffer == nullptr)
8892 {
8893 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8894 "vkCmdEndQuery parameter, VkCmdBuffer cmdBuffer, is null pointer");
8895 return;
8896 }
8897
8898 if(queryPool == nullptr)
8899 {
8900 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8901 "vkCmdEndQuery parameter, VkQueryPool queryPool, is null pointer");
8902 return;
8903 }
8904
8905}
8906
8907VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
8908 VkCmdBuffer cmdBuffer,
8909 VkQueryPool queryPool,
8910 uint32_t slot)
8911{
8912 PreCmdEndQuery(cmdBuffer);
8913 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
8914
8915 PostCmdEndQuery(cmdBuffer, queryPool, slot);
8916}
8917
8918void PreCmdResetQueryPool(
8919 VkCmdBuffer cmdBuffer)
8920{
8921 if(cmdBuffer == nullptr)
8922 {
8923 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8924 "vkCmdResetQueryPool parameter, VkCmdBuffer cmdBuffer, is null pointer");
8925 return;
8926 }
8927}
8928
8929void PostCmdResetQueryPool(
8930 VkCmdBuffer cmdBuffer,
8931 VkQueryPool queryPool,
8932 uint32_t startQuery,
8933 uint32_t queryCount)
8934{
8935 if(cmdBuffer == nullptr)
8936 {
8937 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8938 "vkCmdResetQueryPool parameter, VkCmdBuffer cmdBuffer, is null pointer");
8939 return;
8940 }
8941
8942 if(queryPool == nullptr)
8943 {
8944 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8945 "vkCmdResetQueryPool parameter, VkQueryPool queryPool, is null pointer");
8946 return;
8947 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008948}
8949
8950VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8951 VkCmdBuffer cmdBuffer,
8952 VkQueryPool queryPool,
8953 uint32_t startQuery,
8954 uint32_t queryCount)
8955{
8956 PreCmdResetQueryPool(cmdBuffer);
8957 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8958
8959 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8960}
8961
8962void PreCmdWriteTimestamp(
8963 VkCmdBuffer cmdBuffer)
8964{
8965 if(cmdBuffer == nullptr)
8966 {
8967 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8968 "vkCmdWriteTimestamp parameter, VkCmdBuffer cmdBuffer, is null pointer");
8969 return;
8970 }
8971}
8972
8973void PostCmdWriteTimestamp(
8974 VkCmdBuffer cmdBuffer,
8975 VkTimestampType timestampType,
8976 VkBuffer destBuffer,
8977 VkDeviceSize destOffset)
8978{
8979 if(cmdBuffer == nullptr)
8980 {
8981 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8982 "vkCmdWriteTimestamp parameter, VkCmdBuffer cmdBuffer, is null pointer");
8983 return;
8984 }
8985
8986 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8987 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8988 {
8989 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8990 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is unrecognized enumerator");
8991 return;
8992 }
8993
8994 if(destBuffer == nullptr)
8995 {
8996 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
8997 "vkCmdWriteTimestamp parameter, VkBuffer destBuffer, is null pointer");
8998 return;
8999 }
9000
9001}
9002
9003VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
9004 VkCmdBuffer cmdBuffer,
9005 VkTimestampType timestampType,
9006 VkBuffer destBuffer,
9007 VkDeviceSize destOffset)
9008{
9009 PreCmdWriteTimestamp(cmdBuffer);
9010 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
9011
9012 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
9013}
9014
9015void PreCmdCopyQueryPoolResults(
9016 VkCmdBuffer cmdBuffer)
9017{
9018 if(cmdBuffer == nullptr)
9019 {
9020 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9021 "vkCmdCopyQueryPoolResults parameter, VkCmdBuffer cmdBuffer, is null pointer");
9022 return;
9023 }
9024}
9025
9026void PostCmdCopyQueryPoolResults(
9027 VkCmdBuffer cmdBuffer,
9028 VkQueryPool queryPool,
9029 uint32_t startQuery,
9030 uint32_t queryCount,
9031 VkBuffer destBuffer,
9032 VkDeviceSize destOffset,
9033 VkDeviceSize destStride,
9034 VkQueryResultFlags flags)
9035{
9036 if(cmdBuffer == nullptr)
9037 {
9038 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9039 "vkCmdCopyQueryPoolResults parameter, VkCmdBuffer cmdBuffer, is null pointer");
9040 return;
9041 }
9042
9043 if(queryPool == nullptr)
9044 {
9045 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9046 "vkCmdCopyQueryPoolResults parameter, VkQueryPool queryPool, is null pointer");
9047 return;
9048 }
9049
9050
9051
9052 if(destBuffer == nullptr)
9053 {
9054 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9055 "vkCmdCopyQueryPoolResults parameter, VkBuffer destBuffer, is null pointer");
9056 return;
9057 }
9058
9059
9060
9061 if(!ValidateEnumerator((VkQueryResultFlagBits)flags))
9062 {
9063 std::string reason = "vkCmdCopyQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags);
9064 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
9065 return;
9066 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009067}
9068
Jeremy Hayescf469132015-04-17 10:36:53 -06009069VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009070 VkCmdBuffer cmdBuffer,
9071 VkQueryPool queryPool,
9072 uint32_t startQuery,
9073 uint32_t queryCount,
9074 VkBuffer destBuffer,
9075 VkDeviceSize destOffset,
9076 VkDeviceSize destStride,
9077 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06009078{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009079 PreCmdCopyQueryPoolResults(cmdBuffer);
9080 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
9081
9082 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06009083}
9084
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009085void PreCreateFramebuffer(
9086 VkDevice device,
9087 const VkFramebufferCreateInfo* pCreateInfo)
9088{
9089 if(device == nullptr)
9090 {
9091 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9092 "vkCreateFramebuffer parameter, VkDevice device, is null pointer");
9093 return;
9094 }
9095
9096 if(pCreateInfo == nullptr)
9097 {
9098 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9099 "vkCreateFramebuffer parameter, const VkFramebufferCreateInfo* pCreateInfo, is null pointer");
9100 return;
9101 }
9102 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
9103 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
9104 {
9105 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9106 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
9107 return;
9108 }
9109 if(pCreateInfo->pColorAttachments == nullptr)
9110 {
9111 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9112 "vkCreateFramebuffer parameter, const VkColorAttachmentBindInfo* pCreateInfo->pColorAttachments, is null pointer");
9113 return;
9114 }
9115 if(pCreateInfo->pColorAttachments->view == nullptr)
9116 {
9117 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9118 "vkCreateFramebuffer parameter, VkColorAttachmentView pCreateInfo->pColorAttachments->view, is null pointer");
9119 return;
9120 }
9121 if(pCreateInfo->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
9122 pCreateInfo->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
9123 {
9124 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9125 "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pColorAttachments->layout, is unrecognized enumerator");
9126 return;
9127 }
9128 if(pCreateInfo->pDepthStencilAttachment == nullptr)
9129 {
9130 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9131 "vkCreateFramebuffer parameter, const VkDepthStencilBindInfo* pCreateInfo->pDepthStencilAttachment, is null pointer");
9132 return;
9133 }
9134 if(pCreateInfo->pDepthStencilAttachment->view == nullptr)
9135 {
9136 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9137 "vkCreateFramebuffer parameter, VkDepthStencilView pCreateInfo->pDepthStencilAttachment->view, is null pointer");
9138 return;
9139 }
9140 if(pCreateInfo->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
9141 pCreateInfo->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)
9142 {
9143 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9144 "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pDepthStencilAttachment->layout, is unrecognized enumerator");
9145 return;
9146 }
9147}
9148
9149void PostCreateFramebuffer(
9150 VkDevice device,
9151 VkFramebuffer* pFramebuffer,
9152 VkResult result)
9153{
9154 if(device == nullptr)
9155 {
9156 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9157 "vkCreateFramebuffer parameter, VkDevice device, is null pointer");
9158 return;
9159 }
9160
9161 if(pFramebuffer == nullptr)
9162 {
9163 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9164 "vkCreateFramebuffer parameter, VkFramebuffer* pFramebuffer, is null pointer");
9165 return;
9166 }
9167 if((*pFramebuffer) == nullptr)
9168 {
9169 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9170 "vkCreateFramebuffer parameter, VkFramebuffer* pFramebuffer, is null pointer");
9171 return;
9172 }
9173
9174 if(result != VK_SUCCESS)
9175 {
9176 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
9177 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
9178 return;
9179 }
9180}
9181
9182VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
9183 VkDevice device,
9184 const VkFramebufferCreateInfo* pCreateInfo,
9185 VkFramebuffer* pFramebuffer)
9186{
9187 PreCreateFramebuffer(device, pCreateInfo);
9188 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
9189
9190 PostCreateFramebuffer(device, pFramebuffer, result);
9191
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009192 return result;
9193}
9194
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009195void PreCreateRenderPass(
9196 VkDevice device,
9197 const VkRenderPassCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009198{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009199 if(device == nullptr)
9200 {
9201 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9202 "vkCreateRenderPass parameter, VkDevice device, is null pointer");
9203 return;
9204 }
9205
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009206 if(pCreateInfo == nullptr)
9207 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009208 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9209 "vkCreateRenderPass parameter, const VkRenderPassCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009210 return;
9211 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009212 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
9213 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009214 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009215 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9216 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009217 return;
9218 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009219 if(pCreateInfo->pColorFormats == nullptr)
9220 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009221 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9222 "vkCreateRenderPass parameter, const VkFormat* pCreateInfo->pColorFormats, is null pointer");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009223 return;
9224 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009225 if((*pCreateInfo->pColorFormats) < VK_FORMAT_BEGIN_RANGE ||
9226 (*pCreateInfo->pColorFormats) > VK_FORMAT_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009227 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009228 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9229 "vkCreateRenderPass parameter, const VkFormat* pCreateInfo->pColorFormats, is unrecognized enumerator");
9230 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009231 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009232 if(pCreateInfo->pColorLayouts == nullptr)
9233 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009234 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9235 "vkCreateRenderPass parameter, const VkImageLayout* pCreateInfo->pColorLayouts, is null pointer");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009236 return;
9237 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009238 if((*pCreateInfo->pColorLayouts) < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
9239 (*pCreateInfo->pColorLayouts) > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009240 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009241 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9242 "vkCreateRenderPass parameter, const VkImageLayout* pCreateInfo->pColorLayouts, is unrecognized enumerator");
9243 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009244 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009245 if(pCreateInfo->pColorLoadOps == nullptr)
9246 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009247 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9248 "vkCreateRenderPass parameter, const VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, is null pointer");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009249 return;
9250 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009251 if((*pCreateInfo->pColorLoadOps) < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
9252 (*pCreateInfo->pColorLoadOps) > VK_ATTACHMENT_LOAD_OP_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009253 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009254 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9255 "vkCreateRenderPass parameter, const VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, is unrecognized enumerator");
9256 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009257 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009258 if(pCreateInfo->pColorStoreOps == nullptr)
9259 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009260 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9261 "vkCreateRenderPass parameter, const VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, is null pointer");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009262 return;
9263 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009264 if((*pCreateInfo->pColorStoreOps) < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
9265 (*pCreateInfo->pColorStoreOps) > VK_ATTACHMENT_STORE_OP_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009266 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009267 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9268 "vkCreateRenderPass parameter, const VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, is unrecognized enumerator");
9269 return;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009270 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009271 if(pCreateInfo->pColorLoadClearValues == nullptr)
9272 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009273 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9274 "vkCreateRenderPass parameter, const VkClearColor* pCreateInfo->pColorLoadClearValues, is null pointer");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009275 return;
9276 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009277 if(pCreateInfo->depthStencilFormat < VK_FORMAT_BEGIN_RANGE ||
9278 pCreateInfo->depthStencilFormat > VK_FORMAT_END_RANGE)
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06009279 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009280 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9281 "vkCreateRenderPass parameter, VkFormat pCreateInfo->depthStencilFormat, is unrecognized enumerator");
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06009282 return;
9283 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009284 if(pCreateInfo->depthStencilLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
9285 pCreateInfo->depthStencilLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06009286 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009287 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9288 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->depthStencilLayout, is unrecognized enumerator");
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06009289 return;
9290 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009291 if(pCreateInfo->depthLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
9292 pCreateInfo->depthLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009293 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009294 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9295 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->depthLoadOp, is unrecognized enumerator");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009296 return;
9297 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009298 if(pCreateInfo->depthStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
9299 pCreateInfo->depthStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009300 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009301 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9302 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->depthStoreOp, is unrecognized enumerator");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009303 return;
9304 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009305 if(pCreateInfo->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
9306 pCreateInfo->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009307 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009308 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9309 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->stencilLoadOp, is unrecognized enumerator");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009310 return;
9311 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009312 if(pCreateInfo->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
9313 pCreateInfo->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009314 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009315 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9316 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->stencilStoreOp, is unrecognized enumerator");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009317 return;
9318 }
9319}
9320
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009321void PostCreateRenderPass(
9322 VkDevice device,
9323 VkRenderPass* pRenderPass,
9324 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009325{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009326 if(device == nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009327 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009328 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9329 "vkCreateRenderPass parameter, VkDevice device, is null pointer");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009330 return;
9331 }
9332
9333 if(pRenderPass == nullptr)
9334 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009335 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9336 "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is null pointer");
9337 return;
9338 }
9339 if((*pRenderPass) == nullptr)
9340 {
9341 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9342 "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is null pointer");
9343 return;
9344 }
9345
9346 if(result != VK_SUCCESS)
9347 {
9348 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
9349 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009350 return;
9351 }
9352}
9353
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009354VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
9355 VkDevice device,
9356 const VkRenderPassCreateInfo* pCreateInfo,
9357 VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009358{
9359 PreCreateRenderPass(device, pCreateInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009360 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
9361
9362 PostCreateRenderPass(device, pRenderPass, result);
9363
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009364 return result;
9365}
9366
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009367void PreCmdBeginRenderPass(
9368 VkCmdBuffer cmdBuffer,
9369 const VkRenderPassBegin* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009370{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009371 if(cmdBuffer == nullptr)
9372 {
9373 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9374 "vkCmdBeginRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
Jon Ashburn6f8cd632015-06-01 09:37:38 -06009375 return;
Jon Ashburnf0615e22015-05-25 14:11:37 -06009376 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009377
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009378 if(pRenderPassBegin == nullptr)
9379 {
9380 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9381 "vkCmdBeginRenderPass parameter, const VkRenderPassBegin* pRenderPassBegin, is null pointer");
Jon Ashburn6f8cd632015-06-01 09:37:38 -06009382 return;
Jon Ashburnf0615e22015-05-25 14:11:37 -06009383 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009384 if(pRenderPassBegin->renderPass == nullptr)
9385 {
9386 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9387 "vkCmdBeginRenderPass parameter, VkRenderPass pRenderPassBegin->renderPass, is null pointer");
9388 return;
Jon Ashburnf0615e22015-05-25 14:11:37 -06009389 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009390 if(pRenderPassBegin->framebuffer == nullptr)
9391 {
9392 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9393 "vkCmdBeginRenderPass parameter, VkFramebuffer pRenderPassBegin->framebuffer, is null pointer");
9394 return;
Jon Ashburnf0615e22015-05-25 14:11:37 -06009395 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009396}
9397
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009398void PostCmdBeginRenderPass(
9399 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009400{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009401 if(cmdBuffer == nullptr)
9402 {
9403 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9404 "vkCmdBeginRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
9405 return;
9406 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009407}
9408
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009409VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
9410 VkCmdBuffer cmdBuffer,
9411 const VkRenderPassBegin* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009412{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009413 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
9414 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
9415
9416 PostCmdBeginRenderPass(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009417}
9418
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009419void PreCmdEndRenderPass(
9420 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009421{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009422 if(cmdBuffer == nullptr)
9423 {
9424 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9425 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
9426 return;
9427 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009428}
9429
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009430void PostCmdEndRenderPass(
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08009431 VkCmdBuffer cmdBuffer)
Chia-I Wu5b66aa52015-04-16 22:02:10 +08009432{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009433 if(cmdBuffer == nullptr)
9434 {
9435 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9436 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
9437 return;
9438 }
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08009439}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009440
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08009441void PreCmdExecuteCommands(
9442 VkCmdBuffer cmdBuffer)
9443{
9444 if(cmdBuffer == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009445 {
9446 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08009447 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
9448 return;
9449 }
9450}
9451
9452void PostCmdExecuteCommands(
9453 VkCmdBuffer cmdBuffer)
9454{
9455 if(cmdBuffer == nullptr)
9456 {
9457 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK",
9458 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009459 return;
9460 }
Chia-I Wu5b66aa52015-04-16 22:02:10 +08009461}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009462
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009463VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08009464 VkCmdBuffer cmdBuffer)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06009465{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009466 PreCmdEndRenderPass(cmdBuffer);
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08009467 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06009468
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08009469 PostCmdEndRenderPass(cmdBuffer);
9470}
9471
9472VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
9473 VkCmdBuffer cmdBuffer,
9474 uint32_t cmdBuffersCount,
9475 const VkCmdBuffer* pCmdBuffers)
9476{
9477 PreCmdExecuteCommands(cmdBuffer);
9478 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
9479
9480 PostCmdExecuteCommands(cmdBuffer);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06009481}
9482
Jon Ashburn1245cec2015-05-18 13:20:15 -06009483VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009484{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05009485 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009486 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05009487 }
9488
Jon Ashburn4f2575f2015-05-28 16:25:02 -06009489 /* loader uses this to force layer initialization; device object is wrapped */
9490 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009491 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Jon Ashburn4f2575f2015-05-28 16:25:02 -06009492 return (void*) vkGetDeviceProcAddr;
9493 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009494
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06009495 if (!strcmp(funcName, "vkCreateDevice"))
9496 return (void*) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009497 if (!strcmp(funcName, "vkDestroyDevice"))
9498 return (void*) vkDestroyDevice;
9499 if (!strcmp(funcName, "vkGetDeviceQueue"))
9500 return (void*) vkGetDeviceQueue;
9501 if (!strcmp(funcName, "vkQueueSubmit"))
9502 return (void*) vkQueueSubmit;
9503 if (!strcmp(funcName, "vkQueueWaitIdle"))
9504 return (void*) vkQueueWaitIdle;
9505 if (!strcmp(funcName, "vkDeviceWaitIdle"))
9506 return (void*) vkDeviceWaitIdle;
9507 if (!strcmp(funcName, "vkAllocMemory"))
9508 return (void*) vkAllocMemory;
9509 if (!strcmp(funcName, "vkFreeMemory"))
9510 return (void*) vkFreeMemory;
9511 if (!strcmp(funcName, "vkMapMemory"))
9512 return (void*) vkMapMemory;
9513 if (!strcmp(funcName, "vkUnmapMemory"))
9514 return (void*) vkUnmapMemory;
9515 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
9516 return (void*) vkFlushMappedMemoryRanges;
9517 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
9518 return (void*) vkInvalidateMappedMemoryRanges;
9519 if (!strcmp(funcName, "vkDestroyObject"))
9520 return (void*) vkDestroyObject;
9521 if (!strcmp(funcName, "vkGetObjectMemoryRequirements"))
9522 return (void*) vkGetObjectMemoryRequirements;
9523 if (!strcmp(funcName, "vkCreateFence"))
9524 return (void*) vkCreateFence;
9525 if (!strcmp(funcName, "vkResetFences"))
9526 return (void*) vkResetFences;
9527 if (!strcmp(funcName, "vkGetFenceStatus"))
9528 return (void*) vkGetFenceStatus;
9529 if (!strcmp(funcName, "vkWaitForFences"))
9530 return (void*) vkWaitForFences;
9531 if (!strcmp(funcName, "vkCreateSemaphore"))
9532 return (void*) vkCreateSemaphore;
9533 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
9534 return (void*) vkQueueSignalSemaphore;
9535 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
9536 return (void*) vkQueueWaitSemaphore;
9537 if (!strcmp(funcName, "vkCreateEvent"))
9538 return (void*) vkCreateEvent;
9539 if (!strcmp(funcName, "vkGetEventStatus"))
9540 return (void*) vkGetEventStatus;
9541 if (!strcmp(funcName, "vkSetEvent"))
9542 return (void*) vkSetEvent;
9543 if (!strcmp(funcName, "vkResetEvent"))
9544 return (void*) vkResetEvent;
9545 if (!strcmp(funcName, "vkCreateQueryPool"))
9546 return (void*) vkCreateQueryPool;
9547 if (!strcmp(funcName, "vkGetQueryPoolResults"))
9548 return (void*) vkGetQueryPoolResults;
9549 if (!strcmp(funcName, "vkCreateBuffer"))
9550 return (void*) vkCreateBuffer;
9551 if (!strcmp(funcName, "vkCreateBufferView"))
9552 return (void*) vkCreateBufferView;
9553 if (!strcmp(funcName, "vkCreateImage"))
9554 return (void*) vkCreateImage;
9555 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
9556 return (void*) vkGetImageSubresourceLayout;
9557 if (!strcmp(funcName, "vkCreateImageView"))
9558 return (void*) vkCreateImageView;
9559 if (!strcmp(funcName, "vkCreateColorAttachmentView"))
9560 return (void*) vkCreateColorAttachmentView;
9561 if (!strcmp(funcName, "vkCreateDepthStencilView"))
9562 return (void*) vkCreateDepthStencilView;
9563 if (!strcmp(funcName, "vkCreateShader"))
9564 return (void*) vkCreateShader;
9565 if (!strcmp(funcName, "vkCreateGraphicsPipeline"))
9566 return (void*) vkCreateGraphicsPipeline;
9567 if (!strcmp(funcName, "vkCreateGraphicsPipelineDerivative"))
9568 return (void*) vkCreateGraphicsPipelineDerivative;
9569 if (!strcmp(funcName, "vkCreateComputePipeline"))
9570 return (void*) vkCreateComputePipeline;
9571 if (!strcmp(funcName, "vkStorePipeline"))
9572 return (void*) vkStorePipeline;
9573 if (!strcmp(funcName, "vkLoadPipeline"))
9574 return (void*) vkLoadPipeline;
9575 if (!strcmp(funcName, "vkLoadPipelineDerivative"))
9576 return (void*) vkLoadPipelineDerivative;
9577 if (!strcmp(funcName, "vkCreatePipelineLayout"))
9578 return (void*) vkCreatePipelineLayout;
9579 if (!strcmp(funcName, "vkCreateSampler"))
9580 return (void*) vkCreateSampler;
9581 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
9582 return (void*) vkCreateDescriptorSetLayout;
9583 if (!strcmp(funcName, "vkCreateDescriptorPool"))
9584 return (void*) vkCreateDescriptorPool;
9585 if (!strcmp(funcName, "vkResetDescriptorPool"))
9586 return (void*) vkResetDescriptorPool;
9587 if (!strcmp(funcName, "vkAllocDescriptorSets"))
9588 return (void*) vkAllocDescriptorSets;
9589 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
9590 return (void*) vkCreateDynamicViewportState;
9591 if (!strcmp(funcName, "vkCreateDynamicRasterState"))
9592 return (void*) vkCreateDynamicRasterState;
9593 if (!strcmp(funcName, "vkCreateDynamicColorBlendState"))
9594 return (void*) vkCreateDynamicColorBlendState;
9595 if (!strcmp(funcName, "vkCreateDynamicDepthStencilState"))
9596 return (void*) vkCreateDynamicDepthStencilState;
9597 if (!strcmp(funcName, "vkCreateCommandBuffer"))
9598 return (void*) vkCreateCommandBuffer;
9599 if (!strcmp(funcName, "vkBeginCommandBuffer"))
9600 return (void*) vkBeginCommandBuffer;
9601 if (!strcmp(funcName, "vkEndCommandBuffer"))
9602 return (void*) vkEndCommandBuffer;
9603 if (!strcmp(funcName, "vkResetCommandBuffer"))
9604 return (void*) vkResetCommandBuffer;
9605 if (!strcmp(funcName, "vkCmdBindPipeline"))
9606 return (void*) vkCmdBindPipeline;
9607 if (!strcmp(funcName, "vkCmdBindDynamicStateObject"))
9608 return (void*) vkCmdBindDynamicStateObject;
9609 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
9610 return (void*) vkCmdBindDescriptorSets;
9611 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
9612 return (void*) vkCmdBindVertexBuffers;
9613 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
9614 return (void*) vkCmdBindIndexBuffer;
9615 if (!strcmp(funcName, "vkCmdDraw"))
9616 return (void*) vkCmdDraw;
9617 if (!strcmp(funcName, "vkCmdDrawIndexed"))
9618 return (void*) vkCmdDrawIndexed;
9619 if (!strcmp(funcName, "vkCmdDrawIndirect"))
9620 return (void*) vkCmdDrawIndirect;
9621 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
9622 return (void*) vkCmdDrawIndexedIndirect;
9623 if (!strcmp(funcName, "vkCmdDispatch"))
9624 return (void*) vkCmdDispatch;
9625 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
9626 return (void*) vkCmdDispatchIndirect;
9627 if (!strcmp(funcName, "vkCmdCopyBuffer"))
9628 return (void*) vkCmdCopyBuffer;
9629 if (!strcmp(funcName, "vkCmdCopyImage"))
9630 return (void*) vkCmdCopyImage;
9631 if (!strcmp(funcName, "vkCmdBlitImage"))
9632 return (void*) vkCmdBlitImage;
9633 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
9634 return (void*) vkCmdCopyBufferToImage;
9635 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
9636 return (void*) vkCmdCopyImageToBuffer;
9637 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
9638 return (void*) vkCmdUpdateBuffer;
9639 if (!strcmp(funcName, "vkCmdFillBuffer"))
9640 return (void*) vkCmdFillBuffer;
9641 if (!strcmp(funcName, "vkCmdClearColorImage"))
9642 return (void*) vkCmdClearColorImage;
Chris Forbes2951d7d2015-06-22 17:21:59 +12009643 if (!strcmp(funcName, "vkCmdClearDepthStencilImage"))
9644 return (void*) vkCmdClearDepthStencilImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009645 if (!strcmp(funcName, "vkCmdResolveImage"))
9646 return (void*) vkCmdResolveImage;
9647 if (!strcmp(funcName, "vkCmdSetEvent"))
9648 return (void*) vkCmdSetEvent;
9649 if (!strcmp(funcName, "vkCmdResetEvent"))
9650 return (void*) vkCmdResetEvent;
9651 if (!strcmp(funcName, "vkCmdWaitEvents"))
9652 return (void*) vkCmdWaitEvents;
9653 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
9654 return (void*) vkCmdPipelineBarrier;
9655 if (!strcmp(funcName, "vkCmdBeginQuery"))
9656 return (void*) vkCmdBeginQuery;
9657 if (!strcmp(funcName, "vkCmdEndQuery"))
9658 return (void*) vkCmdEndQuery;
9659 if (!strcmp(funcName, "vkCmdResetQueryPool"))
9660 return (void*) vkCmdResetQueryPool;
9661 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
9662 return (void*) vkCmdWriteTimestamp;
9663 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
9664 return (void*) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009665 if (!strcmp(funcName, "vkCreateFramebuffer"))
9666 return (void*) vkCreateFramebuffer;
9667 if (!strcmp(funcName, "vkCreateRenderPass"))
9668 return (void*) vkCreateRenderPass;
9669 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
9670 return (void*) vkCmdBeginRenderPass;
9671 if (!strcmp(funcName, "vkCmdEndRenderPass"))
9672 return (void*) vkCmdEndRenderPass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06009673
Jon Ashburn6f8cd632015-06-01 09:37:38 -06009674 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009675 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009676 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009677 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06009678 }
9679}
9680
Mark Lobodzinski3723c512015-05-26 10:58:40 -05009681VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06009682{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05009683 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06009684 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05009685 }
9686
Jon Ashburn4f2575f2015-05-28 16:25:02 -06009687 /* loader uses this to force layer initialization; instance object is wrapped */
9688 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009689 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
9690 return (void *) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06009691 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06009692
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009693 if (!strcmp(funcName, "vkCreateInstance"))
9694 return (void*) vkCreateInstance;
9695 if (!strcmp(funcName, "vkDestroyInstance"))
9696 return (void*) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009697 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
9698 return (void*) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009699 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
9700 return (void*) vkGetPhysicalDeviceProperties;
9701 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
9702 return (void*) vkGetPhysicalDeviceFeatures;
9703 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatInfo"))
9704 return (void*) vkGetPhysicalDeviceFormatInfo;
9705 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
9706 return (void*) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06009707 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
9708 return (void*) vkGetGlobalLayerProperties;
9709 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
9710 return (void*) vkGetGlobalExtensionProperties;
9711 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
9712 return (void*) vkGetPhysicalDeviceLayerProperties;
9713 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
9714 return (void*) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06009715
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009716 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
9717 void* fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
9718 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06009719 return fptr;
9720
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06009721 {
9722 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
9723 return NULL;
9724 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
9725 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06009726}