blob: 8a7c672ef50447fd71f461c67a20657ccea8b514 [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"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060071debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060072{
73 dispatch_key key = get_dispatch_key(object);
74 layer_data *data = get_my_data_ptr(key, layer_data_map);
75#if DISPATCH_MAP_DEBUG
76 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
77#endif
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
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600184// Version: 0.136.0
185
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600186static
187std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600188{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600189 switch(enumerator)
190 {
191 case VK_ERROR_MEMORY_NOT_BOUND:
192 {
193 return "VK_ERROR_MEMORY_NOT_BOUND";
194 break;
195 }
196 case VK_ERROR_BUILDING_COMMAND_BUFFER:
197 {
198 return "VK_ERROR_BUILDING_COMMAND_BUFFER";
199 break;
200 }
201 case VK_ERROR_INCOMPATIBLE_DRIVER:
202 {
203 return "VK_ERROR_INCOMPATIBLE_DRIVER";
204 break;
205 }
206 case VK_ERROR_MEMORY_UNMAP_FAILED:
207 {
208 return "VK_ERROR_MEMORY_UNMAP_FAILED";
209 break;
210 }
211 case VK_ERROR_MEMORY_MAP_FAILED:
212 {
213 return "VK_ERROR_MEMORY_MAP_FAILED";
214 break;
215 }
216 case VK_ERROR_BAD_PIPELINE_DATA:
217 {
218 return "VK_ERROR_BAD_PIPELINE_DATA";
219 break;
220 }
221 case VK_ERROR_INVALID_OBJECT_TYPE:
222 {
223 return "VK_ERROR_INVALID_OBJECT_TYPE";
224 break;
225 }
226 case VK_ERROR_INVALID_QUEUE_TYPE:
227 {
228 return "VK_ERROR_INVALID_QUEUE_TYPE";
229 break;
230 }
231 case VK_ERROR_BAD_SHADER_CODE:
232 {
233 return "VK_ERROR_BAD_SHADER_CODE";
234 break;
235 }
236 case VK_ERROR_INVALID_IMAGE:
237 {
238 return "VK_ERROR_INVALID_IMAGE";
239 break;
240 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600241 case VK_ERROR_INVALID_FORMAT:
242 {
243 return "VK_ERROR_INVALID_FORMAT";
244 break;
245 }
246 case VK_ERROR_INCOMPLETE_COMMAND_BUFFER:
247 {
248 return "VK_ERROR_INCOMPLETE_COMMAND_BUFFER";
249 break;
250 }
251 case VK_ERROR_INVALID_ALIGNMENT:
252 {
253 return "VK_ERROR_INVALID_ALIGNMENT";
254 break;
255 }
256 case VK_ERROR_UNAVAILABLE:
257 {
258 return "VK_ERROR_UNAVAILABLE";
259 break;
260 }
261 case VK_INCOMPLETE:
262 {
263 return "VK_INCOMPLETE";
264 break;
265 }
266 case VK_ERROR_OUT_OF_HOST_MEMORY:
267 {
268 return "VK_ERROR_OUT_OF_HOST_MEMORY";
269 break;
270 }
271 case VK_ERROR_UNKNOWN:
272 {
273 return "VK_ERROR_UNKNOWN";
274 break;
275 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600276 case VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION:
277 {
278 return "VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION";
279 break;
280 }
281 case VK_ERROR_INITIALIZATION_FAILED:
282 {
283 return "VK_ERROR_INITIALIZATION_FAILED";
284 break;
285 }
286 case VK_NOT_READY:
287 {
288 return "VK_NOT_READY";
289 break;
290 }
291 case VK_ERROR_INVALID_POINTER:
292 {
293 return "VK_ERROR_INVALID_POINTER";
294 break;
295 }
296 case VK_ERROR_INVALID_VALUE:
297 {
298 return "VK_ERROR_INVALID_VALUE";
299 break;
300 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600301 case VK_ERROR_NOT_MAPPABLE:
302 {
303 return "VK_ERROR_NOT_MAPPABLE";
304 break;
305 }
306 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
307 {
308 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
309 break;
310 }
311 case VK_EVENT_SET:
312 {
313 return "VK_EVENT_SET";
314 break;
315 }
316 case VK_TIMEOUT:
317 {
318 return "VK_TIMEOUT";
319 break;
320 }
321 case VK_ERROR_INVALID_FLAGS:
322 {
323 return "VK_ERROR_INVALID_FLAGS";
324 break;
325 }
326 case VK_EVENT_RESET:
327 {
328 return "VK_EVENT_RESET";
329 break;
330 }
331 case VK_ERROR_INVALID_DESCRIPTOR_SET_DATA:
332 {
333 return "VK_ERROR_INVALID_DESCRIPTOR_SET_DATA";
334 break;
335 }
336 case VK_UNSUPPORTED:
337 {
338 return "VK_UNSUPPORTED";
339 break;
340 }
341 case VK_ERROR_INVALID_HANDLE:
342 {
343 return "VK_ERROR_INVALID_HANDLE";
344 break;
345 }
346 case VK_ERROR_INCOMPATIBLE_DEVICE:
347 {
348 return "VK_ERROR_INCOMPATIBLE_DEVICE";
349 break;
350 }
351 case VK_SUCCESS:
352 {
353 return "VK_SUCCESS";
354 break;
355 }
356 case VK_ERROR_INCOMPATIBLE_QUEUE:
357 {
358 return "VK_ERROR_INCOMPATIBLE_QUEUE";
359 break;
360 }
361 case VK_ERROR_INVALID_EXTENSION:
362 {
363 return "VK_ERROR_INVALID_EXTENSION";
364 break;
365 }
366 case VK_ERROR_DEVICE_ALREADY_CREATED:
367 {
368 return "VK_ERROR_DEVICE_ALREADY_CREATED";
369 break;
370 }
371 case VK_ERROR_DEVICE_LOST:
372 {
373 return "VK_ERROR_DEVICE_LOST";
374 break;
375 }
376 case VK_ERROR_INVALID_ORDINAL:
377 {
378 return "VK_ERROR_INVALID_ORDINAL";
379 break;
380 }
381 case VK_ERROR_INVALID_MEMORY_SIZE:
382 {
383 return "VK_ERROR_INVALID_MEMORY_SIZE";
384 break;
385 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600386 case VK_ERROR_INVALID_LAYER:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600387 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600388 return "VK_ERROR_INVALID_LAYER";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600389 break;
390 }
391 default:
392 {
393 return "unrecognized enumerator";
394 break;
395 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600396 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600397}
398
399static
400bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
401{
402 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
403 VK_QUEUE_DMA_BIT |
404 VK_QUEUE_COMPUTE_BIT |
405 VK_QUEUE_SPARSE_MEMMGR_BIT |
406 VK_QUEUE_GRAPHICS_BIT);
407 if(enumerator & (~allFlags))
408 {
409 return false;
410 }
411
412 return true;
413}
414
415static
416std::string EnumeratorString(VkQueueFlagBits const& enumerator)
417{
418 if(!ValidateEnumerator(enumerator))
419 {
420 return "unrecognized enumerator";
421 }
422
423 std::vector<std::string> strings;
424 if(enumerator & VK_QUEUE_EXTENDED_BIT)
425 {
426 strings.push_back("VK_QUEUE_EXTENDED_BIT");
427 }
428 if(enumerator & VK_QUEUE_DMA_BIT)
429 {
430 strings.push_back("VK_QUEUE_DMA_BIT");
431 }
432 if(enumerator & VK_QUEUE_COMPUTE_BIT)
433 {
434 strings.push_back("VK_QUEUE_COMPUTE_BIT");
435 }
436 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
437 {
438 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
439 }
440 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
441 {
442 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
443 }
444
445 std::string enumeratorString;
446 for(auto const& string : strings)
447 {
448 enumeratorString += string;
449
450 if(string != strings.back())
451 {
452 enumeratorString += '|';
453 }
454 }
455
456 return enumeratorString;
457}
458
459static
460bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
461{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600462 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600463 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
464 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
465 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
466 VK_MEMORY_PROPERTY_DEVICE_ONLY);
467 if(enumerator & (~allFlags))
468 {
469 return false;
470 }
471
472 return true;
473}
474
475static
476std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
477{
478 if(!ValidateEnumerator(enumerator))
479 {
480 return "unrecognized enumerator";
481 }
482
483 std::vector<std::string> strings;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600484 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
485 {
486 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
487 }
488 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
489 {
490 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
491 }
492 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
493 {
494 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
495 }
496 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
497 {
498 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
499 }
500 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
501 {
502 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
503 }
504
505 std::string enumeratorString;
506 for(auto const& string : strings)
507 {
508 enumeratorString += string;
509
510 if(string != strings.back())
511 {
512 enumeratorString += '|';
513 }
514 }
515
516 return enumeratorString;
517}
518
519static
520bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
521{
522 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
523 VK_MEMORY_OUTPUT_TRANSFER_BIT |
524 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
525 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
526 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
527 if(enumerator & (~allFlags))
528 {
529 return false;
530 }
531
532 return true;
533}
534
535static
536std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
537{
538 if(!ValidateEnumerator(enumerator))
539 {
540 return "unrecognized enumerator";
541 }
542
543 std::vector<std::string> strings;
544 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
545 {
546 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
547 }
548 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
549 {
550 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
551 }
552 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
553 {
554 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
555 }
556 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
557 {
558 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
559 }
560 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
561 {
562 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
563 }
564
565 std::string enumeratorString;
566 for(auto const& string : strings)
567 {
568 enumeratorString += string;
569
570 if(string != strings.back())
571 {
572 enumeratorString += '|';
573 }
574 }
575
576 return enumeratorString;
577}
578
579static
580bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
581{
582 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
583 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
584 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
585 VK_MEMORY_INPUT_SHADER_READ_BIT |
586 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
587 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
588 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
589 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
590 VK_MEMORY_INPUT_HOST_READ_BIT);
591 if(enumerator & (~allFlags))
592 {
593 return false;
594 }
595
596 return true;
597}
598
599static
600std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
601{
602 if(!ValidateEnumerator(enumerator))
603 {
604 return "unrecognized enumerator";
605 }
606
607 std::vector<std::string> strings;
608 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
609 {
610 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
611 }
612 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
613 {
614 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
615 }
616 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
617 {
618 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
619 }
620 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
621 {
622 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
623 }
624 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
625 {
626 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
627 }
628 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
629 {
630 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
631 }
632 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
633 {
634 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
635 }
636 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
637 {
638 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
639 }
640 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
641 {
642 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
643 }
644
645 std::string enumeratorString;
646 for(auto const& string : strings)
647 {
648 enumeratorString += string;
649
650 if(string != strings.back())
651 {
652 enumeratorString += '|';
653 }
654 }
655
656 return enumeratorString;
657}
658
659static
660bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
661{
662 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
663 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
664 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
665 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
666 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
667 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
668 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
669 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
670 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
671 VK_BUFFER_USAGE_GENERAL);
672 if(enumerator & (~allFlags))
673 {
674 return false;
675 }
676
677 return true;
678}
679
680static
681std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
682{
683 if(!ValidateEnumerator(enumerator))
684 {
685 return "unrecognized enumerator";
686 }
687
688 std::vector<std::string> strings;
689 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
690 {
691 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
692 }
693 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
694 {
695 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
696 }
697 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
698 {
699 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
700 }
701 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
702 {
703 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
704 }
705 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
706 {
707 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
708 }
709 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
710 {
711 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
712 }
713 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
714 {
715 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
716 }
717 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
718 {
719 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
720 }
721 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
722 {
723 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
724 }
725 if(enumerator & VK_BUFFER_USAGE_GENERAL)
726 {
727 strings.push_back("VK_BUFFER_USAGE_GENERAL");
728 }
729
730 std::string enumeratorString;
731 for(auto const& string : strings)
732 {
733 enumeratorString += string;
734
735 if(string != strings.back())
736 {
737 enumeratorString += '|';
738 }
739 }
740
741 return enumeratorString;
742}
743
744static
745bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
746{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600747 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
748 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
749 VK_BUFFER_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600750 if(enumerator & (~allFlags))
751 {
752 return false;
753 }
754
755 return true;
756}
757
758static
759std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
760{
761 if(!ValidateEnumerator(enumerator))
762 {
763 return "unrecognized enumerator";
764 }
765
766 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600767 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
768 {
769 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
770 }
771 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
772 {
773 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
774 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600775 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
776 {
777 strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT");
778 }
779
780 std::string enumeratorString;
781 for(auto const& string : strings)
782 {
783 enumeratorString += string;
784
785 if(string != strings.back())
786 {
787 enumeratorString += '|';
788 }
789 }
790
791 return enumeratorString;
792}
793
794static
795bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
796{
797 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
798 VK_SHADER_STAGE_FRAGMENT_BIT |
799 VK_SHADER_STAGE_GEOMETRY_BIT |
800 VK_SHADER_STAGE_COMPUTE_BIT |
801 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
802 VK_SHADER_STAGE_TESS_CONTROL_BIT |
803 VK_SHADER_STAGE_VERTEX_BIT);
804 if(enumerator & (~allFlags))
805 {
806 return false;
807 }
808
809 return true;
810}
811
812static
813std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
814{
815 if(!ValidateEnumerator(enumerator))
816 {
817 return "unrecognized enumerator";
818 }
819
820 std::vector<std::string> strings;
821 if(enumerator & VK_SHADER_STAGE_ALL)
822 {
823 strings.push_back("VK_SHADER_STAGE_ALL");
824 }
825 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
826 {
827 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
828 }
829 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
830 {
831 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
832 }
833 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
834 {
835 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
836 }
837 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
838 {
839 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
840 }
841 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
842 {
843 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
844 }
845 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
846 {
847 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
848 }
849
850 std::string enumeratorString;
851 for(auto const& string : strings)
852 {
853 enumeratorString += string;
854
855 if(string != strings.back())
856 {
857 enumeratorString += '|';
858 }
859 }
860
861 return enumeratorString;
862}
863
864static
865bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
866{
867 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_DEPTH_STENCIL_BIT |
868 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
869 VK_IMAGE_USAGE_STORAGE_BIT |
870 VK_IMAGE_USAGE_SAMPLED_BIT |
871 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
872 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
873 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT |
874 VK_IMAGE_USAGE_GENERAL);
875 if(enumerator & (~allFlags))
876 {
877 return false;
878 }
879
880 return true;
881}
882
883static
884std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
885{
886 if(!ValidateEnumerator(enumerator))
887 {
888 return "unrecognized enumerator";
889 }
890
891 std::vector<std::string> strings;
892 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
893 {
894 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
895 }
896 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
897 {
898 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
899 }
900 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
901 {
902 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
903 }
904 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
905 {
906 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
907 }
908 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
909 {
910 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
911 }
912 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
913 {
914 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
915 }
916 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
917 {
918 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
919 }
920 if(enumerator & VK_IMAGE_USAGE_GENERAL)
921 {
922 strings.push_back("VK_IMAGE_USAGE_GENERAL");
923 }
924
925 std::string enumeratorString;
926 for(auto const& string : strings)
927 {
928 enumeratorString += string;
929
930 if(string != strings.back())
931 {
932 enumeratorString += '|';
933 }
934 }
935
936 return enumeratorString;
937}
938
939static
940bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
941{
942 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600943 VK_IMAGE_CREATE_INVARIANT_DATA_BIT |
944 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
945 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600946 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600947 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600948 if(enumerator & (~allFlags))
949 {
950 return false;
951 }
952
953 return true;
954}
955
956static
957std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
958{
959 if(!ValidateEnumerator(enumerator))
960 {
961 return "unrecognized enumerator";
962 }
963
964 std::vector<std::string> strings;
965 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
966 {
967 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
968 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600969 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
970 {
971 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
972 }
973 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
974 {
975 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
976 }
977 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
978 {
979 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
980 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600981 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
982 {
983 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
984 }
985 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
986 {
987 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
988 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600989
990 std::string enumeratorString;
991 for(auto const& string : strings)
992 {
993 enumeratorString += string;
994
995 if(string != strings.back())
996 {
997 enumeratorString += '|';
998 }
999 }
1000
1001 return enumeratorString;
1002}
1003
1004static
Chia-I Wuc278df82015-07-07 11:50:03 +08001005bool ValidateEnumerator(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001006{
Chia-I Wuc278df82015-07-07 11:50:03 +08001007 VkAttachmentViewCreateFlagBits allFlags = (VkAttachmentViewCreateFlagBits)(VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT |
1008 VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001009 if(enumerator & (~allFlags))
1010 {
1011 return false;
1012 }
1013
1014 return true;
1015}
1016
1017static
Chia-I Wuc278df82015-07-07 11:50:03 +08001018std::string EnumeratorString(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001019{
1020 if(!ValidateEnumerator(enumerator))
1021 {
1022 return "unrecognized enumerator";
1023 }
1024
1025 std::vector<std::string> strings;
Chia-I Wuc278df82015-07-07 11:50:03 +08001026 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001027 {
Chia-I Wuc278df82015-07-07 11:50:03 +08001028 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001029 }
Chia-I Wuc278df82015-07-07 11:50:03 +08001030 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001031 {
Chia-I Wuc278df82015-07-07 11:50:03 +08001032 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001033 }
1034
1035 std::string enumeratorString;
1036 for(auto const& string : strings)
1037 {
1038 enumeratorString += string;
1039
1040 if(string != strings.back())
1041 {
1042 enumeratorString += '|';
1043 }
1044 }
1045
1046 return enumeratorString;
1047}
1048
1049static
1050bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
1051{
1052 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1053 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
1054 if(enumerator & (~allFlags))
1055 {
1056 return false;
1057 }
1058
1059 return true;
1060}
1061
1062static
1063std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
1064{
1065 if(!ValidateEnumerator(enumerator))
1066 {
1067 return "unrecognized enumerator";
1068 }
1069
1070 std::vector<std::string> strings;
1071 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1072 {
1073 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1074 }
1075 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1076 {
1077 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
1078 }
1079
1080 std::string enumeratorString;
1081 for(auto const& string : strings)
1082 {
1083 enumeratorString += string;
1084
1085 if(string != strings.back())
1086 {
1087 enumeratorString += '|';
1088 }
1089 }
1090
1091 return enumeratorString;
1092}
1093
1094static
1095bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1096{
1097 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1098 VK_CHANNEL_B_BIT |
1099 VK_CHANNEL_G_BIT |
1100 VK_CHANNEL_R_BIT);
1101 if(enumerator & (~allFlags))
1102 {
1103 return false;
1104 }
1105
1106 return true;
1107}
1108
1109static
1110std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1111{
1112 if(!ValidateEnumerator(enumerator))
1113 {
1114 return "unrecognized enumerator";
1115 }
1116
1117 std::vector<std::string> strings;
1118 if(enumerator & VK_CHANNEL_A_BIT)
1119 {
1120 strings.push_back("VK_CHANNEL_A_BIT");
1121 }
1122 if(enumerator & VK_CHANNEL_B_BIT)
1123 {
1124 strings.push_back("VK_CHANNEL_B_BIT");
1125 }
1126 if(enumerator & VK_CHANNEL_G_BIT)
1127 {
1128 strings.push_back("VK_CHANNEL_G_BIT");
1129 }
1130 if(enumerator & VK_CHANNEL_R_BIT)
1131 {
1132 strings.push_back("VK_CHANNEL_R_BIT");
1133 }
1134
1135 std::string enumeratorString;
1136 for(auto const& string : strings)
1137 {
1138 enumeratorString += string;
1139
1140 if(string != strings.back())
1141 {
1142 enumeratorString += '|';
1143 }
1144 }
1145
1146 return enumeratorString;
1147}
1148
1149static
1150bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
1151{
1152 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
1153 if(enumerator & (~allFlags))
1154 {
1155 return false;
1156 }
1157
1158 return true;
1159}
1160
1161static
1162std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
1163{
1164 if(!ValidateEnumerator(enumerator))
1165 {
1166 return "unrecognized enumerator";
1167 }
1168
1169 std::vector<std::string> strings;
1170 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
1171 {
1172 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
1173 }
1174
1175 std::string enumeratorString;
1176 for(auto const& string : strings)
1177 {
1178 enumeratorString += string;
1179
1180 if(string != strings.back())
1181 {
1182 enumeratorString += '|';
1183 }
1184 }
1185
1186 return enumeratorString;
1187}
1188
1189static
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001190bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
1191{
1192 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
1193 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
1194 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
1195 if(enumerator & (~allFlags))
1196 {
1197 return false;
1198 }
1199
1200 return true;
1201}
1202
1203static
1204std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
1205{
1206 if(!ValidateEnumerator(enumerator))
1207 {
1208 return "unrecognized enumerator";
1209 }
1210
1211 std::vector<std::string> strings;
1212 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
1213 {
1214 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
1215 }
1216 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
1217 {
1218 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
1219 }
1220 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
1221 {
1222 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
1223 }
1224
1225 std::string enumeratorString;
1226 for(auto const& string : strings)
1227 {
1228 enumeratorString += string;
1229
1230 if(string != strings.back())
1231 {
1232 enumeratorString += '|';
1233 }
1234 }
1235
1236 return enumeratorString;
1237}
1238
1239static
1240bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
1241{
1242 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
1243 if(enumerator & (~allFlags))
1244 {
1245 return false;
1246 }
1247
1248 return true;
1249}
1250
1251static
1252std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
1253{
1254 if(!ValidateEnumerator(enumerator))
1255 {
1256 return "unrecognized enumerator";
1257 }
1258
1259 std::vector<std::string> strings;
1260 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
1261 {
1262 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
1263 }
1264
1265 std::string enumeratorString;
1266 for(auto const& string : strings)
1267 {
1268 enumeratorString += string;
1269
1270 if(string != strings.back())
1271 {
1272 enumeratorString += '|';
1273 }
1274 }
1275
1276 return enumeratorString;
1277}
1278
1279static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001280bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
1281{
1282 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(VK_FORMAT_FEATURE_CONVERSION_BIT |
1283 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
1284 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
1285 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
1286 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
1287 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
1288 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
1289 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
1290 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
1291 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
1292 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT);
1293 if(enumerator & (~allFlags))
1294 {
1295 return false;
1296 }
1297
1298 return true;
1299}
1300
1301static
1302std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
1303{
1304 if(!ValidateEnumerator(enumerator))
1305 {
1306 return "unrecognized enumerator";
1307 }
1308
1309 std::vector<std::string> strings;
1310 if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT)
1311 {
1312 strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT");
1313 }
1314 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
1315 {
1316 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
1317 }
1318 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
1319 {
1320 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
1321 }
1322 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
1323 {
1324 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
1325 }
1326 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
1327 {
1328 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
1329 }
1330 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
1331 {
1332 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
1333 }
1334 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
1335 {
1336 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
1337 }
1338 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
1339 {
1340 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
1341 }
1342 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
1343 {
1344 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
1345 }
1346 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
1347 {
1348 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
1349 }
1350 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
1351 {
1352 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
1353 }
1354
1355 std::string enumeratorString;
1356 for(auto const& string : strings)
1357 {
1358 enumeratorString += string;
1359
1360 if(string != strings.back())
1361 {
1362 enumeratorString += '|';
1363 }
1364 }
1365
1366 return enumeratorString;
1367}
1368
1369static
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001370bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
1371{
1372 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_STENCIL_BIT |
1373 VK_IMAGE_ASPECT_DEPTH_BIT |
1374 VK_IMAGE_ASPECT_COLOR_BIT);
1375 if(enumerator & (~allFlags))
1376 {
1377 return false;
1378 }
1379
1380 return true;
1381}
1382
1383static
1384std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
1385{
1386 if(!ValidateEnumerator(enumerator))
1387 {
1388 return "unrecognized enumerator";
1389 }
1390
1391 std::vector<std::string> strings;
1392 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1393 {
1394 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1395 }
1396 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1397 {
1398 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1399 }
1400 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1401 {
1402 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1403 }
1404
1405 std::string enumeratorString;
1406 for(auto const& string : strings)
1407 {
1408 enumeratorString += string;
1409
1410 if(string != strings.back())
1411 {
1412 enumeratorString += '|';
1413 }
1414 }
1415
1416 return enumeratorString;
1417}
1418
1419static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001420bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1421{
1422 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1423 if(enumerator & (~allFlags))
1424 {
1425 return false;
1426 }
1427
1428 return true;
1429}
1430
1431static
1432std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1433{
1434 if(!ValidateEnumerator(enumerator))
1435 {
1436 return "unrecognized enumerator";
1437 }
1438
1439 std::vector<std::string> strings;
1440 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1441 {
1442 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
1443 }
1444
1445 std::string enumeratorString;
1446 for(auto const& string : strings)
1447 {
1448 enumeratorString += string;
1449
1450 if(string != strings.back())
1451 {
1452 enumeratorString += '|';
1453 }
1454 }
1455
1456 return enumeratorString;
1457}
1458
1459static
1460bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
1461{
1462 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
1463 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
1464 VK_QUERY_RESULT_WAIT_BIT |
1465 VK_QUERY_RESULT_64_BIT |
1466 VK_QUERY_RESULT_DEFAULT);
1467 if(enumerator & (~allFlags))
1468 {
1469 return false;
1470 }
1471
1472 return true;
1473}
1474
1475static
1476std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
1477{
1478 if(!ValidateEnumerator(enumerator))
1479 {
1480 return "unrecognized enumerator";
1481 }
1482
1483 std::vector<std::string> strings;
1484 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
1485 {
1486 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
1487 }
1488 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
1489 {
1490 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
1491 }
1492 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
1493 {
1494 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
1495 }
1496 if(enumerator & VK_QUERY_RESULT_64_BIT)
1497 {
1498 strings.push_back("VK_QUERY_RESULT_64_BIT");
1499 }
1500 if(enumerator & VK_QUERY_RESULT_DEFAULT)
1501 {
1502 strings.push_back("VK_QUERY_RESULT_DEFAULT");
1503 }
1504
1505 std::string enumeratorString;
1506 for(auto const& string : strings)
1507 {
1508 enumeratorString += string;
1509
1510 if(string != strings.back())
1511 {
1512 enumeratorString += '|';
1513 }
1514 }
1515
1516 return enumeratorString;
1517}
1518
1519static
1520bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1521{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001522 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1523 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001524 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1525 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1526 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1527 if(enumerator & (~allFlags))
1528 {
1529 return false;
1530 }
1531
1532 return true;
1533}
1534
1535static
1536std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1537{
1538 if(!ValidateEnumerator(enumerator))
1539 {
1540 return "unrecognized enumerator";
1541 }
1542
1543 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001544 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1545 {
1546 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1547 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001548 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1549 {
1550 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1551 }
1552 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1553 {
1554 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1555 }
1556 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1557 {
1558 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1559 }
1560 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1561 {
1562 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1563 }
1564
1565 std::string enumeratorString;
1566 for(auto const& string : strings)
1567 {
1568 enumeratorString += string;
1569
1570 if(string != strings.back())
1571 {
1572 enumeratorString += '|';
1573 }
1574 }
1575
1576 return enumeratorString;
1577}
1578
1579static
1580bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
1581{
1582 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
1583 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
1584 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
1585 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
1586 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
1587 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
1588 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
1589 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
1590 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
1591 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
1592 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
1593 if(enumerator & (~allFlags))
1594 {
1595 return false;
1596 }
1597
1598 return true;
1599}
1600
1601static
1602std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
1603{
1604 if(!ValidateEnumerator(enumerator))
1605 {
1606 return "unrecognized enumerator";
1607 }
1608
1609 std::vector<std::string> strings;
1610 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
1611 {
1612 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
1613 }
1614 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
1615 {
1616 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
1617 }
1618 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
1619 {
1620 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
1621 }
1622 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
1623 {
1624 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
1625 }
1626 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
1627 {
1628 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
1629 }
1630 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
1631 {
1632 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
1633 }
1634 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
1635 {
1636 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
1637 }
1638 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
1639 {
1640 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
1641 }
1642 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
1643 {
1644 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
1645 }
1646 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
1647 {
1648 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
1649 }
1650 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
1651 {
1652 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
1653 }
1654
1655 std::string enumeratorString;
1656 for(auto const& string : strings)
1657 {
1658 enumeratorString += string;
1659
1660 if(string != strings.back())
1661 {
1662 enumeratorString += '|';
1663 }
1664 }
1665
1666 return enumeratorString;
1667}
1668
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001669static
1670bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
1671{
1672 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
1673 if(enumerator & (~allFlags))
1674 {
1675 return false;
1676 }
1677
1678 return true;
1679}
1680
1681static
1682std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
1683{
1684 if(!ValidateEnumerator(enumerator))
1685 {
1686 return "unrecognized enumerator";
1687 }
1688
1689 std::vector<std::string> strings;
1690 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
1691 {
1692 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
1693 }
1694
1695 std::string enumeratorString;
1696 for(auto const& string : strings)
1697 {
1698 enumeratorString += string;
1699
1700 if(string != strings.back())
1701 {
1702 enumeratorString += '|';
1703 }
1704 }
1705
1706 return enumeratorString;
1707}
1708
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001709VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1710 const VkInstanceCreateInfo* pCreateInfo,
1711 VkInstance* pInstance)
1712{
1713 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1714 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1715
1716 if (result == VK_SUCCESS) {
1717 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1718 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001719 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001720
1721 InitParamChecker(data);
1722 }
1723
1724 return result;
1725}
1726
1727VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(
1728 VkInstance instance)
1729{
1730 // Grab the key before the instance is destroyed.
1731 dispatch_key key = get_dispatch_key(instance);
1732 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
1733 VkResult result = pTable->DestroyInstance(instance);
1734
1735 // Clean up logging callback, if any
1736 layer_data *data = get_my_data_ptr(key, layer_data_map);
1737 if(data->logging_callback)
1738 {
1739 layer_destroy_msg_callback(data->report_data, data->logging_callback);
1740 }
1741
1742 layer_debug_report_destroy_instance(mid(instance));
1743 layer_data_map.erase(pTable);
1744
1745 pc_instance_table_map.erase(key);
1746 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
1747
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001748 return result;
1749}
1750
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001751bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001752 VkInstance instance,
1753 uint32_t* pPhysicalDeviceCount,
1754 VkPhysicalDevice* pPhysicalDevices,
1755 VkResult result)
1756{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001757
1758 if(pPhysicalDeviceCount == nullptr)
1759 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001760 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001761 "vkEnumeratePhysicalDevices parameter, uint32_t* pPhysicalDeviceCount, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001762 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001763 }
1764
1765 if(pPhysicalDevices == nullptr)
1766 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001767 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001768 "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001769 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001770 }
1771
1772 if(result != VK_SUCCESS)
1773 {
1774 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001775 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1776 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001777 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001778
1779 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001780}
1781
1782VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1783 VkInstance instance,
1784 uint32_t* pPhysicalDeviceCount,
1785 VkPhysicalDevice* pPhysicalDevices)
1786{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001787 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1788
1789 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1790
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001791 return result;
1792}
1793
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001794bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001795 VkPhysicalDevice physicalDevice,
1796 VkPhysicalDeviceFeatures* pFeatures,
1797 VkResult result)
1798{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001799
1800 if(pFeatures == nullptr)
1801 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001802 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001803 "vkGetPhysicalDeviceFeatures parameter, VkPhysicalDeviceFeatures* pFeatures, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001804 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001805 }
1806
1807 if(result != VK_SUCCESS)
1808 {
1809 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001810 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1811 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001812 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001813
1814 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001815}
1816
1817VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
1818 VkPhysicalDevice physicalDevice,
1819 VkPhysicalDeviceFeatures* pFeatures)
1820{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001821 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1822
1823 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
1824
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001825 return result;
1826}
1827
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001828bool PostGetPhysicalDeviceFormatInfo(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001829 VkPhysicalDevice physicalDevice,
1830 VkFormat format,
1831 VkFormatProperties* pFormatInfo,
1832 VkResult result)
1833{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001834
1835 if(format < VK_FORMAT_BEGIN_RANGE ||
1836 format > VK_FORMAT_END_RANGE)
1837 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001838 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001839 "vkGetPhysicalDeviceFormatInfo parameter, VkFormat format, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001840 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001841 }
1842
1843 if(pFormatInfo == nullptr)
1844 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001845 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001846 "vkGetPhysicalDeviceFormatInfo parameter, VkFormatProperties* pFormatInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001847 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001848 }
1849 if(!ValidateEnumerator((VkFormatFeatureFlagBits)pFormatInfo->linearTilingFeatures))
1850 {
1851 std::string reason = "vkGetPhysicalDeviceFormatInfo parameter, VkFormatFeatureFlags pFormatInfo->linearTilingFeatures, is " + EnumeratorString((VkFormatFeatureFlagBits)pFormatInfo->linearTilingFeatures);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001852 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1853 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001854 }
1855 if(!ValidateEnumerator((VkFormatFeatureFlagBits)pFormatInfo->optimalTilingFeatures))
1856 {
1857 std::string reason = "vkGetPhysicalDeviceFormatInfo parameter, VkFormatFeatureFlags pFormatInfo->optimalTilingFeatures, is " + EnumeratorString((VkFormatFeatureFlagBits)pFormatInfo->optimalTilingFeatures);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001858 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1859 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001860 }
1861
1862 if(result != VK_SUCCESS)
1863 {
1864 std::string reason = "vkGetPhysicalDeviceFormatInfo parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001865 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1866 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001867 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001868
1869 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001870}
1871
1872VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatInfo(
1873 VkPhysicalDevice physicalDevice,
1874 VkFormat format,
1875 VkFormatProperties* pFormatInfo)
1876{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001877 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatInfo(physicalDevice, format, pFormatInfo);
1878
1879 PostGetPhysicalDeviceFormatInfo(physicalDevice, format, pFormatInfo, result);
1880
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001881 return result;
1882}
1883
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001884bool PostGetPhysicalDeviceLimits(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001885 VkPhysicalDevice physicalDevice,
1886 VkPhysicalDeviceLimits* pLimits,
1887 VkResult result)
1888{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001889
1890 if(pLimits == nullptr)
1891 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001892 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001893 "vkGetPhysicalDeviceLimits parameter, VkPhysicalDeviceLimits* pLimits, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001894 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001895 }
1896
1897 if(result != VK_SUCCESS)
1898 {
1899 std::string reason = "vkGetPhysicalDeviceLimits parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001900 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1901 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001902 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001903
1904 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001905}
1906
1907VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
1908 VkPhysicalDevice physicalDevice,
1909 VkPhysicalDeviceLimits* pLimits)
1910{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001911 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceLimits(physicalDevice, pLimits);
1912
1913 PostGetPhysicalDeviceLimits(physicalDevice, pLimits, result);
1914
1915 return result;
1916}
1917
1918VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
1919 VkPhysicalDevice physicalDevice,
1920 const VkDeviceCreateInfo* pCreateInfo,
1921 VkDevice* pDevice)
1922{
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06001923 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001924 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
1925 if(result == VK_SUCCESS)
1926 {
1927 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
1928 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
1929 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
1930 }
1931
1932 return result;
1933}
1934
1935VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
1936 VkDevice device)
1937{
1938 layer_debug_report_destroy_device(device);
1939
1940 dispatch_key key = get_dispatch_key(device);
1941#if DISPATCH_MAP_DEBUG
1942 fprintf(stderr, "Device: %p, key: %p\n", device, key);
1943#endif
1944
1945 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
1946 pc_device_table_map.erase(key);
1947 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
1948
1949 return result;
1950}
1951
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001952bool PostGetPhysicalDeviceProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001953 VkPhysicalDevice physicalDevice,
1954 VkPhysicalDeviceProperties* pProperties,
1955 VkResult result)
1956{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001957
1958 if(pProperties == nullptr)
1959 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001960 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001961 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceProperties* pProperties, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001962 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001963 }
1964 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1965 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1966 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001967 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001968 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001969 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001970 }
1971
1972 if(result != VK_SUCCESS)
1973 {
1974 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001975 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1976 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001977 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001978
1979 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001980}
1981
1982VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
1983 VkPhysicalDevice physicalDevice,
1984 VkPhysicalDeviceProperties* pProperties)
1985{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001986 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
1987
1988 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
1989
1990 return result;
1991}
1992
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001993bool PostGetPhysicalDevicePerformance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001994 VkPhysicalDevice physicalDevice,
1995 VkPhysicalDevicePerformance* pPerformance,
1996 VkResult result)
1997{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001998
1999 if(pPerformance == nullptr)
2000 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002001 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002002 "vkGetPhysicalDevicePerformance parameter, VkPhysicalDevicePerformance* pPerformance, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002003 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002004 }
2005
2006 if(result != VK_SUCCESS)
2007 {
2008 std::string reason = "vkGetPhysicalDevicePerformance parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002009 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2010 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002011 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002012
2013 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002014}
2015
2016VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDevicePerformance(
2017 VkPhysicalDevice physicalDevice,
2018 VkPhysicalDevicePerformance* pPerformance)
2019{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002020 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDevicePerformance(physicalDevice, pPerformance);
2021
2022 PostGetPhysicalDevicePerformance(physicalDevice, pPerformance, result);
2023
2024 return result;
2025}
2026
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002027bool PostGetPhysicalDeviceQueueCount(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002028 VkPhysicalDevice physicalDevice,
2029 uint32_t* pCount,
2030 VkResult result)
2031{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002032
2033 if(pCount == nullptr)
2034 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002035 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002036 "vkGetPhysicalDeviceQueueCount parameter, uint32_t* pCount, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002037 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002038 }
2039
2040 if(result != VK_SUCCESS)
2041 {
2042 std::string reason = "vkGetPhysicalDeviceQueueCount parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002043 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2044 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002045 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002046
2047 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002048}
2049
2050VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueCount(
2051 VkPhysicalDevice physicalDevice,
2052 uint32_t* pCount)
2053{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002054 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueCount(physicalDevice, pCount);
2055
2056 PostGetPhysicalDeviceQueueCount(physicalDevice, pCount, result);
2057
2058 return result;
2059}
2060
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002061bool PostGetPhysicalDeviceQueueProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002062 VkPhysicalDevice physicalDevice,
2063 uint32_t count,
2064 VkPhysicalDeviceQueueProperties* pQueueProperties,
2065 VkResult result)
2066{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002067
2068
2069 if(pQueueProperties == nullptr)
2070 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002071 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002072 "vkGetPhysicalDeviceQueueProperties parameter, VkPhysicalDeviceQueueProperties* pQueueProperties, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002073 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002074 }
2075 if(!ValidateEnumerator((VkQueueFlagBits)pQueueProperties->queueFlags))
2076 {
2077 std::string reason = "vkGetPhysicalDeviceQueueProperties parameter, VkQueueFlags pQueueProperties->queueFlags, is " + EnumeratorString((VkQueueFlagBits)pQueueProperties->queueFlags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002078 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2079 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002080 }
2081
2082 if(result != VK_SUCCESS)
2083 {
2084 std::string reason = "vkGetPhysicalDeviceQueueProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002085 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2086 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002087 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002088
2089 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002090}
2091
2092VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2093 VkPhysicalDevice physicalDevice,
2094 uint32_t count,
2095 VkPhysicalDeviceQueueProperties* pQueueProperties)
2096{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002097 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties);
2098
2099 PostGetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties, result);
2100
2101 return result;
2102}
2103
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002104bool PostGetPhysicalDeviceMemoryProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002105 VkPhysicalDevice physicalDevice,
2106 VkPhysicalDeviceMemoryProperties* pMemoryProperies,
2107 VkResult result)
2108{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002109
2110 if(pMemoryProperies == nullptr)
2111 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002112 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002113 "vkGetPhysicalDeviceMemoryProperties parameter, VkPhysicalDeviceMemoryProperties* pMemoryProperies, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002114 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002115 }
2116
2117 if(result != VK_SUCCESS)
2118 {
2119 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002120 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2121 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002122 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002123
2124 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002125}
2126
2127VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2128 VkPhysicalDevice physicalDevice,
2129 VkPhysicalDeviceMemoryProperties* pMemoryProperies)
2130{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002131 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperies);
2132
2133 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperies, result);
2134
2135 return result;
2136}
2137
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002138bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002139 VkDevice device,
2140 uint32_t queueNodeIndex,
2141 uint32_t queueIndex,
2142 VkQueue* pQueue,
2143 VkResult result)
2144{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002145
2146
2147
2148 if(pQueue == nullptr)
2149 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002150 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002151 "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002152 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002153 }
2154
2155 if(result != VK_SUCCESS)
2156 {
2157 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002158 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2159 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002160 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002161
2162 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002163}
2164
2165VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2166 VkDevice device,
2167 uint32_t queueNodeIndex,
2168 uint32_t queueIndex,
2169 VkQueue* pQueue)
2170{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002171 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
2172
2173 PostGetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue, result);
2174
2175 return result;
2176}
2177
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002178bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002179 VkQueue queue,
2180 const VkCmdBuffer* pCmdBuffers)
2181{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002182 if(pCmdBuffers == nullptr)
2183 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002184 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002185 "vkQueueSubmit parameter, const VkCmdBuffer* pCmdBuffers, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002186 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002187 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002188
2189 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002190}
2191
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002192bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002193 VkQueue queue,
2194 uint32_t cmdBufferCount,
2195 VkFence fence,
2196 VkResult result)
2197{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002198
2199
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002200
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002201 if(result != VK_SUCCESS)
2202 {
2203 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002204 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2205 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002206 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002207
2208 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002209}
2210
2211VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2212 VkQueue queue,
2213 uint32_t cmdBufferCount,
2214 const VkCmdBuffer* pCmdBuffers,
2215 VkFence fence)
2216{
2217 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002218
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002219 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2220
2221 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2222
2223 return result;
2224}
2225
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002226bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002227 VkQueue queue,
2228 VkResult result)
2229{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002230
2231 if(result != VK_SUCCESS)
2232 {
2233 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002234 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2235 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002236 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002237
2238 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002239}
2240
2241VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2242 VkQueue queue)
2243{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002244 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2245
2246 PostQueueWaitIdle(queue, result);
2247
2248 return result;
2249}
2250
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002251bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002252 VkDevice device,
2253 VkResult result)
2254{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002255
2256 if(result != VK_SUCCESS)
2257 {
2258 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002259 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2260 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002261 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002262
2263 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002264}
2265
2266VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2267 VkDevice device)
2268{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002269 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2270
2271 PostDeviceWaitIdle(device, result);
2272
2273 return result;
2274}
2275
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002276bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002277 VkDevice device,
2278 const VkMemoryAllocInfo* pAllocInfo)
2279{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002280 if(pAllocInfo == nullptr)
2281 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002283 "vkAllocMemory parameter, const VkMemoryAllocInfo* pAllocInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002284 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002285 }
2286 if(pAllocInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2287 pAllocInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
2288 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002289 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002290 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002291 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002292 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002293
2294 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002295}
2296
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002297bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002298 VkDevice device,
2299 VkDeviceMemory* pMem,
2300 VkResult result)
2301{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002302
2303 if(pMem == nullptr)
2304 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002305 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002306 "vkAllocMemory parameter, VkDeviceMemory* pMem, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002307 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002308 }
2309
2310 if(result != VK_SUCCESS)
2311 {
2312 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002313 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2314 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002315 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002316
2317 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002318}
2319
2320VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2321 VkDevice device,
2322 const VkMemoryAllocInfo* pAllocInfo,
2323 VkDeviceMemory* pMem)
2324{
2325 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002326
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002327 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2328
2329 PostAllocMemory(device, pMem, result);
2330
2331 return result;
2332}
2333
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002334bool PostFreeMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002335 VkDevice device,
2336 VkDeviceMemory mem,
2337 VkResult result)
2338{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002339
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002340
2341 if(result != VK_SUCCESS)
2342 {
2343 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002344 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2345 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002346 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002347
2348 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002349}
2350
2351VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2352 VkDevice device,
2353 VkDeviceMemory mem)
2354{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002355 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2356
2357 PostFreeMemory(device, mem, result);
2358
2359 return result;
2360}
2361
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002362bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002363 VkDevice device,
2364 VkDeviceMemory mem,
2365 VkDeviceSize offset,
2366 VkDeviceSize size,
2367 VkMemoryMapFlags flags,
2368 void** ppData,
2369 VkResult result)
2370{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002371
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002372
2373
2374
2375
2376 if(ppData == nullptr)
2377 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002378 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002379 "vkMapMemory parameter, void** ppData, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002380 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002381 }
2382
2383 if(result != VK_SUCCESS)
2384 {
2385 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002386 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2387 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002388 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002389
2390 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002391}
2392
2393VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2394 VkDevice device,
2395 VkDeviceMemory mem,
2396 VkDeviceSize offset,
2397 VkDeviceSize size,
2398 VkMemoryMapFlags flags,
2399 void** ppData)
2400{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002401 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2402
2403 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2404
2405 return result;
2406}
2407
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002408bool PostUnmapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002409 VkDevice device,
2410 VkDeviceMemory mem,
2411 VkResult result)
2412{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002413
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002414
2415 if(result != VK_SUCCESS)
2416 {
2417 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002418 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2419 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002420 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002421
2422 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002423}
2424
2425VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2426 VkDevice device,
2427 VkDeviceMemory mem)
2428{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002429 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2430
2431 PostUnmapMemory(device, mem, result);
2432
2433 return result;
2434}
2435
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002436bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002437 VkDevice device,
2438 const VkMappedMemoryRange* pMemRanges)
2439{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002440 if(pMemRanges == nullptr)
2441 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002442 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002443 "vkFlushMappedMemoryRanges parameter, const VkMappedMemoryRange* pMemRanges, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002444 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002445 }
2446 if(pMemRanges->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2447 pMemRanges->sType > VK_STRUCTURE_TYPE_END_RANGE)
2448 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002449 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002450 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002451 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002452 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002453
2454 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002455}
2456
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002457bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002458 VkDevice device,
2459 uint32_t memRangeCount,
2460 VkResult result)
2461{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002462
2463
2464 if(result != VK_SUCCESS)
2465 {
2466 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002467 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2468 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002469 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002470
2471 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002472}
2473
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002474VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002475 VkDevice device,
2476 uint32_t memRangeCount,
2477 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002478{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002479 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002480
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002481 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002482
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002483 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2484
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002485 return result;
2486}
2487
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002488bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002489 VkDevice device,
2490 const VkMappedMemoryRange* pMemRanges)
2491{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002492 if(pMemRanges == nullptr)
2493 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002494 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002495 "vkInvalidateMappedMemoryRanges parameter, const VkMappedMemoryRange* pMemRanges, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002496 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002497 }
2498 if(pMemRanges->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2499 pMemRanges->sType > VK_STRUCTURE_TYPE_END_RANGE)
2500 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002501 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002502 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002503 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002504 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002505
2506 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002507}
2508
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002509bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002510 VkDevice device,
2511 uint32_t memRangeCount,
2512 VkResult result)
2513{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002514
2515
2516 if(result != VK_SUCCESS)
2517 {
2518 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002519 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2520 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002521 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002522
2523 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002524}
2525
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002526VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002527 VkDevice device,
2528 uint32_t memRangeCount,
2529 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002530{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002531 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002532
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002533 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002534
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002535 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2536
Tony Barbour859ceab2015-04-16 19:23:13 -06002537 return result;
2538}
2539
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002540VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
2541 VkDevice device,
2542 VkDeviceMemory memory,
2543 VkDeviceSize* pCommittedMemoryInBytes)
2544{
2545 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2546
2547 return result;
2548}
2549
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002550bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002551 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002552 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002553 VkDeviceMemory mem,
2554 VkDeviceSize memOffset,
2555 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002556{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002557
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002558
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002559
2560
2561 if(result != VK_SUCCESS)
2562 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002563 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2564 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2565 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002566 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002567
2568 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002569}
2570
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002571VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002572 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002573 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002574 VkDeviceMemory mem,
2575 VkDeviceSize memOffset)
2576{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002577 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002578
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002579 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002580
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002581 return result;
2582}
2583
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002584bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002585 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002586 VkImage image,
2587 VkDeviceMemory mem,
2588 VkDeviceSize memOffset,
2589 VkResult result)
2590{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002591
2592
2593
2594
2595 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002596 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002597 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2598 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2599 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002600 }
2601
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002602 return true;
2603}
2604
2605VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2606 VkDevice device,
2607 VkImage image,
2608 VkDeviceMemory mem,
2609 VkDeviceSize memOffset)
2610{
2611 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2612
2613 PostBindImageMemory(device, image, mem, memOffset, result);
2614
2615 return result;
2616}
2617
2618bool PostGetBufferMemoryRequirements(
2619 VkDevice device,
2620 VkBuffer buffer,
2621 VkMemoryRequirements* pMemoryRequirements,
2622 VkResult result)
2623{
2624
2625
2626 if(pMemoryRequirements == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002627 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002628 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2629 "vkGetBufferMemoryRequirements parameter, VkMemoryRequirements* pMemoryRequirements, is null pointer");
2630 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002631 }
2632
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002633 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002634 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002635 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2636 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2637 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002638 }
2639
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002640 return true;
2641}
2642
2643VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2644 VkDevice device,
2645 VkBuffer buffer,
2646 VkMemoryRequirements* pMemoryRequirements)
2647{
2648 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2649
2650 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2651
2652 return result;
2653}
2654
2655bool PostGetImageMemoryRequirements(
2656 VkDevice device,
2657 VkImage image,
2658 VkMemoryRequirements* pMemoryRequirements,
2659 VkResult result)
2660{
2661
2662
2663 if(pMemoryRequirements == nullptr)
2664 {
2665 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2666 "vkGetImageMemoryRequirements parameter, VkMemoryRequirements* pMemoryRequirements, is null pointer");
2667 return false;
2668 }
2669
2670 if(result != VK_SUCCESS)
2671 {
2672 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2673 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2674 return false;
2675 }
2676
2677 return true;
2678}
2679
2680VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2681 VkDevice device,
2682 VkImage image,
2683 VkMemoryRequirements* pMemoryRequirements)
2684{
2685 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2686
2687 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2688
2689 return result;
2690}
2691
2692bool PostGetImageSparseMemoryRequirements(
2693 VkDevice device,
2694 VkImage image,
2695 uint32_t* pNumRequirements,
2696 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2697 VkResult result)
2698{
2699
2700
2701 if(pNumRequirements == nullptr)
2702 {
2703 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2704 "vkGetImageSparseMemoryRequirements parameter, uint32_t* pNumRequirements, is null pointer");
2705 return false;
2706 }
2707
2708 if(pSparseMemoryRequirements == nullptr)
2709 {
2710 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2711 "vkGetImageSparseMemoryRequirements parameter, VkSparseImageMemoryRequirements* pSparseMemoryRequirements, is null pointer");
2712 return false;
2713 }
2714 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2715 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2716 {
2717 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2718 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is unrecognized enumerator");
2719 return false;
2720 }
2721 if(!ValidateEnumerator((VkSparseImageFormatFlagBits)pSparseMemoryRequirements->formatProps.flags))
2722 {
2723 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkSparseImageFormatFlags pSparseMemoryRequirements->formatProps.flags, is " + EnumeratorString((VkSparseImageFormatFlagBits)pSparseMemoryRequirements->formatProps.flags);
2724 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2725 return false;
2726 }
2727
2728 if(result != VK_SUCCESS)
2729 {
2730 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2731 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2732 return false;
2733 }
2734
2735 return true;
2736}
2737
2738VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2739 VkDevice device,
2740 VkImage image,
2741 uint32_t* pNumRequirements,
2742 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2743{
2744 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2745
2746 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2747
2748 return result;
2749}
2750
2751bool PostGetPhysicalDeviceSparseImageFormatProperties(
2752 VkPhysicalDevice physicalDevice,
2753 VkFormat format,
2754 VkImageType type,
2755 uint32_t samples,
2756 VkImageUsageFlags usage,
2757 VkImageTiling tiling,
2758 uint32_t* pNumProperties,
2759 VkSparseImageFormatProperties* pProperties,
2760 VkResult result)
2761{
2762
2763 if(format < VK_FORMAT_BEGIN_RANGE ||
2764 format > VK_FORMAT_END_RANGE)
2765 {
2766 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2767 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is unrecognized enumerator");
2768 return false;
2769 }
2770
2771 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2772 type > VK_IMAGE_TYPE_END_RANGE)
2773 {
2774 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2775 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is unrecognized enumerator");
2776 return false;
2777 }
2778
2779
2780 if(!ValidateEnumerator((VkImageUsageFlagBits)usage))
2781 {
2782 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageUsageFlags usage, is " + EnumeratorString((VkImageUsageFlagBits)usage);
2783 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2784 return false;
2785 }
2786
2787 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2788 tiling > VK_IMAGE_TILING_END_RANGE)
2789 {
2790 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2791 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is unrecognized enumerator");
2792 return false;
2793 }
2794
2795 if(pNumProperties == nullptr)
2796 {
2797 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2798 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, uint32_t* pNumProperties, is null pointer");
2799 return false;
2800 }
2801
2802 if(pProperties == nullptr)
2803 {
2804 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2805 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkSparseImageFormatProperties* pProperties, is null pointer");
2806 return false;
2807 }
2808 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2809 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2810 {
2811 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2812 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is unrecognized enumerator");
2813 return false;
2814 }
2815 if(!ValidateEnumerator((VkSparseImageFormatFlagBits)pProperties->flags))
2816 {
2817 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkSparseImageFormatFlags pProperties->flags, is " + EnumeratorString((VkSparseImageFormatFlagBits)pProperties->flags);
2818 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2819 return false;
2820 }
2821
2822 if(result != VK_SUCCESS)
2823 {
2824 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2825 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2826 return false;
2827 }
2828
2829 return true;
2830}
2831
2832VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2833 VkPhysicalDevice physicalDevice,
2834 VkFormat format,
2835 VkImageType type,
2836 uint32_t samples,
2837 VkImageUsageFlags usage,
2838 VkImageTiling tiling,
2839 uint32_t* pNumProperties,
2840 VkSparseImageFormatProperties* pProperties)
2841{
2842 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2843
2844 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2845
2846 return result;
2847}
2848
2849bool PreQueueBindSparseBufferMemory(
2850 VkQueue queue,
2851 const VkSparseMemoryBindInfo* pBindInfo)
2852{
2853 if(pBindInfo == nullptr)
2854 {
2855 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2856 "vkQueueBindSparseBufferMemory parameter, const VkSparseMemoryBindInfo* pBindInfo, is null pointer");
2857 return false;
2858 }
2859
2860 return true;
2861}
2862
2863bool PostQueueBindSparseBufferMemory(
2864 VkQueue queue,
2865 VkBuffer buffer,
2866 uint32_t numBindings,
2867 VkResult result)
2868{
2869
2870
2871
2872 if(result != VK_SUCCESS)
2873 {
2874 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2875 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2876 return false;
2877 }
2878
2879 return true;
2880}
2881
2882VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2883 VkQueue queue,
2884 VkBuffer buffer,
2885 uint32_t numBindings,
2886 const VkSparseMemoryBindInfo* pBindInfo)
2887{
2888 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2889
2890 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2891
2892 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2893
2894 return result;
2895}
2896
2897bool PreQueueBindSparseImageOpaqueMemory(
2898 VkQueue queue,
2899 const VkSparseMemoryBindInfo* pBindInfo)
2900{
2901 if(pBindInfo == nullptr)
2902 {
2903 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2904 "vkQueueBindSparseImageOpaqueMemory parameter, const VkSparseMemoryBindInfo* pBindInfo, is null pointer");
2905 return false;
2906 }
2907
2908 return true;
2909}
2910
2911bool PostQueueBindSparseImageOpaqueMemory(
2912 VkQueue queue,
2913 VkImage image,
2914 uint32_t numBindings,
2915 VkResult result)
2916{
2917
2918
2919
2920 if(result != VK_SUCCESS)
2921 {
2922 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2923 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2924 return false;
2925 }
2926
2927 return true;
2928}
2929
2930VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2931 VkQueue queue,
2932 VkImage image,
2933 uint32_t numBindings,
2934 const VkSparseMemoryBindInfo* pBindInfo)
2935{
2936 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2937
2938 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2939
2940 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2941
2942 return result;
2943}
2944
2945bool PreQueueBindSparseImageMemory(
2946 VkQueue queue,
2947 const VkSparseImageMemoryBindInfo* pBindInfo)
2948{
2949 if(pBindInfo == nullptr)
2950 {
2951 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2952 "vkQueueBindSparseImageMemory parameter, const VkSparseImageMemoryBindInfo* pBindInfo, is null pointer");
2953 return false;
2954 }
2955 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2956 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
2957 {
2958 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2959 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is unrecognized enumerator");
2960 return false;
2961 }
2962 if(!ValidateEnumerator((VkSparseMemoryBindFlagBits)pBindInfo->flags))
2963 {
2964 std::string reason = "vkQueueBindSparseImageMemory parameter, VkSparseMemoryBindFlags pBindInfo->flags, is " + EnumeratorString((VkSparseMemoryBindFlagBits)pBindInfo->flags);
2965 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2966 return false;
2967 }
2968
2969 return true;
2970}
2971
2972bool PostQueueBindSparseImageMemory(
2973 VkQueue queue,
2974 VkImage image,
2975 uint32_t numBindings,
2976 VkResult result)
2977{
2978
2979
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002980
2981 if(result != VK_SUCCESS)
2982 {
2983 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002984 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2985 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002986 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002987
2988 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002989}
2990
2991VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002992 VkQueue queue,
2993 VkImage image,
2994 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002995 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002996{
2997 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002998
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002999 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003000
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003001 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003002
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003003 return result;
3004}
3005
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003006bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003007 VkDevice device,
3008 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003009{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003010 if(pCreateInfo == nullptr)
3011 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003012 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003013 "vkCreateFence parameter, const VkFenceCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003014 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003015 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003016 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3017 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003018 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003019 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003020 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003021 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003022 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003023 if(!ValidateEnumerator((VkFenceCreateFlagBits)pCreateInfo->flags))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003024 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003025 std::string reason = "vkCreateFence parameter, VkFenceCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkFenceCreateFlagBits)pCreateInfo->flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003026 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3027 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003028 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003029
3030 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003031}
3032
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003033bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003034 VkDevice device,
3035 VkFence* pFence,
3036 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003037{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003038
3039 if(pFence == nullptr)
3040 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003041 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003042 "vkCreateFence parameter, VkFence* pFence, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003043 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003044 }
3045
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06003046 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003047 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003048 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003049 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3050 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003051 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003052
3053 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003054}
3055
3056VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3057 VkDevice device,
3058 const VkFenceCreateInfo* pCreateInfo,
3059 VkFence* pFence)
3060{
3061 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003062
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003063 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3064
3065 PostCreateFence(device, pFence, result);
3066
3067 return result;
3068}
3069
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003070bool PostDestroyFence(
3071 VkDevice device,
3072 VkFence fence,
3073 VkResult result)
3074{
3075
3076
3077 if(result != VK_SUCCESS)
3078 {
3079 std::string reason = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3080 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3081 return false;
3082 }
3083
3084 return true;
3085}
3086
3087VK_LAYER_EXPORT VkResult VKAPI vkDestroyFence(
3088 VkDevice device,
3089 VkFence fence)
3090{
3091 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3092
3093 PostDestroyFence(device, fence, result);
3094
3095 return result;
3096}
3097
3098bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003099 VkDevice device,
3100 const VkFence* pFences)
3101{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003102 if(pFences == nullptr)
3103 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003104 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003105 "vkResetFences parameter, const VkFence* pFences, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003106 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003107 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003108
3109 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003110}
3111
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003112bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003113 VkDevice device,
3114 uint32_t fenceCount,
3115 VkResult result)
3116{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003117
3118
3119 if(result != VK_SUCCESS)
3120 {
3121 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003122 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3123 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003124 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003125
3126 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003127}
3128
3129VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3130 VkDevice device,
3131 uint32_t fenceCount,
3132 const VkFence* pFences)
3133{
3134 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003135
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003136 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3137
3138 PostResetFences(device, fenceCount, result);
3139
3140 return result;
3141}
3142
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003143bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003144 VkDevice device,
3145 VkFence fence,
3146 VkResult result)
3147{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003148
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003149
3150 if(result != VK_SUCCESS)
3151 {
3152 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003153 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3154 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003155 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003156
3157 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003158}
3159
3160VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3161 VkDevice device,
3162 VkFence fence)
3163{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003164 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3165
3166 PostGetFenceStatus(device, fence, result);
3167
3168 return result;
3169}
3170
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003171bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003172 VkDevice device,
3173 const VkFence* pFences)
3174{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003175 if(pFences == nullptr)
3176 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003177 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003178 "vkWaitForFences parameter, const VkFence* pFences, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003179 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003180 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003181
3182 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003183}
3184
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003185bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003186 VkDevice device,
3187 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003188 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003189 uint64_t timeout,
3190 VkResult result)
3191{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003192
3193
3194
3195
3196 if(result != VK_SUCCESS)
3197 {
3198 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003199 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3200 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003201 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003202
3203 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003204}
3205
3206VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3207 VkDevice device,
3208 uint32_t fenceCount,
3209 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003210 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003211 uint64_t timeout)
3212{
3213 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003214
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003215 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3216
3217 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3218
3219 return result;
3220}
3221
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003222bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003223 VkDevice device,
3224 const VkSemaphoreCreateInfo* pCreateInfo)
3225{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003226 if(pCreateInfo == nullptr)
3227 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003228 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003229 "vkCreateSemaphore parameter, const VkSemaphoreCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003230 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003231 }
3232 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3233 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3234 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003236 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003237 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003238 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003239
3240 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003241}
3242
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003243bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003244 VkDevice device,
3245 VkSemaphore* pSemaphore,
3246 VkResult result)
3247{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003248
3249 if(pSemaphore == nullptr)
3250 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003251 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003252 "vkCreateSemaphore parameter, VkSemaphore* pSemaphore, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003253 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003254 }
3255
3256 if(result != VK_SUCCESS)
3257 {
3258 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003259 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3260 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003261 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003262
3263 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003264}
3265
3266VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3267 VkDevice device,
3268 const VkSemaphoreCreateInfo* pCreateInfo,
3269 VkSemaphore* pSemaphore)
3270{
3271 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003272
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003273 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3274
3275 PostCreateSemaphore(device, pSemaphore, result);
3276
3277 return result;
3278}
3279
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003280bool PostDestroySemaphore(
3281 VkDevice device,
3282 VkSemaphore semaphore,
3283 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003284{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003285
3286
3287 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003288 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003289 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3290 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3291 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003292 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003293
3294 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003295}
3296
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003297VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3298 VkDevice device,
3299 VkSemaphore semaphore)
3300{
3301 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3302
3303 PostDestroySemaphore(device, semaphore, result);
3304
3305 return result;
3306}
3307
3308bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003309 VkQueue queue,
3310 VkSemaphore semaphore,
3311 VkResult result)
3312{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003313
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003314
3315 if(result != VK_SUCCESS)
3316 {
3317 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003318 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3319 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003320 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003321
3322 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003323}
3324
3325VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3326 VkQueue queue,
3327 VkSemaphore semaphore)
3328{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003329 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3330
3331 PostQueueSignalSemaphore(queue, semaphore, result);
3332
3333 return result;
3334}
3335
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003336bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003337 VkQueue queue,
3338 VkSemaphore semaphore,
3339 VkResult result)
3340{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003341
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003342
3343 if(result != VK_SUCCESS)
3344 {
3345 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003346 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3347 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003348 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003349
3350 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003351}
3352
3353VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3354 VkQueue queue,
3355 VkSemaphore semaphore)
3356{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003357 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3358
3359 PostQueueWaitSemaphore(queue, semaphore, result);
3360
3361 return result;
3362}
3363
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003364bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003365 VkDevice device,
3366 const VkEventCreateInfo* pCreateInfo)
3367{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003368 if(pCreateInfo == nullptr)
3369 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003370 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003371 "vkCreateEvent parameter, const VkEventCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003372 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003373 }
3374 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3375 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3376 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003377 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003378 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003379 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003380 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003381
3382 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003383}
3384
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003385bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003386 VkDevice device,
3387 VkEvent* pEvent,
3388 VkResult result)
3389{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003390
3391 if(pEvent == nullptr)
3392 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003393 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003394 "vkCreateEvent parameter, VkEvent* pEvent, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003395 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003396 }
3397
3398 if(result != VK_SUCCESS)
3399 {
3400 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003401 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3402 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003403 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003404
3405 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003406}
3407
3408VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3409 VkDevice device,
3410 const VkEventCreateInfo* pCreateInfo,
3411 VkEvent* pEvent)
3412{
3413 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003414
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003415 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3416
3417 PostCreateEvent(device, pEvent, result);
3418
3419 return result;
3420}
3421
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003422bool PostDestroyEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003423 VkDevice device,
3424 VkEvent event,
3425 VkResult result)
3426{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003427
3428
3429 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003430 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003431 std::string reason = "vkDestroyEvent parameter, VkResult result, is " + EnumeratorString(result);
3432 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3433 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003434 }
3435
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003436 return true;
3437}
3438
3439VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3440 VkDevice device,
3441 VkEvent event)
3442{
3443 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3444
3445 PostDestroyEvent(device, event, result);
3446
3447 return result;
3448}
3449
3450bool PostGetEventStatus(
3451 VkDevice device,
3452 VkEvent event,
3453 VkResult result)
3454{
3455
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003456
3457 if(result != VK_SUCCESS)
3458 {
3459 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003460 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3461 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003462 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003463
3464 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003465}
3466
3467VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3468 VkDevice device,
3469 VkEvent event)
3470{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003471 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3472
3473 PostGetEventStatus(device, event, result);
3474
3475 return result;
3476}
3477
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003478bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003479 VkDevice device,
3480 VkEvent event,
3481 VkResult result)
3482{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003483
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003484
3485 if(result != VK_SUCCESS)
3486 {
3487 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003488 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3489 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003490 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003491
3492 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003493}
3494
3495VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3496 VkDevice device,
3497 VkEvent event)
3498{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003499 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3500
3501 PostSetEvent(device, event, result);
3502
3503 return result;
3504}
3505
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003506bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003507 VkDevice device,
3508 VkEvent event,
3509 VkResult result)
3510{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003511
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003512
3513 if(result != VK_SUCCESS)
3514 {
3515 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003516 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3517 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003518 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003519
3520 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003521}
3522
3523VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3524 VkDevice device,
3525 VkEvent event)
3526{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3528
3529 PostResetEvent(device, event, result);
3530
3531 return result;
3532}
3533
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003534bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003535 VkDevice device,
3536 const VkQueryPoolCreateInfo* pCreateInfo)
3537{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003538 if(pCreateInfo == nullptr)
3539 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003540 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003541 "vkCreateQueryPool parameter, const VkQueryPoolCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003542 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003543 }
3544 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3545 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3546 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003547 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003548 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003549 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003550 }
3551 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3552 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3553 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003554 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003555 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003556 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003557 }
3558 if(!ValidateEnumerator((VkQueryPipelineStatisticFlagBits)pCreateInfo->pipelineStatistics))
3559 {
3560 std::string reason = "vkCreateQueryPool parameter, VkQueryPipelineStatisticFlags pCreateInfo->pipelineStatistics, is " + EnumeratorString((VkQueryPipelineStatisticFlagBits)pCreateInfo->pipelineStatistics);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003561 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3562 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003563 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003564
3565 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003566}
3567
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003568bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003569 VkDevice device,
3570 VkQueryPool* pQueryPool,
3571 VkResult result)
3572{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003573
3574 if(pQueryPool == nullptr)
3575 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003576 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003577 "vkCreateQueryPool parameter, VkQueryPool* pQueryPool, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003578 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003579 }
3580
3581 if(result != VK_SUCCESS)
3582 {
3583 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003584 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3585 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003586 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003587
3588 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003589}
3590
3591VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3592 VkDevice device,
3593 const VkQueryPoolCreateInfo* pCreateInfo,
3594 VkQueryPool* pQueryPool)
3595{
3596 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003597
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003598 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3599
3600 PostCreateQueryPool(device, pQueryPool, result);
3601
3602 return result;
3603}
3604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003605bool PostDestroyQueryPool(
3606 VkDevice device,
3607 VkQueryPool queryPool,
3608 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003609{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003610
3611
3612 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003613 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003614 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3615 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3616 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003617 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003618
3619 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003620}
3621
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003622VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3623 VkDevice device,
3624 VkQueryPool queryPool)
3625{
3626 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3627
3628 PostDestroyQueryPool(device, queryPool, result);
3629
3630 return result;
3631}
3632
3633bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003634 VkDevice device,
3635 VkQueryPool queryPool,
3636 uint32_t startQuery,
3637 uint32_t queryCount,
3638 size_t* pDataSize,
3639 void* pData,
3640 VkQueryResultFlags flags,
3641 VkResult result)
3642{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003643
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003644
3645
3646
3647 if(pDataSize == nullptr)
3648 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003649 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003650 "vkGetQueryPoolResults parameter, size_t* pDataSize, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003651 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003652 }
3653
3654 if(pData == nullptr)
3655 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003656 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003657 "vkGetQueryPoolResults parameter, void* pData, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003658 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003659 }
3660
3661 if(!ValidateEnumerator((VkQueryResultFlagBits)flags))
3662 {
3663 std::string reason = "vkGetQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003664 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3665 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003666 }
3667
3668 if(result != VK_SUCCESS)
3669 {
3670 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003671 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3672 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003673 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003674
3675 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003676}
3677
3678VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3679 VkDevice device,
3680 VkQueryPool queryPool,
3681 uint32_t startQuery,
3682 uint32_t queryCount,
3683 size_t* pDataSize,
3684 void* pData,
3685 VkQueryResultFlags flags)
3686{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003687 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3688
3689 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3690
3691 return result;
3692}
3693
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003694bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003695 VkDevice device,
3696 const VkBufferCreateInfo* pCreateInfo)
3697{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003698 if(pCreateInfo == nullptr)
3699 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003700 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003701 "vkCreateBuffer parameter, const VkBufferCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003702 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003703 }
3704 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3705 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3706 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003707 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003708 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003709 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003710 }
3711 if(!ValidateEnumerator((VkBufferUsageFlagBits)pCreateInfo->usage))
3712 {
3713 std::string reason = "vkCreateBuffer parameter, VkBufferUsageFlags pCreateInfo->usage, is " + EnumeratorString((VkBufferUsageFlagBits)pCreateInfo->usage);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3715 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003716 }
3717 if(!ValidateEnumerator((VkBufferCreateFlagBits)pCreateInfo->flags))
3718 {
3719 std::string reason = "vkCreateBuffer parameter, VkBufferCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkBufferCreateFlagBits)pCreateInfo->flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003720 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3721 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003722 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003723
3724 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003725}
3726
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003727bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003728 VkDevice device,
3729 VkBuffer* pBuffer,
3730 VkResult result)
3731{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003732
3733 if(pBuffer == nullptr)
3734 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003735 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003736 "vkCreateBuffer parameter, VkBuffer* pBuffer, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003737 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003738 }
3739
3740 if(result != VK_SUCCESS)
3741 {
3742 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003743 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3744 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003745 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003746
3747 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003748}
3749
3750VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3751 VkDevice device,
3752 const VkBufferCreateInfo* pCreateInfo,
3753 VkBuffer* pBuffer)
3754{
3755 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003756
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003757 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3758
3759 PostCreateBuffer(device, pBuffer, result);
3760
3761 return result;
3762}
3763
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003764bool PostDestroyBuffer(
3765 VkDevice device,
3766 VkBuffer buffer,
3767 VkResult result)
3768{
3769
3770
3771 if(result != VK_SUCCESS)
3772 {
3773 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3775 return false;
3776 }
3777
3778 return true;
3779}
3780
3781VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3782 VkDevice device,
3783 VkBuffer buffer)
3784{
3785 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
3786
3787 PostDestroyBuffer(device, buffer, result);
3788
3789 return result;
3790}
3791
3792bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003793 VkDevice device,
3794 const VkBufferViewCreateInfo* pCreateInfo)
3795{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003796 if(pCreateInfo == nullptr)
3797 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003798 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003799 "vkCreateBufferView parameter, const VkBufferViewCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003800 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003801 }
3802 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3803 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3804 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003805 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003806 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003807 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003808 }
3809 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3810 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3811 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003812 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003813 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003814 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003815 }
3816 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3817 pCreateInfo->format > VK_FORMAT_END_RANGE)
3818 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003819 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003820 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003821 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003822 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003823
3824 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003825}
3826
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003827bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003828 VkDevice device,
3829 VkBufferView* pView,
3830 VkResult result)
3831{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003832
3833 if(pView == nullptr)
3834 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003835 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003836 "vkCreateBufferView parameter, VkBufferView* pView, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003837 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003838 }
3839
3840 if(result != VK_SUCCESS)
3841 {
3842 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003843 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3844 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003845 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003846
3847 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003848}
3849
3850VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3851 VkDevice device,
3852 const VkBufferViewCreateInfo* pCreateInfo,
3853 VkBufferView* pView)
3854{
3855 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003856
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003857 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3858
3859 PostCreateBufferView(device, pView, result);
3860
3861 return result;
3862}
3863
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003864bool PostDestroyBufferView(
3865 VkDevice device,
3866 VkBufferView bufferView,
3867 VkResult result)
3868{
3869
3870
3871 if(result != VK_SUCCESS)
3872 {
3873 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
3874 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3875 return false;
3876 }
3877
3878 return true;
3879}
3880
3881VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
3882 VkDevice device,
3883 VkBufferView bufferView)
3884{
3885 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
3886
3887 PostDestroyBufferView(device, bufferView, result);
3888
3889 return result;
3890}
3891
3892bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003893 VkDevice device,
3894 const VkImageCreateInfo* pCreateInfo)
3895{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003896 if(pCreateInfo == nullptr)
3897 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003898 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003899 "vkCreateImage parameter, const VkImageCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003900 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003901 }
3902 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3903 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3904 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003905 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003906 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003907 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003908 }
3909 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3910 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3911 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003912 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003913 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003914 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003915 }
3916 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3917 pCreateInfo->format > VK_FORMAT_END_RANGE)
3918 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003919 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003920 "vkCreateImage parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003921 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003922 }
3923 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3924 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3925 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003926 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003927 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003928 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003929 }
3930 if(!ValidateEnumerator((VkImageUsageFlagBits)pCreateInfo->usage))
3931 {
3932 std::string reason = "vkCreateImage parameter, VkImageUsageFlags pCreateInfo->usage, is " + EnumeratorString((VkImageUsageFlagBits)pCreateInfo->usage);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003933 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3934 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003935 }
3936 if(!ValidateEnumerator((VkImageCreateFlagBits)pCreateInfo->flags))
3937 {
3938 std::string reason = "vkCreateImage parameter, VkImageCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkImageCreateFlagBits)pCreateInfo->flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003939 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3940 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003941 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003942
3943 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003944}
3945
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003946bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003947 VkDevice device,
3948 VkImage* pImage,
3949 VkResult result)
3950{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003951
3952 if(pImage == nullptr)
3953 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003954 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003955 "vkCreateImage parameter, VkImage* pImage, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003956 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003957 }
3958
3959 if(result != VK_SUCCESS)
3960 {
3961 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003962 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3963 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003964 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003965
3966 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003967}
3968
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003969VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3970 VkDevice device,
3971 const VkImageCreateInfo* pCreateInfo,
3972 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003973{
3974 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003975
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003976 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3977
3978 PostCreateImage(device, pImage, result);
3979
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003980 return result;
3981}
3982
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003983bool PostDestroyImage(
3984 VkDevice device,
3985 VkImage image,
3986 VkResult result)
3987{
3988
3989
3990 if(result != VK_SUCCESS)
3991 {
3992 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
3993 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3994 return false;
3995 }
3996
3997 return true;
3998}
3999
4000VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
4001 VkDevice device,
4002 VkImage image)
4003{
4004 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
4005
4006 PostDestroyImage(device, image, result);
4007
4008 return result;
4009}
4010
4011bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004012 VkDevice device,
4013 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004014{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004015 if(pSubresource == nullptr)
4016 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004017 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004018 "vkGetImageSubresourceLayout parameter, const VkImageSubresource* pSubresource, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004019 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004020 }
4021 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4022 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4023 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004024 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004025 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004026 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004027 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004028
4029 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004030}
4031
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004032bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004033 VkDevice device,
4034 VkImage image,
4035 VkSubresourceLayout* pLayout,
4036 VkResult result)
4037{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004038
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004039
4040 if(pLayout == nullptr)
4041 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004042 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004043 "vkGetImageSubresourceLayout parameter, VkSubresourceLayout* pLayout, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004044 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004045 }
4046
4047 if(result != VK_SUCCESS)
4048 {
4049 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004050 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4051 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004052 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004053
4054 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004055}
4056
4057VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4058 VkDevice device,
4059 VkImage image,
4060 const VkImageSubresource* pSubresource,
4061 VkSubresourceLayout* pLayout)
4062{
4063 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004064
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004065 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4066
4067 PostGetImageSubresourceLayout(device, image, pLayout, result);
4068
4069 return result;
4070}
4071
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004072bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004073 VkDevice device,
4074 const VkImageViewCreateInfo* pCreateInfo)
4075{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004076 if(pCreateInfo == nullptr)
4077 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004078 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004079 "vkCreateImageView parameter, const VkImageViewCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004080 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004081 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004082 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4083 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004084 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004085 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004086 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004087 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004088 }
4089 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4090 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4091 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004092 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004093 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004094 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004095 }
4096 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4097 pCreateInfo->format > VK_FORMAT_END_RANGE)
4098 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004099 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004100 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004101 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004102 }
4103 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4104 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4105 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004106 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004107 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004108 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004109 }
4110 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4111 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4112 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004113 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004114 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004115 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004116 }
4117 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4118 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4119 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004120 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004121 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004122 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004123 }
4124 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4125 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4126 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004127 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004128 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004129 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004130 }
4131 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4132 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4133 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004134 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004135 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004136 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004137 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004138
4139 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004140}
4141
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004142bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004143 VkDevice device,
4144 VkImageView* pView,
4145 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004146{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004147
4148 if(pView == nullptr)
4149 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004150 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004151 "vkCreateImageView parameter, VkImageView* pView, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004152 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004153 }
4154
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06004155 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004156 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004157 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004158 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4159 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004160 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004161
4162 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004163}
4164
4165VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4166 VkDevice device,
4167 const VkImageViewCreateInfo* pCreateInfo,
4168 VkImageView* pView)
4169{
4170 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004171
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004172 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4173
4174 PostCreateImageView(device, pView, result);
4175
4176 return result;
4177}
4178
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004179bool PostDestroyImageView(
4180 VkDevice device,
4181 VkImageView imageView,
4182 VkResult result)
4183{
4184
4185
4186 if(result != VK_SUCCESS)
4187 {
4188 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4189 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4190 return false;
4191 }
4192
4193 return true;
4194}
4195
4196VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4197 VkDevice device,
4198 VkImageView imageView)
4199{
4200 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4201
4202 PostDestroyImageView(device, imageView, result);
4203
4204 return result;
4205}
4206
Chia-I Wuc278df82015-07-07 11:50:03 +08004207void PreCreateAttachmentView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004208 VkDevice device,
Chia-I Wuc278df82015-07-07 11:50:03 +08004209 const VkAttachmentViewCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004210{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004211 if(pCreateInfo == nullptr)
4212 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004213 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08004214 "vkCreateAttachmentView parameter, const VkAttachmentViewCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004215 return;
4216 }
4217 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4218 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4219 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004220 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08004221 "vkCreateAttachmentView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004222 return;
4223 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004224 if(pCreateInfo->image.handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004225 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004226 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08004227 "vkCreateAttachmentView parameter, VkImage pCreateInfo->image, is null pointer");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004228 return;
4229 }
4230 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4231 pCreateInfo->format > VK_FORMAT_END_RANGE)
4232 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004233 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08004234 "vkCreateAttachmentView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004235 return;
4236 }
Chia-I Wuc278df82015-07-07 11:50:03 +08004237 if(!ValidateEnumerator((VkAttachmentViewCreateFlagBits)pCreateInfo->flags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004238 {
Chia-I Wuc278df82015-07-07 11:50:03 +08004239 std::string reason = "vkCreateAttachmentView parameter, VkAttachmentViewCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkAttachmentViewCreateFlagBits)pCreateInfo->flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004240 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004241 return;
4242 }
4243}
4244
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004245bool PostDestroyAttachmentView(
4246 VkDevice device,
4247 VkAttachmentView attachmentView,
4248 VkResult result)
4249{
4250
4251
4252 if(result != VK_SUCCESS)
4253 {
4254 std::string reason = "vkDestroyAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4255 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4256 return false;
4257 }
4258
4259 return true;
4260}
4261
4262VK_LAYER_EXPORT VkResult VKAPI vkDestroyAttachmentView(
4263 VkDevice device,
4264 VkAttachmentView attachmentView)
4265{
4266 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyAttachmentView(device, attachmentView);
4267
4268 PostDestroyAttachmentView(device, attachmentView, result);
4269
4270 return result;
4271}
4272
4273
Chia-I Wuc278df82015-07-07 11:50:03 +08004274void PostCreateAttachmentView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004275 VkDevice device,
Chia-I Wuc278df82015-07-07 11:50:03 +08004276 VkAttachmentView* pView,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004277 VkResult result)
4278{
4279 if(device == nullptr)
4280 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004281 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08004282 "vkCreateAttachmentView parameter, VkDevice device, is null pointer");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004283 return;
4284 }
4285
4286 if(pView == nullptr)
4287 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004288 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08004289 "vkCreateAttachmentView parameter, VkAttachmentView* pView, is null pointer");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004290 return;
4291 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004292 if((*pView).handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004293 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004294 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08004295 "vkCreateAttachmentView parameter, VkAttachmentView* pView, is null pointer");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004296 return;
4297 }
4298
4299 if(result != VK_SUCCESS)
4300 {
Chia-I Wuc278df82015-07-07 11:50:03 +08004301 std::string reason = "vkCreateAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004302 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004303 return;
4304 }
4305}
4306
Chia-I Wuc278df82015-07-07 11:50:03 +08004307VK_LAYER_EXPORT VkResult VKAPI vkCreateAttachmentView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004308 VkDevice device,
Chia-I Wuc278df82015-07-07 11:50:03 +08004309 const VkAttachmentViewCreateInfo* pCreateInfo,
4310 VkAttachmentView* pView)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004311{
Chia-I Wuc278df82015-07-07 11:50:03 +08004312 PreCreateAttachmentView(device, pCreateInfo);
4313 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateAttachmentView(device, pCreateInfo, pView);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004314
Chia-I Wuc278df82015-07-07 11:50:03 +08004315 PostCreateAttachmentView(device, pView, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004316
4317 return result;
4318}
4319
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004320bool PostDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004321 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004322 VkShaderModule shaderModule,
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004323 VkResult result)
4324{
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004325
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004326
4327 if(result != VK_SUCCESS)
4328 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004329 std::string reason = "vkDestroyShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4330 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4331 return false;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004332 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004333
4334 return true;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004335}
4336
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004337VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004338 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004339 VkShaderModule shaderModule)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004340{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004341 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004342
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004343 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004344
4345 return result;
4346}
4347
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004348bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004349 VkDevice device,
4350 const VkShaderCreateInfo* pCreateInfo)
4351{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004352 if(pCreateInfo == nullptr)
4353 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004354 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004355 "vkCreateShader parameter, const VkShaderCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004356 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004357 }
4358 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4359 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4360 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004361 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004362 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004363 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004364 }
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004365 if(pCreateInfo->pName == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004366 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4368 "vkCreateShader parameter, const char* pCreateInfo->pName, is null pointer");
4369 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004370 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004371
4372 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004373}
4374
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004375bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004376 VkDevice device,
4377 VkShader* pShader,
4378 VkResult result)
4379{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004380
4381 if(pShader == nullptr)
4382 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004383 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004384 "vkCreateShader parameter, VkShader* pShader, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004385 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004386 }
4387
4388 if(result != VK_SUCCESS)
4389 {
4390 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004391 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4392 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004393 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004394
4395 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004396}
4397
4398VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4399 VkDevice device,
4400 const VkShaderCreateInfo* pCreateInfo,
4401 VkShader* pShader)
4402{
4403 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004404
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004405 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4406
4407 PostCreateShader(device, pShader, result);
4408
4409 return result;
4410}
4411
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004412bool PostDestroyShader(
4413 VkDevice device,
4414 VkShader shader,
4415 VkResult result)
4416{
4417 if(result != VK_SUCCESS)
4418 {
4419 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4420 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4421 return false;
4422 }
4423
4424 return true;
4425}
4426
4427VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4428 VkDevice device,
4429 VkShader shader)
4430{
4431 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4432
4433 PostDestroyShader(device, shader, result);
4434
4435 return result;
4436}
4437
Jon Ashburn0d60d272015-07-09 15:02:25 -06004438//TODO handle count > 1
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004439bool PreCreateGraphicsPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004440 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06004441 uint32_t count,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004442 const VkGraphicsPipelineCreateInfo* pCreateInfo)
4443{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004444 if(pCreateInfo == nullptr)
4445 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004446 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004447 "vkCreateGraphicsPipeline parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004448 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004449 }
4450 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4451 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4452 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004453 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004454 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004455 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004456 }
4457 if(pCreateInfo->pStages == nullptr)
4458 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004460 "vkCreateGraphicsPipeline parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004461 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004462 }
4463 if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4464 pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE)
4465 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004466 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004467 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004468 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004469 }
4470 if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4471 pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4472 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004473 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004474 "vkCreateGraphicsPipeline parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004475 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004476 }
4477 if(pCreateInfo->pStages->pSpecializationInfo == nullptr)
4478 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004479 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004480 "vkCreateGraphicsPipeline parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004481 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004482 }
4483 if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr)
4484 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004485 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004486 "vkCreateGraphicsPipeline parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004487 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004488 }
4489 if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr)
4490 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004491 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004492 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004493 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004494 }
4495 if(pCreateInfo->pVertexInputState == nullptr)
4496 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004497 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004498 "vkCreateGraphicsPipeline parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004499 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004500 }
4501 if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4502 pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4503 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004504 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004505 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004506 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004507 }
4508 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr)
4509 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004510 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004511 "vkCreateGraphicsPipeline parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004512 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004513 }
4514 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4515 pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4516 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004517 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004518 "vkCreateGraphicsPipeline parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004519 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004520 }
4521 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr)
4522 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004523 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004524 "vkCreateGraphicsPipeline parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004525 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004526 }
4527 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4528 pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4529 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004530 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004531 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004532 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004533 }
Tony Barboure307f582015-07-10 15:29:03 -06004534 if(pCreateInfo->pInputAssemblyState == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004535 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004536 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004537 "vkCreateGraphicsPipeline parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004538 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004539 }
Tony Barboure307f582015-07-10 15:29:03 -06004540 if(pCreateInfo->pInputAssemblyState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4541 pCreateInfo->pInputAssemblyState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004542 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004543 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004544 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004545 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004546 }
Tony Barboure307f582015-07-10 15:29:03 -06004547 if(pCreateInfo->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4548 pCreateInfo->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004549 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004550 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004551 "vkCreateGraphicsPipeline parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004552 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004553 }
Tony Barboure307f582015-07-10 15:29:03 -06004554 if(pCreateInfo->pTessellationState == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004555 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004556 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004557 "vkCreateGraphicsPipeline parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004558 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004559 }
Tony Barboure307f582015-07-10 15:29:03 -06004560 if(pCreateInfo->pTessellationState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4561 pCreateInfo->pTessellationState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004562 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004563 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004564 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004565 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004566 }
Tony Barboure307f582015-07-10 15:29:03 -06004567 if(pCreateInfo->pViewportState == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004568 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004569 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004570 "vkCreateGraphicsPipeline parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004571 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004572 }
Tony Barboure307f582015-07-10 15:29:03 -06004573 if(pCreateInfo->pViewportState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4574 pCreateInfo->pViewportState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004575 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004576 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004577 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004578 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004579 }
Tony Barboure307f582015-07-10 15:29:03 -06004580 if(pCreateInfo->pViewportState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4581 pCreateInfo->pViewportState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004582 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004583 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004584 "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004585 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004586 }
Tony Barboure307f582015-07-10 15:29:03 -06004587 if(pCreateInfo->pViewportState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE ||
4588 pCreateInfo->pViewportState->depthMode > VK_DEPTH_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004589 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004590 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004591 "vkCreateGraphicsPipeline parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004592 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004593 }
Tony Barboure307f582015-07-10 15:29:03 -06004594 if(pCreateInfo->pRasterState == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004595 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004596 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004597 "vkCreateGraphicsPipeline parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004598 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004599 }
Tony Barboure307f582015-07-10 15:29:03 -06004600 if(pCreateInfo->pRasterState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4601 pCreateInfo->pRasterState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004602 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004603 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004604 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004605 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004606 }
Tony Barboure307f582015-07-10 15:29:03 -06004607 if(pCreateInfo->pRasterState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4608 pCreateInfo->pRasterState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004609 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004610 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004611 "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004612 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004613 }
Tony Barboure307f582015-07-10 15:29:03 -06004614 if(pCreateInfo->pRasterState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE ||
4615 pCreateInfo->pRasterState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004616 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004617 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004618 "vkCreateGraphicsPipeline parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004619 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004620 }
Tony Barboure307f582015-07-10 15:29:03 -06004621 if(pCreateInfo->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4622 pCreateInfo->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004623 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004624 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004625 "vkCreateGraphicsPipeline parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004626 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004627 }
Tony Barboure307f582015-07-10 15:29:03 -06004628 if(pCreateInfo->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4629 pCreateInfo->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004630 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004631 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004632 "vkCreateGraphicsPipeline parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004633 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004634 }
Tony Barboure307f582015-07-10 15:29:03 -06004635 if(pCreateInfo->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4636 pCreateInfo->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004637 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004638 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004639 "vkCreateGraphicsPipeline parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004640 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004641 }
Tony Barboure307f582015-07-10 15:29:03 -06004642 if(pCreateInfo->pMultisampleState == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004643 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004644 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004645 "vkCreateGraphicsPipeline parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004646 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004647 }
Tony Barboure307f582015-07-10 15:29:03 -06004648 if(pCreateInfo->pMultisampleState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4649 pCreateInfo->pMultisampleState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004650 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004651 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004652 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004653 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004654 }
Tony Barboure307f582015-07-10 15:29:03 -06004655 if(pCreateInfo->pDepthStencilState == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004656 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004657 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004658 "vkCreateGraphicsPipeline parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004659 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004660 }
Tony Barboure307f582015-07-10 15:29:03 -06004661 if(pCreateInfo->pDepthStencilState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4662 pCreateInfo->pDepthStencilState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004663 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004664 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004665 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004666 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004667 }
Tony Barboure307f582015-07-10 15:29:03 -06004668 if(pCreateInfo->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4669 pCreateInfo->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004670 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004671 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004672 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004673 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004674 }
Tony Barboure307f582015-07-10 15:29:03 -06004675 if(pCreateInfo->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4676 pCreateInfo->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004677 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004678 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004679 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004680 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004681 }
Tony Barboure307f582015-07-10 15:29:03 -06004682 if(pCreateInfo->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4683 pCreateInfo->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004684 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004685 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004686 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004687 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004688 }
Tony Barboure307f582015-07-10 15:29:03 -06004689 if(pCreateInfo->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4690 pCreateInfo->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004691 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004692 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004693 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004694 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004695 }
Tony Barboure307f582015-07-10 15:29:03 -06004696 if(pCreateInfo->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4697 pCreateInfo->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004698 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004699 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004700 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004701 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004702 }
Tony Barboure307f582015-07-10 15:29:03 -06004703 if(pCreateInfo->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4704 pCreateInfo->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004705 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004706 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004707 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004708 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004709 }
Tony Barboure307f582015-07-10 15:29:03 -06004710 if(pCreateInfo->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4711 pCreateInfo->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004712 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004713 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004714 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004715 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004716 }
Tony Barboure307f582015-07-10 15:29:03 -06004717 if(pCreateInfo->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4718 pCreateInfo->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004719 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004720 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004721 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004722 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004723 }
Tony Barboure307f582015-07-10 15:29:03 -06004724 if(pCreateInfo->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4725 pCreateInfo->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004726 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004727 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004728 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004729 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004730 }
Tony Barboure307f582015-07-10 15:29:03 -06004731 if(pCreateInfo->pColorBlendState == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004732 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004733 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004734 "vkCreateGraphicsPipeline parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004735 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004736 }
Tony Barboure307f582015-07-10 15:29:03 -06004737 if(pCreateInfo->pColorBlendState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4738 pCreateInfo->pColorBlendState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004739 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004740 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004741 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004742 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004743 }
Tony Barboure307f582015-07-10 15:29:03 -06004744 if(pCreateInfo->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4745 pCreateInfo->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004746 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004747 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004748 "vkCreateGraphicsPipeline parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004749 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004750 }
Tony Barboure307f582015-07-10 15:29:03 -06004751 if(pCreateInfo->pColorBlendState->pAttachments == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004752 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004753 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004754 "vkCreateGraphicsPipeline parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004755 return false;
4756 }
Tony Barboure307f582015-07-10 15:29:03 -06004757 if(pCreateInfo->pColorBlendState->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4758 pCreateInfo->pColorBlendState->pAttachments->format > VK_FORMAT_END_RANGE)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004759 {
4760 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4761 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator");
4762 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004763 }
Tony Barboure307f582015-07-10 15:29:03 -06004764 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4765 pCreateInfo->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004766 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004767 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004768 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004769 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004770 }
Tony Barboure307f582015-07-10 15:29:03 -06004771 if(pCreateInfo->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4772 pCreateInfo->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004773 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004775 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004776 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004777 }
Tony Barboure307f582015-07-10 15:29:03 -06004778 if(pCreateInfo->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4779 pCreateInfo->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004780 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004781 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004782 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004783 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004784 }
Tony Barboure307f582015-07-10 15:29:03 -06004785 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4786 pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004787 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004788 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004789 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004790 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004791 }
Tony Barboure307f582015-07-10 15:29:03 -06004792 if(pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4793 pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004794 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004795 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004796 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004797 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004798 }
Tony Barboure307f582015-07-10 15:29:03 -06004799 if(pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4800 pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004801 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004802 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004803 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004804 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004805 }
Tony Barboure307f582015-07-10 15:29:03 -06004806 if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004807 {
Tony Barboure307f582015-07-10 15:29:03 -06004808 std::string reason = "vkCreateGraphicsPipeline parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask);
4809 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004810 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004811 }
4812 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
4813 {
4814 std::string reason = "vkCreateGraphicsPipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
Tony Barboure307f582015-07-10 15:29:03 -06004815 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4816 return false;
4817 }
4818
4819 return true;
4820}
4821
4822bool PostCreateGraphicsPipeline(
4823 VkDevice device,
4824 VkPipeline* pPipeline,
4825 VkResult result)
4826{
4827
4828 if(pPipeline == nullptr)
4829 {
4830 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4831 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
4832 return false;
4833 }
4834
4835 if(result != VK_SUCCESS)
4836 {
4837 std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
4838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4839 return false;
4840 }
4841
4842 return true;
4843}
4844
Tony Barboure307f582015-07-10 15:29:03 -06004845bool PostDestroyPipeline(
4846 VkDevice device,
4847 VkPipeline pipeline,
4848 VkResult result)
4849{
Tony Barboure307f582015-07-10 15:29:03 -06004850 if(result != VK_SUCCESS)
4851 {
4852 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
4853 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4854 return false;
4855 }
4856
4857 return true;
4858}
4859
Tony Barboure307f582015-07-10 15:29:03 -06004860bool PreCreateGraphicsPipelineDerivative(
4861 VkDevice device,
4862 const VkGraphicsPipelineCreateInfo* pCreateInfo)
4863{
4864 if(pCreateInfo == nullptr)
4865 {
4866 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4867 "vkCreateGraphicsPipelineDerivative parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer");
4868 return false;
4869 }
4870 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4871 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4872 {
4873 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4874 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4875 return false;
4876 }
4877 if(pCreateInfo->pStages == nullptr)
4878 {
4879 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4880 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer");
4881 return false;
4882 }
4883 if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4884 pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE)
4885 {
4886 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4887 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator");
4888 return false;
4889 }
4890 if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4891 pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4892 {
4893 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4894 "vkCreateGraphicsPipelineDerivative parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator");
4895 return false;
4896 }
4897 if(pCreateInfo->pStages->pSpecializationInfo == nullptr)
4898 {
4899 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4900 "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer");
4901 return false;
4902 }
4903 if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr)
4904 {
4905 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4906 "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer");
4907 return false;
4908 }
4909 if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr)
4910 {
4911 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4912 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer");
4913 return false;
4914 }
4915 if(pCreateInfo->pVertexInputState == nullptr)
4916 {
4917 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4918 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer");
4919 return false;
4920 }
4921 if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4922 pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4923 {
4924 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4925 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator");
4926 return false;
4927 }
4928 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr)
4929 {
4930 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4931 "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer");
4932 return false;
4933 }
4934 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4935 pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4936 {
4937 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4938 "vkCreateGraphicsPipelineDerivative parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator");
4939 return false;
4940 }
4941 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr)
4942 {
4943 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4944 "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer");
4945 return false;
4946 }
4947 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4948 pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4949 {
4950 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4951 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator");
4952 return false;
4953 }
4954 if(pCreateInfo->pInputAssemblyState == nullptr)
4955 {
4956 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4957 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer");
4958 return false;
4959 }
4960 if(pCreateInfo->pInputAssemblyState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4961 pCreateInfo->pInputAssemblyState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4962 {
4963 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4964 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator");
4965 return false;
4966 }
4967 if(pCreateInfo->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4968 pCreateInfo->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4969 {
4970 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4971 "vkCreateGraphicsPipelineDerivative parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator");
4972 return false;
4973 }
4974 if(pCreateInfo->pTessellationState == nullptr)
4975 {
4976 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4977 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer");
4978 return false;
4979 }
4980 if(pCreateInfo->pTessellationState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4981 pCreateInfo->pTessellationState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4982 {
4983 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4984 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator");
4985 return false;
4986 }
4987 if(pCreateInfo->pViewportState == nullptr)
4988 {
4989 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4990 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer");
4991 return false;
4992 }
4993 if(pCreateInfo->pViewportState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4994 pCreateInfo->pViewportState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4995 {
4996 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4997 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator");
4998 return false;
4999 }
5000 if(pCreateInfo->pViewportState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
5001 pCreateInfo->pViewportState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
5002 {
5003 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5004 "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator");
5005 return false;
5006 }
5007 if(pCreateInfo->pViewportState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE ||
5008 pCreateInfo->pViewportState->depthMode > VK_DEPTH_MODE_END_RANGE)
5009 {
5010 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5011 "vkCreateGraphicsPipelineDerivative parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator");
5012 return false;
5013 }
5014 if(pCreateInfo->pRasterState == nullptr)
5015 {
5016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5017 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer");
5018 return false;
5019 }
5020 if(pCreateInfo->pRasterState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5021 pCreateInfo->pRasterState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5022 {
5023 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5024 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator");
5025 return false;
5026 }
5027 if(pCreateInfo->pRasterState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
5028 pCreateInfo->pRasterState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
5029 {
5030 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5031 "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator");
5032 return false;
5033 }
5034 if(pCreateInfo->pRasterState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE ||
5035 pCreateInfo->pRasterState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE)
5036 {
5037 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5038 "vkCreateGraphicsPipelineDerivative parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator");
5039 return false;
5040 }
5041 if(pCreateInfo->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
5042 pCreateInfo->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
5043 {
5044 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5045 "vkCreateGraphicsPipelineDerivative parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator");
5046 return false;
5047 }
5048 if(pCreateInfo->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
5049 pCreateInfo->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
5050 {
5051 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5052 "vkCreateGraphicsPipelineDerivative parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator");
5053 return false;
5054 }
5055 if(pCreateInfo->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
5056 pCreateInfo->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
5057 {
5058 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5059 "vkCreateGraphicsPipelineDerivative parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator");
5060 return false;
5061 }
5062 if(pCreateInfo->pMultisampleState == nullptr)
5063 {
5064 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5065 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer");
5066 return false;
5067 }
5068 if(pCreateInfo->pMultisampleState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5069 pCreateInfo->pMultisampleState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5070 {
5071 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5072 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator");
5073 return false;
5074 }
5075 if(pCreateInfo->pDepthStencilState == nullptr)
5076 {
5077 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5078 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer");
5079 return false;
5080 }
5081 if(pCreateInfo->pDepthStencilState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5082 pCreateInfo->pDepthStencilState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5083 {
5084 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5085 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
5086 return false;
5087 }
Tony Barboure307f582015-07-10 15:29:03 -06005088 if(pCreateInfo->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5089 pCreateInfo->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
5090 {
5091 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5092 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
5093 return false;
5094 }
5095 if(pCreateInfo->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5096 pCreateInfo->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
5097 {
5098 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5099 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator");
5100 return false;
5101 }
5102 if(pCreateInfo->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
5103 pCreateInfo->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5104 {
5105 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5106 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator");
5107 return false;
5108 }
5109 if(pCreateInfo->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5110 pCreateInfo->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5111 {
5112 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5113 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator");
5114 return false;
5115 }
5116 if(pCreateInfo->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5117 pCreateInfo->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5118 {
5119 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5120 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator");
5121 return false;
5122 }
5123 if(pCreateInfo->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5124 pCreateInfo->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
5125 {
5126 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5127 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator");
5128 return false;
5129 }
5130 if(pCreateInfo->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
5131 pCreateInfo->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5132 {
5133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5134 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator");
5135 return false;
5136 }
5137 if(pCreateInfo->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5138 pCreateInfo->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5139 {
5140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5141 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator");
5142 return false;
5143 }
5144 if(pCreateInfo->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5145 pCreateInfo->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5146 {
5147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5148 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator");
5149 return false;
5150 }
5151 if(pCreateInfo->pColorBlendState == nullptr)
5152 {
5153 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5154 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer");
5155 return false;
5156 }
5157 if(pCreateInfo->pColorBlendState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5158 pCreateInfo->pColorBlendState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5159 {
5160 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5161 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator");
5162 return false;
5163 }
5164 if(pCreateInfo->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
5165 pCreateInfo->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
5166 {
5167 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5168 "vkCreateGraphicsPipelineDerivative parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator");
5169 return false;
5170 }
5171 if(pCreateInfo->pColorBlendState->pAttachments == nullptr)
5172 {
5173 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5174 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer");
5175 return false;
5176 }
5177 if(pCreateInfo->pColorBlendState->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5178 pCreateInfo->pColorBlendState->pAttachments->format > VK_FORMAT_END_RANGE)
5179 {
5180 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5181 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator");
5182 return false;
5183 }
5184 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
5185 pCreateInfo->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
5186 {
5187 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5188 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator");
5189 return false;
5190 }
5191 if(pCreateInfo->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
5192 pCreateInfo->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
5193 {
5194 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5195 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator");
5196 return false;
5197 }
5198 if(pCreateInfo->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
5199 pCreateInfo->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
5200 {
5201 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5202 "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator");
5203 return false;
5204 }
5205 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5206 pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
5207 {
5208 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5209 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator");
5210 return false;
5211 }
5212 if(pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5213 pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
5214 {
5215 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5216 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator");
5217 return false;
5218 }
5219 if(pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
5220 pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
5221 {
5222 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5223 "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator");
5224 return false;
5225 }
5226 if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask))
5227 {
5228 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask);
5229 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5230 return false;
5231 }
5232 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5233 {
5234 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5236 return false;
5237 }
5238
5239 return true;
5240}
5241
5242bool PostCreateGraphicsPipelineDerivative(
5243 VkDevice device,
5244 VkPipeline basePipeline,
5245 VkPipeline* pPipeline,
5246 VkResult result)
5247{
5248
5249
5250 if(pPipeline == nullptr)
5251 {
5252 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5253 "vkCreateGraphicsPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer");
5254 return false;
5255 }
5256
5257 if(result != VK_SUCCESS)
5258 {
5259 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkResult result, is " + EnumeratorString(result);
5260 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5261 return false;
5262 }
5263
5264 return true;
5265}
5266
Tony Barboure307f582015-07-10 15:29:03 -06005267bool PreCreateComputePipeline(
5268 VkDevice device,
5269 const VkComputePipelineCreateInfo* pCreateInfo)
5270{
5271 if(pCreateInfo == nullptr)
5272 {
5273 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5274 "vkCreateComputePipeline parameter, const VkComputePipelineCreateInfo* pCreateInfo, is null pointer");
5275 return false;
5276 }
5277 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5278 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5279 {
5280 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5281 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5282 return false;
5283 }
5284 if(pCreateInfo->cs.sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5285 pCreateInfo->cs.sType > VK_STRUCTURE_TYPE_END_RANGE)
5286 {
5287 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5288 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->cs.sType, is unrecognized enumerator");
5289 return false;
5290 }
5291 if(pCreateInfo->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5292 pCreateInfo->cs.stage > VK_SHADER_STAGE_END_RANGE)
5293 {
5294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5295 "vkCreateComputePipeline parameter, VkShaderStage pCreateInfo->cs.stage, is unrecognized enumerator");
5296 return false;
5297 }
5298 if(pCreateInfo->cs.pSpecializationInfo == nullptr)
5299 {
5300 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5301 "vkCreateComputePipeline parameter, const VkSpecializationInfo* pCreateInfo->cs.pSpecializationInfo, is null pointer");
5302 return false;
5303 }
5304 if(pCreateInfo->cs.pSpecializationInfo->pMap == nullptr)
5305 {
5306 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5307 "vkCreateComputePipeline parameter, const VkSpecializationMapEntry* pCreateInfo->cs.pSpecializationInfo->pMap, is null pointer");
5308 return false;
5309 }
5310 if(pCreateInfo->cs.pSpecializationInfo->pData == nullptr)
5311 {
5312 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5313 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pSpecializationInfo->pData, is null pointer");
5314 return false;
5315 }
5316 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5317 {
5318 std::string reason = "vkCreateComputePipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5319 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5320 return false;
5321 }
5322
5323 return true;
5324}
5325
5326bool PostCreateComputePipeline(
5327 VkDevice device,
5328 VkPipeline* pPipeline,
5329 VkResult result)
5330{
5331
5332 if(pPipeline == nullptr)
5333 {
5334 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5335 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5336 return false;
5337 }
5338
5339 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005340 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005341 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005342 "vkCreateGraphicsPipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005343 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005344 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005345
5346 return true;
5347}
5348
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005349VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5350 VkDevice device,
5351 VkPipeline pipeline)
5352{
5353 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5354
5355 PostDestroyPipeline(device, pipeline, result);
5356
5357 return result;
5358}
5359
Jon Ashburn0d60d272015-07-09 15:02:25 -06005360//TODO handle count > 1
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005361void PostCreateGraphicsPipeline(
5362 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005363 uint32_t count,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005364 VkPipeline* pPipeline,
5365 VkResult result)
5366{
5367 if(device == nullptr)
5368 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005369 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005370 "vkCreateGraphicsPipeline parameter, VkDevice device, is null pointer");
5371 return;
5372 }
5373
5374 if(pPipeline == nullptr)
5375 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005376 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005377 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5378 return;
5379 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005380 if((*pPipeline).handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005381 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005382 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005383 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5384 return;
5385 }
5386
5387 if(result != VK_SUCCESS)
5388 {
5389 std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005390 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005391 return;
5392 }
5393}
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005394
Jon Ashburn0d60d272015-07-09 15:02:25 -06005395//TODO add intercept of pipelineCache entrypoints
5396VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005397 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005398 VkPipelineCache pipelineCache,
5399 uint32_t count,
5400 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5401 VkPipeline* pPipelines)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005402{
Jon Ashburn0d60d272015-07-09 15:02:25 -06005403 PreCreateGraphicsPipeline(device, count, pCreateInfos);
5404 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005405
Jon Ashburn0d60d272015-07-09 15:02:25 -06005406 PostCreateGraphicsPipeline(device, count, pPipelines, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005407
5408 return result;
5409}
5410
Jon Ashburn0d60d272015-07-09 15:02:25 -06005411//TODO handle count > 1
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005412void PreCreateComputePipeline(
5413 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005414 uint32_t count,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005415 const VkComputePipelineCreateInfo* pCreateInfo)
5416{
5417 if(device == nullptr)
5418 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005419 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005420 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5421 return;
5422 }
5423
5424 if(pCreateInfo == nullptr)
5425 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005426 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005427 "vkCreateComputePipeline parameter, const VkComputePipelineCreateInfo* pCreateInfo, is null pointer");
5428 return;
5429 }
5430 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5431 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5432 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005433 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005434 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5435 return;
5436 }
5437 if(pCreateInfo->cs.sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5438 pCreateInfo->cs.sType > VK_STRUCTURE_TYPE_END_RANGE)
5439 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005440 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005441 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->cs.sType, is unrecognized enumerator");
5442 return;
5443 }
5444 if(pCreateInfo->cs.pNext == nullptr)
5445 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005446 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005447 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pNext, is null pointer");
5448 return;
5449 }
5450 if(pCreateInfo->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5451 pCreateInfo->cs.stage > VK_SHADER_STAGE_END_RANGE)
5452 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005453 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005454 "vkCreateComputePipeline parameter, VkShaderStage pCreateInfo->cs.stage, is unrecognized enumerator");
5455 return;
5456 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005457 if(pCreateInfo->cs.shader.handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005458 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005459 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005460 "vkCreateComputePipeline parameter, VkShader pCreateInfo->cs.shader, is null pointer");
5461 return;
5462 }
5463 if(pCreateInfo->cs.pLinkConstBufferInfo == nullptr)
5464 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005465 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005466 "vkCreateComputePipeline parameter, const VkLinkConstBuffer* pCreateInfo->cs.pLinkConstBufferInfo, is null pointer");
5467 return;
5468 }
5469 if(pCreateInfo->cs.pLinkConstBufferInfo->pBufferData == nullptr)
5470 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005471 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005472 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pLinkConstBufferInfo->pBufferData, is null pointer");
5473 return;
5474 }
5475 if(pCreateInfo->cs.pSpecializationInfo == nullptr)
5476 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005477 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005478 "vkCreateComputePipeline parameter, const VkSpecializationInfo* pCreateInfo->cs.pSpecializationInfo, is null pointer");
5479 return;
5480 }
5481 if(pCreateInfo->cs.pSpecializationInfo->pMap == nullptr)
5482 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005483 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005484 "vkCreateComputePipeline parameter, const VkSpecializationMapEntry* pCreateInfo->cs.pSpecializationInfo->pMap, is null pointer");
5485 return;
5486 }
5487 if(pCreateInfo->cs.pSpecializationInfo->pData == nullptr)
5488 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005489 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005490 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pSpecializationInfo->pData, is null pointer");
5491 return;
5492 }
5493 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5494 {
5495 std::string reason = "vkCreateComputePipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005496 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005497 return;
5498 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005499 if(pCreateInfo->layout.handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005500 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005501 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005502 "vkCreateComputePipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
5503 return;
5504 }
5505}
5506
Jon Ashburn0d60d272015-07-09 15:02:25 -06005507//TODO handle count > 1
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005508void PostCreateComputePipeline(
5509 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005510 uint32_t count,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005511 VkPipeline* pPipeline,
5512 VkResult result)
5513{
5514 if(device == nullptr)
5515 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005516 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005517 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5518 return;
5519 }
5520
5521 if(pPipeline == nullptr)
5522 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005523 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005524 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5525 return;
5526 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005527 if((*pPipeline).handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005528 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005529 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005530 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5531 return;
5532 }
5533
5534 if(result != VK_SUCCESS)
5535 {
5536 std::string reason = "vkCreateComputePipeline parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005537 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005538 return;
5539 }
5540}
5541
Jon Ashburn0d60d272015-07-09 15:02:25 -06005542VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005543 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005544 VkPipelineCache pipelineCache,
5545 uint32_t count,
5546 const VkComputePipelineCreateInfo* pCreateInfos,
5547 VkPipeline* pPipelines)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005548{
Jon Ashburn0d60d272015-07-09 15:02:25 -06005549 PreCreateComputePipeline(device, count, pCreateInfos);
5550 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005551
Jon Ashburn0d60d272015-07-09 15:02:25 -06005552 PostCreateComputePipeline(device, count, pPipelines, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005553
5554 return result;
5555}
5556
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005557void PreCreatePipelineLayout(
5558 VkDevice device,
5559 const VkPipelineLayoutCreateInfo* pCreateInfo)
5560{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005561 if(pCreateInfo == nullptr)
5562 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005563 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005564 "vkCreatePipelineLayout parameter, const VkPipelineLayoutCreateInfo* pCreateInfo, is null pointer");
5565 return;
5566 }
5567 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5568 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5569 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005570 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005571 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5572 return;
5573 }
5574 if(pCreateInfo->pSetLayouts == nullptr)
5575 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005576 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005577 "vkCreatePipelineLayout parameter, const VkDescriptorSetLayout* pCreateInfo->pSetLayouts, is null pointer");
5578 return;
5579 }
5580}
5581
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005582bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005583 VkDevice device,
5584 VkPipelineLayout* pPipelineLayout,
5585 VkResult result)
5586{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005587
5588 if(pPipelineLayout == nullptr)
5589 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005590 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005591 "vkCreatePipelineLayout parameter, VkPipelineLayout* pPipelineLayout, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005592 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005593 }
5594
5595 if(result != VK_SUCCESS)
5596 {
5597 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005598 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5599 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005600 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005601
5602 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005603}
5604
5605VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5606 VkDevice device,
5607 const VkPipelineLayoutCreateInfo* pCreateInfo,
5608 VkPipelineLayout* pPipelineLayout)
5609{
5610 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005611
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005612 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5613
5614 PostCreatePipelineLayout(device, pPipelineLayout, result);
5615
5616 return result;
5617}
5618
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005619bool PostDestroyPipelineLayout(
5620 VkDevice device,
5621 VkPipelineLayout pipelineLayout,
5622 VkResult result)
5623{
5624
5625
5626 if(result != VK_SUCCESS)
5627 {
5628 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5629 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5630 return false;
5631 }
5632
5633 return true;
5634}
5635
5636VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5637 VkDevice device,
5638 VkPipelineLayout pipelineLayout)
5639{
5640 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5641
5642 PostDestroyPipelineLayout(device, pipelineLayout, result);
5643
5644 return result;
5645}
5646
5647bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005648 VkDevice device,
5649 const VkSamplerCreateInfo* pCreateInfo)
5650{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005651 if(pCreateInfo == nullptr)
5652 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005653 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005654 "vkCreateSampler parameter, const VkSamplerCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005655 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005656 }
5657 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5658 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5659 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005660 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005661 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005662 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005663 }
5664 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5665 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5666 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005667 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005668 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005669 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005670 }
5671 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5672 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5673 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005674 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005675 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005676 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005677 }
5678 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5679 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5680 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005681 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005682 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005683 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005684 }
5685 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5686 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5687 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005688 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005689 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005690 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005691 }
5692 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5693 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5694 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005695 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005696 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005697 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005698 }
5699 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5700 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5701 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005702 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005703 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005704 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005705 }
5706 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5707 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5708 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005710 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005711 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005712 }
5713 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5714 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5715 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005716 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005717 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005718 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005719 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005720
5721 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005722}
5723
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005724bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005725 VkDevice device,
5726 VkSampler* pSampler,
5727 VkResult result)
5728{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005729
5730 if(pSampler == nullptr)
5731 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005732 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005733 "vkCreateSampler parameter, VkSampler* pSampler, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005734 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005735 }
5736
5737 if(result != VK_SUCCESS)
5738 {
5739 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005740 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5741 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005742 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005743
5744 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005745}
5746
5747VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5748 VkDevice device,
5749 const VkSamplerCreateInfo* pCreateInfo,
5750 VkSampler* pSampler)
5751{
5752 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005753
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005754 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5755
5756 PostCreateSampler(device, pSampler, result);
5757
5758 return result;
5759}
5760
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005761bool PostDestroySampler(
5762 VkDevice device,
5763 VkSampler sampler,
5764 VkResult result)
5765{
5766
5767
5768 if(result != VK_SUCCESS)
5769 {
5770 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5771 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5772 return false;
5773 }
5774
5775 return true;
5776}
5777
5778VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5779 VkDevice device,
5780 VkSampler sampler)
5781{
5782 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5783
5784 PostDestroySampler(device, sampler, result);
5785
5786 return result;
5787}
5788
5789bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005790 VkDevice device,
5791 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5792{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005793 if(pCreateInfo == nullptr)
5794 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005795 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005796 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005797 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005798 }
5799 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5800 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5801 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005802 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005803 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005804 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005805 }
5806 if(pCreateInfo->pBinding == nullptr)
5807 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005808 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005809 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutBinding* pCreateInfo->pBinding, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005810 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005811 }
5812 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5813 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5814 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005815 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005816 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005817 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005818 }
5819 if(!ValidateEnumerator((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags))
5820 {
5821 std::string reason = "vkCreateDescriptorSetLayout parameter, VkShaderStageFlags pCreateInfo->pBinding->stageFlags, is " + EnumeratorString((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5823 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005824 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005825
5826 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005827}
5828
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005829bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005830 VkDevice device,
5831 VkDescriptorSetLayout* pSetLayout,
5832 VkResult result)
5833{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005834
5835 if(pSetLayout == nullptr)
5836 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005837 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005838 "vkCreateDescriptorSetLayout parameter, VkDescriptorSetLayout* pSetLayout, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005839 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005840 }
5841
5842 if(result != VK_SUCCESS)
5843 {
5844 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005845 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5846 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005847 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005848
5849 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005850}
5851
5852VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5853 VkDevice device,
5854 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5855 VkDescriptorSetLayout* pSetLayout)
5856{
5857 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005858
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005859 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5860
5861 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5862
5863 return result;
5864}
5865
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005866bool PostDestroyDescriptorSetLayout(
5867 VkDevice device,
5868 VkDescriptorSetLayout descriptorSetLayout,
5869 VkResult result)
5870{
5871
5872
5873 if(result != VK_SUCCESS)
5874 {
5875 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5876 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5877 return false;
5878 }
5879
5880 return true;
5881}
5882
5883VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5884 VkDevice device,
5885 VkDescriptorSetLayout descriptorSetLayout)
5886{
5887 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5888
5889 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5890
5891 return result;
5892}
5893
5894bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005895 VkDevice device,
5896 const VkDescriptorPoolCreateInfo* pCreateInfo)
5897{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005898 if(pCreateInfo == nullptr)
5899 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005900 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005901 "vkCreateDescriptorPool parameter, const VkDescriptorPoolCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005902 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005903 }
5904 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5905 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5906 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005907 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005908 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005909 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005910 }
5911 if(pCreateInfo->pTypeCount == nullptr)
5912 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005914 "vkCreateDescriptorPool parameter, const VkDescriptorTypeCount* pCreateInfo->pTypeCount, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005915 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005916 }
5917 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5918 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5919 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005920 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005921 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005922 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005923 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005924
5925 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005926}
5927
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005928bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005929 VkDevice device,
5930 VkDescriptorPoolUsage poolUsage,
5931 uint32_t maxSets,
5932 VkDescriptorPool* pDescriptorPool,
5933 VkResult result)
5934{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005935
5936 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5937 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5938 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005939 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005940 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005941 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005942 }
5943
5944
5945 if(pDescriptorPool == nullptr)
5946 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005947 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005948 "vkCreateDescriptorPool parameter, VkDescriptorPool* pDescriptorPool, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005949 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005950 }
5951
5952 if(result != VK_SUCCESS)
5953 {
5954 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5956 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005957 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005958
5959 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005960}
5961
5962VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5963 VkDevice device,
5964 VkDescriptorPoolUsage poolUsage,
5965 uint32_t maxSets,
5966 const VkDescriptorPoolCreateInfo* pCreateInfo,
5967 VkDescriptorPool* pDescriptorPool)
5968{
5969 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005970
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005971 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5972
5973 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5974
5975 return result;
5976}
5977
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005978bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005979 VkDevice device,
5980 VkDescriptorPool descriptorPool,
5981 VkResult result)
5982{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005983
5984
5985 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005986 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005987 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5988 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5989 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005990 }
5991
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005992 return true;
5993}
5994
5995VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5996 VkDevice device,
5997 VkDescriptorPool descriptorPool)
5998{
5999 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
6000
6001 PostDestroyDescriptorPool(device, descriptorPool, result);
6002
6003 return result;
6004}
6005
6006bool PostResetDescriptorPool(
6007 VkDevice device,
6008 VkDescriptorPool descriptorPool,
6009 VkResult result)
6010{
6011
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006012
6013 if(result != VK_SUCCESS)
6014 {
6015 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6017 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006018 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006019
6020 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006021}
6022
6023VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
6024 VkDevice device,
6025 VkDescriptorPool descriptorPool)
6026{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006027 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
6028
6029 PostResetDescriptorPool(device, descriptorPool, result);
6030
6031 return result;
6032}
6033
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006034bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006035 VkDevice device,
6036 const VkDescriptorSetLayout* pSetLayouts)
6037{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006038 if(pSetLayouts == nullptr)
6039 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006040 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006041 "vkAllocDescriptorSets parameter, const VkDescriptorSetLayout* pSetLayouts, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006042 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006043 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006044
6045 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046}
6047
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006048bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006049 VkDevice device,
6050 VkDescriptorPool descriptorPool,
6051 VkDescriptorSetUsage setUsage,
6052 uint32_t count,
6053 VkDescriptorSet* pDescriptorSets,
6054 uint32_t* pCount,
6055 VkResult result)
6056{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006057
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006058
6059 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
6060 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
6061 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006062 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006063 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006064 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006065 }
6066
6067
6068 if(pDescriptorSets == nullptr)
6069 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006070 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006071 "vkAllocDescriptorSets parameter, VkDescriptorSet* pDescriptorSets, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006072 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006073 }
6074
6075 if(pCount == nullptr)
6076 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006077 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006078 "vkAllocDescriptorSets parameter, uint32_t* pCount, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006079 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006080 }
6081
6082 if(result != VK_SUCCESS)
6083 {
6084 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006085 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6086 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006087 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006088
6089 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006090}
6091
6092VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
6093 VkDevice device,
6094 VkDescriptorPool descriptorPool,
6095 VkDescriptorSetUsage setUsage,
6096 uint32_t count,
6097 const VkDescriptorSetLayout* pSetLayouts,
6098 VkDescriptorSet* pDescriptorSets,
6099 uint32_t* pCount)
6100{
6101 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006102
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006103 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
6104
6105 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, pCount, result);
6106
6107 return result;
6108}
6109
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006110bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006111 VkDevice device,
6112 const VkWriteDescriptorSet* pDescriptorWrites,
6113 const VkCopyDescriptorSet* pDescriptorCopies)
6114{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006115 if(pDescriptorWrites == nullptr)
6116 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006117 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006118 "vkUpdateDescriptorSets parameter, const VkWriteDescriptorSet* pDescriptorWrites, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006119 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006120 }
6121 if(pDescriptorWrites->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6122 pDescriptorWrites->sType > VK_STRUCTURE_TYPE_END_RANGE)
6123 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006124 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006125 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006126 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006127 }
6128 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
6129 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
6130 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006131 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006132 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006133 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006134 }
6135 if(pDescriptorWrites->pDescriptors == nullptr)
6136 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006138 "vkUpdateDescriptorSets parameter, const VkDescriptorInfo* pDescriptorWrites->pDescriptors, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006139 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006140 }
6141 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6142 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6143 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006144 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006145 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006146 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006147 }
6148
6149 if(pDescriptorCopies == nullptr)
6150 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006151 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006152 "vkUpdateDescriptorSets parameter, const VkCopyDescriptorSet* pDescriptorCopies, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006153 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006154 }
6155 if(pDescriptorCopies->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6156 pDescriptorCopies->sType > VK_STRUCTURE_TYPE_END_RANGE)
6157 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006158 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006159 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006160 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006161 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006162
6163 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006164}
6165
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006166bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006167 VkDevice device,
6168 uint32_t writeCount,
6169 uint32_t copyCount,
6170 VkResult result)
6171{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006172
6173
6174
6175 if(result != VK_SUCCESS)
6176 {
6177 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006178 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6179 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006180 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006181
6182 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006183}
6184
6185VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
6186 VkDevice device,
6187 uint32_t writeCount,
6188 const VkWriteDescriptorSet* pDescriptorWrites,
6189 uint32_t copyCount,
6190 const VkCopyDescriptorSet* pDescriptorCopies)
6191{
6192 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006193
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006194 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
6195
6196 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
6197
6198 return result;
6199}
6200
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006201bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006202 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006203 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006204{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006205 if(pCreateInfo == nullptr)
6206 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006207 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6208 "vkCreateDynamicViewportState parameter, const VkDynamicViewportStateCreateInfo* pCreateInfo, is null pointer");
6209 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006210 }
6211 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6212 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6213 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006214 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006215 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006216 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006217 }
6218 if(pCreateInfo->pViewports == nullptr)
6219 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006220 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006221 "vkCreateDynamicViewportState parameter, const VkViewport* pCreateInfo->pViewports, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006222 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006223 }
6224 if(pCreateInfo->pScissors == nullptr)
6225 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006226 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6227 "vkCreateDynamicViewportState parameter, const VkRect2D* pCreateInfo->pScissors, is null pointer");
6228 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006229 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006230
6231 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006232}
6233
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006234bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006235 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006236 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006237 VkResult result)
6238{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006239
6240 if(pState == nullptr)
6241 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6243 "vkCreateDynamicViewportState parameter, VkDynamicViewportState* pState, is null pointer");
6244 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006245 }
6246
6247 if(result != VK_SUCCESS)
6248 {
6249 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6251 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006252 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006253
6254 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006255}
6256
6257VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
6258 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006259 const VkDynamicViewportStateCreateInfo* pCreateInfo,
6260 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006261{
6262 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006263
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006264 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
6265
6266 PostCreateDynamicViewportState(device, pState, result);
6267
6268 return result;
6269}
6270
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006271bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006272 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006273 VkDynamicViewportState dynamicViewportState,
6274 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006275{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006276
6277
6278 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006279 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006280 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
6281 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6282 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006283 }
6284
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006285 return true;
6286}
6287
6288VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
6289 VkDevice device,
6290 VkDynamicViewportState dynamicViewportState)
6291{
6292 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
6293
6294 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
6295
6296 return result;
6297}
6298
6299bool PreCreateDynamicRasterState(
6300 VkDevice device,
6301 const VkDynamicRasterStateCreateInfo* pCreateInfo)
6302{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006303 if(pCreateInfo == nullptr)
6304 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006305 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6306 "vkCreateDynamicRasterState parameter, const VkDynamicRasterStateCreateInfo* pCreateInfo, is null pointer");
6307 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006308 }
6309 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6310 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6311 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006312 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006313 "vkCreateDynamicRasterState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006314 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006315 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006316
6317 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006318}
6319
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006320bool PostCreateDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006321 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006322 VkDynamicRasterState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006323 VkResult result)
6324{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006325
6326 if(pState == nullptr)
6327 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006328 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6329 "vkCreateDynamicRasterState parameter, VkDynamicRasterState* pState, is null pointer");
6330 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006331 }
6332
6333 if(result != VK_SUCCESS)
6334 {
6335 std::string reason = "vkCreateDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006336 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6337 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006338 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006339
6340 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006341}
6342
6343VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(
6344 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006345 const VkDynamicRasterStateCreateInfo* pCreateInfo,
6346 VkDynamicRasterState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006347{
6348 PreCreateDynamicRasterState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006349
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006350 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterState(device, pCreateInfo, pState);
6351
6352 PostCreateDynamicRasterState(device, pState, result);
6353
6354 return result;
6355}
6356
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006357bool PostDestroyDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006358 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006359 VkDynamicRasterState dynamicRasterState,
6360 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006361{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006362
6363
6364 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006365 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006366 std::string reason = "vkDestroyDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
6367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6368 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006369 }
6370
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006371 return true;
6372}
6373
6374VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicRasterState(
6375 VkDevice device,
6376 VkDynamicRasterState dynamicRasterState)
6377{
6378 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicRasterState(device, dynamicRasterState);
6379
6380 PostDestroyDynamicRasterState(device, dynamicRasterState, result);
6381
6382 return result;
6383}
6384
6385bool PreCreateDynamicColorBlendState(
6386 VkDevice device,
6387 const VkDynamicColorBlendStateCreateInfo* pCreateInfo)
6388{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006389 if(pCreateInfo == nullptr)
6390 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006391 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6392 "vkCreateDynamicColorBlendState parameter, const VkDynamicColorBlendStateCreateInfo* pCreateInfo, is null pointer");
6393 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006394 }
6395 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6396 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6397 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006398 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006399 "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006400 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006401 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006402
6403 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006404}
6405
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006406bool PostCreateDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006407 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006408 VkDynamicColorBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006409 VkResult result)
6410{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006411
6412 if(pState == nullptr)
6413 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006414 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6415 "vkCreateDynamicColorBlendState parameter, VkDynamicColorBlendState* pState, is null pointer");
6416 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006417 }
6418
6419 if(result != VK_SUCCESS)
6420 {
6421 std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006422 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6423 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006424 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006425
6426 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006427}
6428
6429VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
6430 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006431 const VkDynamicColorBlendStateCreateInfo* pCreateInfo,
6432 VkDynamicColorBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006433{
6434 PreCreateDynamicColorBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006435
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006436 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState);
6437
6438 PostCreateDynamicColorBlendState(device, pState, result);
6439
6440 return result;
6441}
6442
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006443bool PostDestroyDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006444 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006445 VkDynamicColorBlendState dynamicColorBlendState,
6446 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006447{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006448
6449
6450 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006451 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006452 std::string reason = "vkDestroyDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
6453 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6454 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006455 }
6456
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006457 return true;
6458}
6459
6460VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicColorBlendState(
6461 VkDevice device,
6462 VkDynamicColorBlendState dynamicColorBlendState)
6463{
6464 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicColorBlendState(device, dynamicColorBlendState);
6465
6466 PostDestroyDynamicColorBlendState(device, dynamicColorBlendState, result);
6467
6468 return result;
6469}
6470
6471bool PreCreateDynamicDepthStencilState(
6472 VkDevice device,
6473 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo)
6474{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006475 if(pCreateInfo == nullptr)
6476 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006477 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6478 "vkCreateDynamicDepthStencilState parameter, const VkDynamicDepthStencilStateCreateInfo* pCreateInfo, is null pointer");
6479 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006480 }
6481 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6482 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6483 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006484 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006485 "vkCreateDynamicDepthStencilState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006486 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006487 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006488
6489 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006490}
6491
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006492bool PostCreateDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006493 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006494 VkDynamicDepthStencilState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006495 VkResult result)
6496{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006497
6498 if(pState == nullptr)
6499 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006500 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6501 "vkCreateDynamicDepthStencilState parameter, VkDynamicDepthStencilState* pState, is null pointer");
6502 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006503 }
6504
6505 if(result != VK_SUCCESS)
6506 {
6507 std::string reason = "vkCreateDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006508 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6509 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006510 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006511
6512 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006513}
6514
6515VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(
6516 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006517 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo,
6518 VkDynamicDepthStencilState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006519{
6520 PreCreateDynamicDepthStencilState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006521
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006522 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
6523
6524 PostCreateDynamicDepthStencilState(device, pState, result);
6525
6526 return result;
6527}
6528
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006529bool PostDestroyDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006530 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006531 VkDynamicDepthStencilState dynamicDepthStencilState,
6532 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006533{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006534
6535
6536 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006537 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006538 std::string reason = "vkDestroyDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
6539 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6540 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006541 }
6542
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006543 return true;
6544}
6545
6546VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthStencilState(
6547 VkDevice device,
6548 VkDynamicDepthStencilState dynamicDepthStencilState)
6549{
6550 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthStencilState(device, dynamicDepthStencilState);
6551
6552 PostDestroyDynamicDepthStencilState(device, dynamicDepthStencilState, result);
6553
6554 return result;
6555}
6556
6557bool PreCreateCommandBuffer(
6558 VkDevice device,
6559 const VkCmdBufferCreateInfo* pCreateInfo)
6560{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006561 if(pCreateInfo == nullptr)
6562 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006563 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006564 "vkCreateCommandBuffer parameter, const VkCmdBufferCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006565 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006566 }
6567 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6568 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6569 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006570 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006571 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006572 return false;
6573 }
6574 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6575 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6576 {
6577 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6578 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is unrecognized enumerator");
6579 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006580 }
6581
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006582 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006583}
6584
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006585bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006586 VkDevice device,
6587 VkCmdBuffer* pCmdBuffer,
6588 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006589{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006590
6591 if(pCmdBuffer == nullptr)
6592 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006593 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006594 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006595 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006596 }
6597
6598 if(result != VK_SUCCESS)
6599 {
6600 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006601 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6602 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006603 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006604
6605 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006606}
6607
6608VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6609 VkDevice device,
6610 const VkCmdBufferCreateInfo* pCreateInfo,
6611 VkCmdBuffer* pCmdBuffer)
6612{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006613 PreCreateCommandBuffer(device, pCreateInfo);
6614
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006615 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6616
6617 PostCreateCommandBuffer(device, pCmdBuffer, result);
6618
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006619 return result;
6620}
6621
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006622bool PostDestroyCommandBuffer(
6623 VkDevice device,
6624 VkCmdBuffer commandBuffer,
6625 VkResult result)
6626{
6627
6628
6629 if(result != VK_SUCCESS)
6630 {
6631 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6632 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6633 return false;
6634 }
6635
6636 return true;
6637}
6638
6639VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6640 VkDevice device,
6641 VkCmdBuffer commandBuffer)
6642{
6643 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6644
6645 PostDestroyCommandBuffer(device, commandBuffer, result);
6646
6647 return result;
6648}
6649
6650bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006651 VkCmdBuffer cmdBuffer,
6652 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006653{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006654 if(pBeginInfo == nullptr)
6655 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006656 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006657 "vkBeginCommandBuffer parameter, const VkCmdBufferBeginInfo* pBeginInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006658 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006659 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006660 if(pBeginInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6661 pBeginInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6662 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006663 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006664 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006665 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006666 }
6667 if(!ValidateEnumerator((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags))
6668 {
6669 std::string reason = "vkBeginCommandBuffer parameter, VkCmdBufferOptimizeFlags pBeginInfo->flags, is " + EnumeratorString((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006670 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6671 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006672 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006673
6674 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006675}
6676
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006677bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006678 VkCmdBuffer cmdBuffer,
6679 VkResult result)
6680{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006681
6682 if(result != VK_SUCCESS)
6683 {
6684 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006685 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6686 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006687 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006688
6689 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006690}
6691
6692VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6693 VkCmdBuffer cmdBuffer,
6694 const VkCmdBufferBeginInfo* pBeginInfo)
6695{
6696 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006697
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006698 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6699
6700 PostBeginCommandBuffer(cmdBuffer, result);
6701
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006702 return result;
6703}
6704
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006705bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006706 VkCmdBuffer cmdBuffer,
6707 VkResult result)
6708{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006709
6710 if(result != VK_SUCCESS)
6711 {
6712 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006713 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6714 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006715 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006716
6717 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006718}
6719
6720VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6721 VkCmdBuffer cmdBuffer)
6722{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006723 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6724
6725 PostEndCommandBuffer(cmdBuffer, result);
6726
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006727 return result;
6728}
6729
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006730bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006731 VkCmdBuffer cmdBuffer,
6732 VkResult result)
6733{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006734
6735 if(result != VK_SUCCESS)
6736 {
6737 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006738 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6739 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006740 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006741
6742 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006743}
6744
6745VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006746 VkCmdBuffer cmdBuffer,
6747 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006748{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006749 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006750
6751 PostResetCommandBuffer(cmdBuffer, result);
6752
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006753 return result;
6754}
6755
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006756bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006757 VkCmdBuffer cmdBuffer,
6758 VkPipelineBindPoint pipelineBindPoint,
6759 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006760{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006761
6762 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6763 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6764 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006765 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006766 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006767 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006768 }
6769
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006770
6771 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006772}
6773
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006774VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6775 VkCmdBuffer cmdBuffer,
6776 VkPipelineBindPoint pipelineBindPoint,
6777 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006778{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006779 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6780
6781 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6782}
6783
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006784bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006785 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006786 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006787{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006788
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006789
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006790 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006791}
6792
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006793VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006794 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006795 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006796{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006797 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006798
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006799 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006800}
6801
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006802bool PostCmdBindDynamicRasterState(
6803 VkCmdBuffer cmdBuffer,
6804 VkDynamicRasterState dynamicRasterState)
6805{
6806
6807
6808 return true;
6809}
6810
6811VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicRasterState(
6812 VkCmdBuffer cmdBuffer,
6813 VkDynamicRasterState dynamicRasterState)
6814{
6815 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6816
6817 PostCmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6818}
6819
6820bool PostCmdBindDynamicColorBlendState(
6821 VkCmdBuffer cmdBuffer,
6822 VkDynamicColorBlendState dynamicColorBlendState)
6823{
6824
6825
6826 return true;
6827}
6828
6829VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicColorBlendState(
6830 VkCmdBuffer cmdBuffer,
6831 VkDynamicColorBlendState dynamicColorBlendState)
6832{
6833 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6834
6835 PostCmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6836}
6837
6838bool PostCmdBindDynamicDepthStencilState(
6839 VkCmdBuffer cmdBuffer,
6840 VkDynamicDepthStencilState dynamicDepthStencilState)
6841{
6842
6843
6844 return true;
6845}
6846
6847VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthStencilState(
6848 VkCmdBuffer cmdBuffer,
6849 VkDynamicDepthStencilState dynamicDepthStencilState)
6850{
6851 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6852
6853 PostCmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6854}
6855
6856bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006857 VkCmdBuffer cmdBuffer,
6858 const VkDescriptorSet* pDescriptorSets,
6859 const uint32_t* pDynamicOffsets)
6860{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006861 if(pDescriptorSets == nullptr)
6862 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006863 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006864 "vkCmdBindDescriptorSets parameter, const VkDescriptorSet* pDescriptorSets, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006865 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006866 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006867
6868
6869 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006870}
6871
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006872bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006873 VkCmdBuffer cmdBuffer,
6874 VkPipelineBindPoint pipelineBindPoint,
6875 VkPipelineLayout layout,
6876 uint32_t firstSet,
6877 uint32_t setCount,
6878 uint32_t dynamicOffsetCount)
6879{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006880
6881 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6882 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6883 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006884 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006885 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006886 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006887 }
6888
6889
6890
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006891
6892
6893 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006894}
6895
6896VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6897 VkCmdBuffer cmdBuffer,
6898 VkPipelineBindPoint pipelineBindPoint,
6899 VkPipelineLayout layout,
6900 uint32_t firstSet,
6901 uint32_t setCount,
6902 const VkDescriptorSet* pDescriptorSets,
6903 uint32_t dynamicOffsetCount,
6904 const uint32_t* pDynamicOffsets)
6905{
6906 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006907
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006908 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6909
6910 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6911}
6912
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006913bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006914 VkCmdBuffer cmdBuffer,
6915 VkBuffer buffer,
6916 VkDeviceSize offset,
6917 VkIndexType indexType)
6918{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006919
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006920
6921
6922 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6923 indexType > VK_INDEX_TYPE_END_RANGE)
6924 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006925 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006926 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006927 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006928 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006929
6930 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006931}
6932
6933VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6934 VkCmdBuffer cmdBuffer,
6935 VkBuffer buffer,
6936 VkDeviceSize offset,
6937 VkIndexType indexType)
6938{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006939 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6940
6941 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6942}
6943
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006944bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006945 VkCmdBuffer cmdBuffer,
6946 const VkBuffer* pBuffers,
6947 const VkDeviceSize* pOffsets)
6948{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006949 if(pBuffers == nullptr)
6950 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006951 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006952 "vkCmdBindVertexBuffers parameter, const VkBuffer* pBuffers, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006953 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006954 }
6955
6956 if(pOffsets == nullptr)
6957 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006958 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006959 "vkCmdBindVertexBuffers parameter, const VkDeviceSize* pOffsets, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006960 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006961 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006962
6963 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006964}
6965
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006966bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006967 VkCmdBuffer cmdBuffer,
6968 uint32_t startBinding,
6969 uint32_t bindingCount)
6970{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006971
6972
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006973
6974 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006975}
6976
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06006977VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006978 VkCmdBuffer cmdBuffer,
6979 uint32_t startBinding,
6980 uint32_t bindingCount,
6981 const VkBuffer* pBuffers,
6982 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006983{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006984 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006985
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006986 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
6987
6988 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006989}
6990
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006991bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006992 VkCmdBuffer cmdBuffer,
6993 uint32_t firstVertex,
6994 uint32_t vertexCount,
6995 uint32_t firstInstance,
6996 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006997{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006998
6999
7000
7001
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007002
7003 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007004}
7005
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007006VK_LAYER_EXPORT void VKAPI vkCmdDraw(
7007 VkCmdBuffer cmdBuffer,
7008 uint32_t firstVertex,
7009 uint32_t vertexCount,
7010 uint32_t firstInstance,
7011 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007012{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007013 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
7014
7015 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007016}
7017
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007018bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007019 VkCmdBuffer cmdBuffer,
7020 uint32_t firstIndex,
7021 uint32_t indexCount,
7022 int32_t vertexOffset,
7023 uint32_t firstInstance,
7024 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007025{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007026
7027
7028
7029
7030
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007031
7032 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007033}
7034
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007035VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7036 VkCmdBuffer cmdBuffer,
7037 uint32_t firstIndex,
7038 uint32_t indexCount,
7039 int32_t vertexOffset,
7040 uint32_t firstInstance,
7041 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007042{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007043 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7044
7045 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7046}
7047
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007048bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007049 VkCmdBuffer cmdBuffer,
7050 VkBuffer buffer,
7051 VkDeviceSize offset,
7052 uint32_t count,
7053 uint32_t stride)
7054{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007055
7056
7057
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007058
7059
7060 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007061}
7062
7063VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7064 VkCmdBuffer cmdBuffer,
7065 VkBuffer buffer,
7066 VkDeviceSize offset,
7067 uint32_t count,
7068 uint32_t stride)
7069{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007070 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7071
7072 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7073}
7074
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007075bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007076 VkCmdBuffer cmdBuffer,
7077 VkBuffer buffer,
7078 VkDeviceSize offset,
7079 uint32_t count,
7080 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007081{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007082
7083
7084
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007085
7086
7087 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007088}
7089
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007090VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7091 VkCmdBuffer cmdBuffer,
7092 VkBuffer buffer,
7093 VkDeviceSize offset,
7094 uint32_t count,
7095 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007096{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007097 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7098
7099 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7100}
7101
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007102bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007103 VkCmdBuffer cmdBuffer,
7104 uint32_t x,
7105 uint32_t y,
7106 uint32_t z)
7107{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007108
7109
7110
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007111
7112 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007113}
7114
7115VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7116 VkCmdBuffer cmdBuffer,
7117 uint32_t x,
7118 uint32_t y,
7119 uint32_t z)
7120{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007121 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7122
7123 PostCmdDispatch(cmdBuffer, x, y, z);
7124}
7125
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007126bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007127 VkCmdBuffer cmdBuffer,
7128 VkBuffer buffer,
7129 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007130{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007131
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007132
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007133
7134 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007135}
7136
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007137VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7138 VkCmdBuffer cmdBuffer,
7139 VkBuffer buffer,
7140 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007141{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007142 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7143
7144 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007145}
7146
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007147bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007148 VkCmdBuffer cmdBuffer,
7149 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007150{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007151 if(pRegions == nullptr)
7152 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007153 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007154 "vkCmdCopyBuffer parameter, const VkBufferCopy* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007155 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007156 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007157
7158 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007159}
7160
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007161bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007162 VkCmdBuffer cmdBuffer,
7163 VkBuffer srcBuffer,
7164 VkBuffer destBuffer,
7165 uint32_t regionCount)
7166{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007167
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007168
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007169
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007170
7171 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007172}
7173
7174VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7175 VkCmdBuffer cmdBuffer,
7176 VkBuffer srcBuffer,
7177 VkBuffer destBuffer,
7178 uint32_t regionCount,
7179 const VkBufferCopy* pRegions)
7180{
7181 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007182
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007183 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7184
7185 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7186}
7187
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007188bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007189 VkCmdBuffer cmdBuffer,
7190 const VkImageCopy* pRegions)
7191{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007192 if(pRegions == nullptr)
7193 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007194 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007195 "vkCmdCopyImage parameter, const VkImageCopy* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007196 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007197 }
7198 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7199 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7200 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007201 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007202 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007203 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007204 }
7205 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7206 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7207 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007208 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007209 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007210 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007211 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007212
7213 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007214}
7215
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007216bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007217 VkCmdBuffer cmdBuffer,
7218 VkImage srcImage,
7219 VkImageLayout srcImageLayout,
7220 VkImage destImage,
7221 VkImageLayout destImageLayout,
7222 uint32_t regionCount)
7223{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007224
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007225
7226 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7227 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7228 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007229 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007230 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007231 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007232 }
7233
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007234
7235 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7236 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7237 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007238 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007239 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007240 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007241 }
7242
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007243
7244 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007245}
7246
7247VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7248 VkCmdBuffer cmdBuffer,
7249 VkImage srcImage,
7250 VkImageLayout srcImageLayout,
7251 VkImage destImage,
7252 VkImageLayout destImageLayout,
7253 uint32_t regionCount,
7254 const VkImageCopy* pRegions)
7255{
7256 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007257
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007258 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7259
7260 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7261}
7262
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007263bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007264 VkCmdBuffer cmdBuffer,
7265 const VkImageBlit* pRegions)
7266{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007267 if(pRegions == nullptr)
7268 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007269 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007270 "vkCmdBlitImage parameter, const VkImageBlit* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007271 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007272 }
7273 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7274 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7275 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007276 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007277 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007278 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007279 }
7280 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7281 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7282 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007283 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007284 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007285 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007286 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007287
7288 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007289}
7290
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007291bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007292 VkCmdBuffer cmdBuffer,
7293 VkImage srcImage,
7294 VkImageLayout srcImageLayout,
7295 VkImage destImage,
7296 VkImageLayout destImageLayout,
7297 uint32_t regionCount,
7298 VkTexFilter filter)
7299{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007300
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007301
7302 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7303 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7304 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007305 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007306 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007307 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007308 }
7309
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007310
7311 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7312 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7313 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007314 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007315 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007316 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007317 }
7318
7319
7320 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7321 filter > VK_TEX_FILTER_END_RANGE)
7322 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007323 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007324 "vkCmdBlitImage parameter, VkTexFilter filter, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007325 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007326 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007327
7328 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007329}
7330
7331VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7332 VkCmdBuffer cmdBuffer,
7333 VkImage srcImage,
7334 VkImageLayout srcImageLayout,
7335 VkImage destImage,
7336 VkImageLayout destImageLayout,
7337 uint32_t regionCount,
7338 const VkImageBlit* pRegions,
7339 VkTexFilter filter)
7340{
7341 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007342
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007343 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7344
7345 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7346}
7347
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007348bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007349 VkCmdBuffer cmdBuffer,
7350 const VkBufferImageCopy* pRegions)
7351{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007352 if(pRegions == nullptr)
7353 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007354 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007355 "vkCmdCopyBufferToImage parameter, const VkBufferImageCopy* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007356 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007357 }
7358 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7359 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7360 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007361 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007362 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007363 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007364 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007365
7366 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007367}
7368
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007369bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007370 VkCmdBuffer cmdBuffer,
7371 VkBuffer srcBuffer,
7372 VkImage destImage,
7373 VkImageLayout destImageLayout,
7374 uint32_t regionCount)
7375{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007376
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007377
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007378
7379 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7380 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7381 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007382 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007383 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007384 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007385 }
7386
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007387
7388 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007389}
7390
7391VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7392 VkCmdBuffer cmdBuffer,
7393 VkBuffer srcBuffer,
7394 VkImage destImage,
7395 VkImageLayout destImageLayout,
7396 uint32_t regionCount,
7397 const VkBufferImageCopy* pRegions)
7398{
7399 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007400
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007401 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7402
7403 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7404}
7405
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007406bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007407 VkCmdBuffer cmdBuffer,
7408 const VkBufferImageCopy* pRegions)
7409{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007410 if(pRegions == nullptr)
7411 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007412 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007413 "vkCmdCopyImageToBuffer parameter, const VkBufferImageCopy* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007414 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007415 }
7416 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7417 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7418 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007419 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007420 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007421 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007422 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007423
7424 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007425}
7426
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007427bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007428 VkCmdBuffer cmdBuffer,
7429 VkImage srcImage,
7430 VkImageLayout srcImageLayout,
7431 VkBuffer destBuffer,
7432 uint32_t regionCount)
7433{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007434
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007435
7436 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7437 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7438 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007439 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007440 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007441 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007442 }
7443
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007444
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007445
7446 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007447}
7448
7449VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7450 VkCmdBuffer cmdBuffer,
7451 VkImage srcImage,
7452 VkImageLayout srcImageLayout,
7453 VkBuffer destBuffer,
7454 uint32_t regionCount,
7455 const VkBufferImageCopy* pRegions)
7456{
7457 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007458
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007459 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7460
7461 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7462}
7463
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007464bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007465 VkCmdBuffer cmdBuffer,
7466 const uint32_t* pData)
7467{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007468 if(pData == nullptr)
7469 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007470 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007471 "vkCmdUpdateBuffer parameter, const uint32_t* pData, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007472 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007473 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007474
7475 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007476}
7477
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007478bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007479 VkCmdBuffer cmdBuffer,
7480 VkBuffer destBuffer,
7481 VkDeviceSize destOffset,
7482 VkDeviceSize dataSize)
7483{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007484
7485
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007486
7487
7488 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007489}
7490
7491VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7492 VkCmdBuffer cmdBuffer,
7493 VkBuffer destBuffer,
7494 VkDeviceSize destOffset,
7495 VkDeviceSize dataSize,
7496 const uint32_t* pData)
7497{
7498 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007499
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007500 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7501
7502 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7503}
7504
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007505bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007506 VkCmdBuffer cmdBuffer,
7507 VkBuffer destBuffer,
7508 VkDeviceSize destOffset,
7509 VkDeviceSize fillSize,
7510 uint32_t data)
7511{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007512
7513
7514
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007515
7516
7517 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007518}
7519
7520VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7521 VkCmdBuffer cmdBuffer,
7522 VkBuffer destBuffer,
7523 VkDeviceSize destOffset,
7524 VkDeviceSize fillSize,
7525 uint32_t data)
7526{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007527 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7528
7529 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7530}
7531
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007532bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007533 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007534 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007535 const VkImageSubresourceRange* pRanges)
7536{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007537 if(pColor == nullptr)
7538 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007539 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7540 "vkCmdClearColorImage parameter, const VkClearColorValue* pColor, is null pointer");
7541 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007542 }
7543
7544 if(pRanges == nullptr)
7545 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007546 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007547 "vkCmdClearColorImage parameter, const VkImageSubresourceRange* pRanges, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007548 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007549 }
7550 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7551 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7552 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007553 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007554 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007555 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007556 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007557
7558 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007559}
7560
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007561bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007562 VkCmdBuffer cmdBuffer,
7563 VkImage image,
7564 VkImageLayout imageLayout,
7565 uint32_t rangeCount)
7566{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007567
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007568
7569 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7570 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7571 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007572 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007573 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007574 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007575 }
7576
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007577
7578 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007579}
7580
7581VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7582 VkCmdBuffer cmdBuffer,
7583 VkImage image,
7584 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007585 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007586 uint32_t rangeCount,
7587 const VkImageSubresourceRange* pRanges)
7588{
7589 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007590
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007591 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7592
7593 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7594}
7595
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007596bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007597 VkCmdBuffer cmdBuffer,
7598 const VkImageSubresourceRange* pRanges)
7599{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007600 if(pRanges == nullptr)
7601 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007602 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7603 "vkCmdClearDepthStencilImage parameter, const VkImageSubresourceRange* pRanges, is null pointer");
7604 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007605 }
7606 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7607 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7608 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007609 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7610 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
7611 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007612 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007613
7614 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007615}
7616
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007617bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007618 VkCmdBuffer cmdBuffer,
7619 VkImage image,
7620 VkImageLayout imageLayout,
7621 float depth,
7622 uint32_t stencil,
7623 uint32_t rangeCount)
7624{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007625
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007626
7627 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7628 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7629 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007630 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7631 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7632 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007633 }
7634
7635
7636
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007637
7638 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007639}
7640
Chris Forbes2951d7d2015-06-22 17:21:59 +12007641VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007642 VkCmdBuffer cmdBuffer,
7643 VkImage image,
7644 VkImageLayout imageLayout,
7645 float depth,
7646 uint32_t stencil,
7647 uint32_t rangeCount,
7648 const VkImageSubresourceRange* pRanges)
7649{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007650 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007651
Chris Forbes2951d7d2015-06-22 17:21:59 +12007652 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007653
Chris Forbes2951d7d2015-06-22 17:21:59 +12007654 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007655}
7656
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007657bool PreCmdClearColorAttachment(
7658 VkCmdBuffer cmdBuffer,
7659 const VkClearColorValue* pColor,
7660 const VkRect3D* pRects)
7661{
7662 if(pColor == nullptr)
7663 {
7664 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7665 "vkCmdClearColorAttachment parameter, const VkClearColorValue* pColor, is null pointer");
7666 return false;
7667 }
7668
7669 if(pRects == nullptr)
7670 {
7671 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7672 "vkCmdClearColorAttachment parameter, const VkRect3D* pRects, is null pointer");
7673 return false;
7674 }
7675
7676 return true;
7677}
7678
7679bool PostCmdClearColorAttachment(
7680 VkCmdBuffer cmdBuffer,
7681 uint32_t colorAttachment,
7682 VkImageLayout imageLayout,
7683 uint32_t rectCount)
7684{
7685
7686
7687 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7688 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7689 {
7690 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7691 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7692 return false;
7693 }
7694
7695
7696 return true;
7697}
7698
7699VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7700 VkCmdBuffer cmdBuffer,
7701 uint32_t colorAttachment,
7702 VkImageLayout imageLayout,
7703 const VkClearColorValue* pColor,
7704 uint32_t rectCount,
7705 const VkRect3D* pRects)
7706{
7707 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7708
7709 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7710
7711 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7712}
7713
7714bool PreCmdClearDepthStencilAttachment(
7715 VkCmdBuffer cmdBuffer,
7716 const VkRect3D* pRects)
7717{
7718 if(pRects == nullptr)
7719 {
7720 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7721 "vkCmdClearDepthStencilAttachment parameter, const VkRect3D* pRects, is null pointer");
7722 return false;
7723 }
7724
7725 return true;
7726}
7727
7728bool PostCmdClearDepthStencilAttachment(
7729 VkCmdBuffer cmdBuffer,
7730 VkImageAspectFlags imageAspectMask,
7731 VkImageLayout imageLayout,
7732 float depth,
7733 uint32_t stencil,
7734 uint32_t rectCount)
7735{
7736
7737 if(!ValidateEnumerator((VkImageAspectFlagBits)imageAspectMask))
7738 {
7739 std::string reason = "vkCmdClearDepthStencilAttachment parameter, VkImageAspectFlags imageAspectMask, is " + EnumeratorString((VkImageAspectFlagBits)imageAspectMask);
7740 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
7741 return false;
7742 }
7743
7744 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7745 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7746 {
7747 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7748 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7749 return false;
7750 }
7751
7752
7753
7754
7755 return true;
7756}
7757
7758VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7759 VkCmdBuffer cmdBuffer,
7760 VkImageAspectFlags imageAspectMask,
7761 VkImageLayout imageLayout,
7762 float depth,
7763 uint32_t stencil,
7764 uint32_t rectCount,
7765 const VkRect3D* pRects)
7766{
7767 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7768
7769 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7770
7771 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7772}
7773
7774bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007775 VkCmdBuffer cmdBuffer,
7776 const VkImageResolve* pRegions)
7777{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007778 if(pRegions == nullptr)
7779 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007780 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007781 "vkCmdResolveImage parameter, const VkImageResolve* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007782 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007783 }
7784 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7785 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7786 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007787 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007788 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007789 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007790 }
7791 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7792 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7793 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007794 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007795 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007796 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007797 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007798
7799 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007800}
7801
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007802bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007803 VkCmdBuffer cmdBuffer,
7804 VkImage srcImage,
7805 VkImageLayout srcImageLayout,
7806 VkImage destImage,
7807 VkImageLayout destImageLayout,
7808 uint32_t regionCount)
7809{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007810
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007811
7812 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7813 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7814 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007815 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007816 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007817 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007818 }
7819
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007820
7821 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7822 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7823 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007824 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007825 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007826 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007827 }
7828
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007829
7830 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007831}
7832
7833VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7834 VkCmdBuffer cmdBuffer,
7835 VkImage srcImage,
7836 VkImageLayout srcImageLayout,
7837 VkImage destImage,
7838 VkImageLayout destImageLayout,
7839 uint32_t regionCount,
7840 const VkImageResolve* pRegions)
7841{
7842 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007843
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007844 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7845
7846 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7847}
7848
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007849bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007850 VkCmdBuffer cmdBuffer,
7851 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007852 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007853{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007854
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007855
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007856
7857 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007858}
7859
7860VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7861 VkCmdBuffer cmdBuffer,
7862 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007863 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007864{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007865 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007866
Tony Barbourc2e987e2015-06-29 16:20:35 -06007867 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007868}
7869
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007870bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007871 VkCmdBuffer cmdBuffer,
7872 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007873 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007874{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007875
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007876
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007877
7878 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007879}
7880
7881VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7882 VkCmdBuffer cmdBuffer,
7883 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007884 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007885{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007886 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007887
Tony Barbourc2e987e2015-06-29 16:20:35 -06007888 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007889}
7890
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007891bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007892 VkCmdBuffer cmdBuffer,
7893 const VkEvent* pEvents,
7894 const void** ppMemBarriers)
7895{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007896 if(pEvents == nullptr)
7897 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007898 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007899 "vkCmdWaitEvents parameter, const VkEvent* pEvents, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007900 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007901 }
7902
7903 if(ppMemBarriers == nullptr)
7904 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007905 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007906 "vkCmdWaitEvents parameter, const void** ppMemBarriers, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007907 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007908 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007909
7910 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007911}
7912
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007913bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007914 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007915 uint32_t eventCount,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007916 VkPipelineStageFlags sourceStageMask,
7917 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007918 uint32_t memBarrierCount)
7919{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007920
Tony Barbourc2e987e2015-06-29 16:20:35 -06007921
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007922
7923
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007924
7925 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007926}
7927
7928VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
7929 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007930 uint32_t eventCount,
7931 const VkEvent* pEvents,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007932 VkPipelineStageFlags sourceStageMask,
7933 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007934 uint32_t memBarrierCount,
7935 const void** ppMemBarriers)
7936{
7937 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007938
Tony Barbourc2e987e2015-06-29 16:20:35 -06007939 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007940
Tony Barbourc2e987e2015-06-29 16:20:35 -06007941 PostCmdWaitEvents(cmdBuffer, eventCount, sourceStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007942}
7943
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007944bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007945 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007946 const void** ppMemBarriers)
7947{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007948 if(ppMemBarriers == nullptr)
7949 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007950 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007951 "vkCmdPipelineBarrier parameter, const void** ppMemBarriers, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007952 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007953 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007954
7955 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007956}
7957
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007958bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007959 VkCmdBuffer cmdBuffer,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007960 VkPipelineStageFlags sourceStageMask,
7961 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007962 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007963 uint32_t memBarrierCount)
7964{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007965
Tony Barbourc2e987e2015-06-29 16:20:35 -06007966
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007967
7968
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007969
7970 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007971}
7972
7973VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7974 VkCmdBuffer cmdBuffer,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007975 VkPipelineStageFlags sourceStageMask,
7976 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007977 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007978 uint32_t memBarrierCount,
7979 const void** ppMemBarriers)
7980{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007981 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007982
Tony Barbourc2e987e2015-06-29 16:20:35 -06007983 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007984
Tony Barbourc2e987e2015-06-29 16:20:35 -06007985 PostCmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007986}
7987
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007988bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007989 VkCmdBuffer cmdBuffer,
7990 VkQueryPool queryPool,
7991 uint32_t slot,
7992 VkQueryControlFlags flags)
7993{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007994
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007995
7996
7997 if(!ValidateEnumerator((VkQueryControlFlagBits)flags))
7998 {
7999 std::string reason = "vkCmdBeginQuery parameter, VkQueryControlFlags flags, is " + EnumeratorString((VkQueryControlFlagBits)flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008000 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8001 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008002 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008003
8004 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008005}
8006
8007VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
8008 VkCmdBuffer cmdBuffer,
8009 VkQueryPool queryPool,
8010 uint32_t slot,
8011 VkQueryControlFlags flags)
8012{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008013 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8014
8015 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8016}
8017
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008018bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008019 VkCmdBuffer cmdBuffer,
8020 VkQueryPool queryPool,
8021 uint32_t slot)
8022{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008023
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008024
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008025
8026 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008027}
8028
8029VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
8030 VkCmdBuffer cmdBuffer,
8031 VkQueryPool queryPool,
8032 uint32_t slot)
8033{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008034 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
8035
8036 PostCmdEndQuery(cmdBuffer, queryPool, slot);
8037}
8038
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008039bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008040 VkCmdBuffer cmdBuffer,
8041 VkQueryPool queryPool,
8042 uint32_t startQuery,
8043 uint32_t queryCount)
8044{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008045
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008046
8047
8048
8049 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008050}
8051
8052VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8053 VkCmdBuffer cmdBuffer,
8054 VkQueryPool queryPool,
8055 uint32_t startQuery,
8056 uint32_t queryCount)
8057{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008058 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8059
8060 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8061}
8062
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008063bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008064 VkCmdBuffer cmdBuffer,
8065 VkTimestampType timestampType,
8066 VkBuffer destBuffer,
8067 VkDeviceSize destOffset)
8068{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008069
8070 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8071 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8072 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008073 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008074 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008075 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008076 }
8077
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008078
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008079
8080 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008081}
8082
8083VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8084 VkCmdBuffer cmdBuffer,
8085 VkTimestampType timestampType,
8086 VkBuffer destBuffer,
8087 VkDeviceSize destOffset)
8088{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008089 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8090
8091 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8092}
8093
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008094bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008095 VkCmdBuffer cmdBuffer,
8096 VkQueryPool queryPool,
8097 uint32_t startQuery,
8098 uint32_t queryCount,
8099 VkBuffer destBuffer,
8100 VkDeviceSize destOffset,
8101 VkDeviceSize destStride,
8102 VkQueryResultFlags flags)
8103{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008104
8105
8106
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008107
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008108
8109
8110
8111 if(!ValidateEnumerator((VkQueryResultFlagBits)flags))
8112 {
8113 std::string reason = "vkCmdCopyQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008114 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8115 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008116 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008117
8118 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008119}
8120
Jeremy Hayescf469132015-04-17 10:36:53 -06008121VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008122 VkCmdBuffer cmdBuffer,
8123 VkQueryPool queryPool,
8124 uint32_t startQuery,
8125 uint32_t queryCount,
8126 VkBuffer destBuffer,
8127 VkDeviceSize destOffset,
8128 VkDeviceSize destStride,
8129 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06008130{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008131 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8132
8133 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06008134}
8135
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008136bool PreCreateFramebuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008137 VkDevice device,
8138 const VkFramebufferCreateInfo* pCreateInfo)
8139{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008140 if(pCreateInfo == nullptr)
8141 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008142 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008143 "vkCreateFramebuffer parameter, const VkFramebufferCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008144 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008145 }
8146 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
8147 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
8148 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008149 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008150 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008151 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008152 }
Chia-I Wuc278df82015-07-07 11:50:03 +08008153 if(pCreateInfo->pAttachments == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008154 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008155 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008156 "vkCreateFramebuffer parameter, const VkAttachmentBindInfo* pCreateInfo->pAttachments, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008157 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008158 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008159 if(pCreateInfo->pAttachments->view.handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008160 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008161 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008162 "vkCreateFramebuffer parameter, VkAttachmentView pCreateInfo->pAttachments->view, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008163 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008164 }
Chia-I Wuc278df82015-07-07 11:50:03 +08008165 if(pCreateInfo->pAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8166 pCreateInfo->pAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008167 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008168 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008169 "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pAttachments->layout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008170 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008171 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008172
8173 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008174}
8175
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008176bool PostCreateFramebuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008177 VkDevice device,
8178 VkFramebuffer* pFramebuffer,
8179 VkResult result)
8180{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008181
8182 if(pFramebuffer == nullptr)
8183 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008184 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008185 "vkCreateFramebuffer parameter, VkFramebuffer* pFramebuffer, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008186 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008187 }
8188
8189 if(result != VK_SUCCESS)
8190 {
8191 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008192 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8193 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008194 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008195
8196 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008197}
8198
8199VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
8200 VkDevice device,
8201 const VkFramebufferCreateInfo* pCreateInfo,
8202 VkFramebuffer* pFramebuffer)
8203{
8204 PreCreateFramebuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008205
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008206 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
8207
8208 PostCreateFramebuffer(device, pFramebuffer, result);
8209
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008210 return result;
8211}
8212
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008213bool PostDestroyFramebuffer(
8214 VkDevice device,
8215 VkFramebuffer framebuffer,
8216 VkResult result)
8217{
8218
8219 if(result != VK_SUCCESS)
8220 {
8221 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
8222 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8223 return false;
8224 }
8225
8226 return true;
8227}
8228
8229VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
8230 VkDevice device,
8231 VkFramebuffer framebuffer)
8232{
8233 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
8234
8235 PostDestroyFramebuffer(device, framebuffer, result);
8236
8237 return result;
8238}
8239
8240bool PreCreateRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008241 VkDevice device,
8242 const VkRenderPassCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008243{
8244 if(pCreateInfo == nullptr)
8245 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008246 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008247 "vkCreateRenderPass parameter, const VkRenderPassCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008248 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008249 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008250 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
8251 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008252 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008253 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008254 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008255 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008256 }
Chia-I Wuc278df82015-07-07 11:50:03 +08008257
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008258 for (uint32_t i = 0; i < pCreateInfo->attachmentCount; i++)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008259 {
Chia-I Wuc278df82015-07-07 11:50:03 +08008260 const VkAttachmentDescription *att = &pCreateInfo->pAttachments[i];
8261
8262 if(att->format < VK_FORMAT_BEGIN_RANGE || att->format > VK_FORMAT_END_RANGE)
8263 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008264 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008265 "vkCreateRenderPass parameter, VkFormat in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008266 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008267 }
8268 if(att->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || att->initialLayout > VK_IMAGE_LAYOUT_END_RANGE ||
8269 att->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || att->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
8270 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008271 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008272 "vkCreateRenderPass parameter, VkImageLayout in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008273 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008274 }
8275 if(att->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE || att->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
8276 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008277 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008278 "vkCreateRenderPass parameter, VkAttachmentLoadOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008279 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008280 }
8281 if(att->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE || att->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
8282 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008283 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008284 "vkCreateRenderPass parameter, VkAttachmentStoreOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008285 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008286 }
8287 if(att->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE || att->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
8288 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008289 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008290 "vkCreateRenderPass parameter, VkAttachmentLoadOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008291 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008292 }
8293 if(att->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE || att->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
8294 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008295 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008296 "vkCreateRenderPass parameter, VkAttachmentStoreOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008297 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008298 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008299 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008300
8301 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008302}
8303
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008304bool PostCreateRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008305 VkDevice device,
8306 VkRenderPass* pRenderPass,
8307 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008308{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008309
8310 if(pRenderPass == nullptr)
8311 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008312 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008313 "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008314 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008315 }
8316
8317 if(result != VK_SUCCESS)
8318 {
8319 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008320 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8321 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008322 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008323
8324 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008325}
8326
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008327VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
8328 VkDevice device,
8329 const VkRenderPassCreateInfo* pCreateInfo,
8330 VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008331{
8332 PreCreateRenderPass(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008333
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008334 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
8335
8336 PostCreateRenderPass(device, pRenderPass, result);
8337
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008338 return result;
8339}
8340
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008341bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008342 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008343 const VkRenderPassBeginInfo* pRenderPassBegin,
8344 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008345{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008346 if(pRenderPassBegin == nullptr)
8347 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008348 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008349 "vkCmdBeginRenderPass parameter, const VkRenderPassBegin* pRenderPassBegin, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008350 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008351 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008352 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8353 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008354 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008355 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8356 "vkCmdBeginRenderPass parameter, VkRenderPassContents pRenderPassBegin->contents, is unrecognized enumerator");
8357 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008358 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008359
8360 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008361}
8362
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008363bool PostCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008364 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008365{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008366
8367 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008368}
8369
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008370VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8371 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008372 const VkRenderPassBeginInfo* pRenderPassBegin,
8373 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008374{
Chia-I Wuc278df82015-07-07 11:50:03 +08008375 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
8376 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008377
8378 PostCmdBeginRenderPass(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008379}
8380
Chia-I Wuc278df82015-07-07 11:50:03 +08008381void PreCmdNextSubpass(
8382 VkCmdBuffer cmdBuffer,
8383 VkRenderPassContents contents)
8384{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008385
8386 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8387 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008388 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008389 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8390 "vkCmdBeginRenderPass parameter, VkRenderPassContents pRenderPassBegin->contents, is unrecognized enumerator");
Chia-I Wuc278df82015-07-07 11:50:03 +08008391 return;
8392 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008393
8394 return;
Chia-I Wuc278df82015-07-07 11:50:03 +08008395}
8396
8397void PostCmdNextSubpass(
8398 VkCmdBuffer cmdBuffer)
8399{
8400 if(cmdBuffer == nullptr)
8401 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008402 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008403 "vkCmdNextSubpass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8404 return;
8405 }
8406}
8407
8408VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8409 VkCmdBuffer cmdBuffer,
8410 VkRenderPassContents contents)
8411{
8412 PreCmdNextSubpass(cmdBuffer, contents);
8413 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8414
8415 PostCmdNextSubpass(cmdBuffer);
8416}
8417
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008418void PreCmdEndRenderPass(
8419 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008420{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008421 if(cmdBuffer == nullptr)
8422 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008423 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008424 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8425 return;
8426 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008427}
8428
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008429void PostCmdEndRenderPass(
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008430 VkCmdBuffer cmdBuffer)
Chia-I Wu5b66aa52015-04-16 22:02:10 +08008431{
Chia-I Wuc278df82015-07-07 11:50:03 +08008432 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8433
8434 PostCmdEndRenderPass(cmdBuffer);
8435}
8436
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008437bool PreCmdExecuteCommands(
8438 VkCmdBuffer cmdBuffer,
8439 const VkCmdBuffer* pCmdBuffers)
8440{
8441 if(pCmdBuffers == nullptr)
8442 {
8443 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8444 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8445 return false;
8446 }
8447
8448 return true;
8449}
8450
8451bool PostCmdExecuteCommands(
8452 VkCmdBuffer cmdBuffer,
8453 uint32_t cmdBuffersCount)
8454{
8455
8456
8457 return true;
8458}
8459
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008460void PreCmdExecuteCommands(
8461 VkCmdBuffer cmdBuffer)
8462{
8463 if(cmdBuffer == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008464 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008465 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008466 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
8467 return;
8468 }
8469}
8470
8471void PostCmdExecuteCommands(
8472 VkCmdBuffer cmdBuffer)
8473{
8474 if(cmdBuffer == nullptr)
8475 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008476 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008477 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008478 return;
8479 }
Chia-I Wu5b66aa52015-04-16 22:02:10 +08008480}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008481
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008482VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008483 VkCmdBuffer cmdBuffer,
8484 uint32_t cmdBuffersCount,
8485 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008486{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008487 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8488
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008489 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8490
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008491 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008492}
8493
Jon Ashburn1245cec2015-05-18 13:20:15 -06008494VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008495{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008496 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008497 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008498 }
8499
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008500 /* loader uses this to force layer initialization; device object is wrapped */
8501 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008502 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008503 return (void*) vkGetDeviceProcAddr;
8504 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008505
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008506 if (!strcmp(funcName, "vkCreateDevice"))
8507 return (void*) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008508 if (!strcmp(funcName, "vkDestroyDevice"))
8509 return (void*) vkDestroyDevice;
8510 if (!strcmp(funcName, "vkGetDeviceQueue"))
8511 return (void*) vkGetDeviceQueue;
8512 if (!strcmp(funcName, "vkQueueSubmit"))
8513 return (void*) vkQueueSubmit;
8514 if (!strcmp(funcName, "vkQueueWaitIdle"))
8515 return (void*) vkQueueWaitIdle;
8516 if (!strcmp(funcName, "vkDeviceWaitIdle"))
8517 return (void*) vkDeviceWaitIdle;
8518 if (!strcmp(funcName, "vkAllocMemory"))
8519 return (void*) vkAllocMemory;
8520 if (!strcmp(funcName, "vkFreeMemory"))
8521 return (void*) vkFreeMemory;
8522 if (!strcmp(funcName, "vkMapMemory"))
8523 return (void*) vkMapMemory;
8524 if (!strcmp(funcName, "vkUnmapMemory"))
8525 return (void*) vkUnmapMemory;
8526 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
8527 return (void*) vkFlushMappedMemoryRanges;
8528 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
8529 return (void*) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008530 if (!strcmp(funcName, "vkCreateFence"))
8531 return (void*) vkCreateFence;
8532 if (!strcmp(funcName, "vkResetFences"))
8533 return (void*) vkResetFences;
8534 if (!strcmp(funcName, "vkGetFenceStatus"))
8535 return (void*) vkGetFenceStatus;
8536 if (!strcmp(funcName, "vkWaitForFences"))
8537 return (void*) vkWaitForFences;
8538 if (!strcmp(funcName, "vkCreateSemaphore"))
8539 return (void*) vkCreateSemaphore;
8540 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
8541 return (void*) vkQueueSignalSemaphore;
8542 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
8543 return (void*) vkQueueWaitSemaphore;
8544 if (!strcmp(funcName, "vkCreateEvent"))
8545 return (void*) vkCreateEvent;
8546 if (!strcmp(funcName, "vkGetEventStatus"))
8547 return (void*) vkGetEventStatus;
8548 if (!strcmp(funcName, "vkSetEvent"))
8549 return (void*) vkSetEvent;
8550 if (!strcmp(funcName, "vkResetEvent"))
8551 return (void*) vkResetEvent;
8552 if (!strcmp(funcName, "vkCreateQueryPool"))
8553 return (void*) vkCreateQueryPool;
8554 if (!strcmp(funcName, "vkGetQueryPoolResults"))
8555 return (void*) vkGetQueryPoolResults;
8556 if (!strcmp(funcName, "vkCreateBuffer"))
8557 return (void*) vkCreateBuffer;
8558 if (!strcmp(funcName, "vkCreateBufferView"))
8559 return (void*) vkCreateBufferView;
8560 if (!strcmp(funcName, "vkCreateImage"))
8561 return (void*) vkCreateImage;
8562 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
8563 return (void*) vkGetImageSubresourceLayout;
8564 if (!strcmp(funcName, "vkCreateImageView"))
8565 return (void*) vkCreateImageView;
Chia-I Wuc278df82015-07-07 11:50:03 +08008566 if (!strcmp(funcName, "vkCreateAttachmentView"))
8567 return (void*) vkCreateAttachmentView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008568 if (!strcmp(funcName, "vkCreateShader"))
8569 return (void*) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008570 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
8571 return (void*) vkCreateGraphicsPipelines;
8572 if (!strcmp(funcName, "vkCreateComputePipelines"))
8573 return (void*) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008574 if (!strcmp(funcName, "vkCreatePipelineLayout"))
8575 return (void*) vkCreatePipelineLayout;
8576 if (!strcmp(funcName, "vkCreateSampler"))
8577 return (void*) vkCreateSampler;
8578 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
8579 return (void*) vkCreateDescriptorSetLayout;
8580 if (!strcmp(funcName, "vkCreateDescriptorPool"))
8581 return (void*) vkCreateDescriptorPool;
8582 if (!strcmp(funcName, "vkResetDescriptorPool"))
8583 return (void*) vkResetDescriptorPool;
8584 if (!strcmp(funcName, "vkAllocDescriptorSets"))
8585 return (void*) vkAllocDescriptorSets;
8586 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
8587 return (void*) vkCreateDynamicViewportState;
8588 if (!strcmp(funcName, "vkCreateDynamicRasterState"))
8589 return (void*) vkCreateDynamicRasterState;
8590 if (!strcmp(funcName, "vkCreateDynamicColorBlendState"))
8591 return (void*) vkCreateDynamicColorBlendState;
8592 if (!strcmp(funcName, "vkCreateDynamicDepthStencilState"))
8593 return (void*) vkCreateDynamicDepthStencilState;
8594 if (!strcmp(funcName, "vkCreateCommandBuffer"))
8595 return (void*) vkCreateCommandBuffer;
8596 if (!strcmp(funcName, "vkBeginCommandBuffer"))
8597 return (void*) vkBeginCommandBuffer;
8598 if (!strcmp(funcName, "vkEndCommandBuffer"))
8599 return (void*) vkEndCommandBuffer;
8600 if (!strcmp(funcName, "vkResetCommandBuffer"))
8601 return (void*) vkResetCommandBuffer;
8602 if (!strcmp(funcName, "vkCmdBindPipeline"))
8603 return (void*) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008604 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
8605 return (void*) vkCmdBindDescriptorSets;
8606 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
8607 return (void*) vkCmdBindVertexBuffers;
8608 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
8609 return (void*) vkCmdBindIndexBuffer;
8610 if (!strcmp(funcName, "vkCmdDraw"))
8611 return (void*) vkCmdDraw;
8612 if (!strcmp(funcName, "vkCmdDrawIndexed"))
8613 return (void*) vkCmdDrawIndexed;
8614 if (!strcmp(funcName, "vkCmdDrawIndirect"))
8615 return (void*) vkCmdDrawIndirect;
8616 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
8617 return (void*) vkCmdDrawIndexedIndirect;
8618 if (!strcmp(funcName, "vkCmdDispatch"))
8619 return (void*) vkCmdDispatch;
8620 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
8621 return (void*) vkCmdDispatchIndirect;
8622 if (!strcmp(funcName, "vkCmdCopyBuffer"))
8623 return (void*) vkCmdCopyBuffer;
8624 if (!strcmp(funcName, "vkCmdCopyImage"))
8625 return (void*) vkCmdCopyImage;
8626 if (!strcmp(funcName, "vkCmdBlitImage"))
8627 return (void*) vkCmdBlitImage;
8628 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
8629 return (void*) vkCmdCopyBufferToImage;
8630 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
8631 return (void*) vkCmdCopyImageToBuffer;
8632 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
8633 return (void*) vkCmdUpdateBuffer;
8634 if (!strcmp(funcName, "vkCmdFillBuffer"))
8635 return (void*) vkCmdFillBuffer;
8636 if (!strcmp(funcName, "vkCmdClearColorImage"))
8637 return (void*) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008638 if (!strcmp(funcName, "vkCmdResolveImage"))
8639 return (void*) vkCmdResolveImage;
8640 if (!strcmp(funcName, "vkCmdSetEvent"))
8641 return (void*) vkCmdSetEvent;
8642 if (!strcmp(funcName, "vkCmdResetEvent"))
8643 return (void*) vkCmdResetEvent;
8644 if (!strcmp(funcName, "vkCmdWaitEvents"))
8645 return (void*) vkCmdWaitEvents;
8646 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
8647 return (void*) vkCmdPipelineBarrier;
8648 if (!strcmp(funcName, "vkCmdBeginQuery"))
8649 return (void*) vkCmdBeginQuery;
8650 if (!strcmp(funcName, "vkCmdEndQuery"))
8651 return (void*) vkCmdEndQuery;
8652 if (!strcmp(funcName, "vkCmdResetQueryPool"))
8653 return (void*) vkCmdResetQueryPool;
8654 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
8655 return (void*) vkCmdWriteTimestamp;
8656 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
8657 return (void*) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008658 if (!strcmp(funcName, "vkCreateFramebuffer"))
8659 return (void*) vkCreateFramebuffer;
8660 if (!strcmp(funcName, "vkCreateRenderPass"))
8661 return (void*) vkCreateRenderPass;
8662 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
8663 return (void*) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008664 if (!strcmp(funcName, "vkCmdNextSubpass"))
8665 return (void*) vkCmdNextSubpass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008666 if (!strcmp(funcName, "vkCmdEndRenderPass"))
8667 return (void*) vkCmdEndRenderPass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008668
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008669 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008670 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008671 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008672 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008673 }
8674}
8675
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008676VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008677{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008678 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008679 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008680 }
8681
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008682 /* loader uses this to force layer initialization; instance object is wrapped */
8683 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008684 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
8685 return (void *) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008686 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008687
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008688 if (!strcmp(funcName, "vkCreateInstance"))
8689 return (void*) vkCreateInstance;
8690 if (!strcmp(funcName, "vkDestroyInstance"))
8691 return (void*) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008692 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
8693 return (void*) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008694 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
8695 return (void*) vkGetPhysicalDeviceProperties;
8696 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
8697 return (void*) vkGetPhysicalDeviceFeatures;
8698 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatInfo"))
8699 return (void*) vkGetPhysicalDeviceFormatInfo;
8700 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
8701 return (void*) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008702 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
8703 return (void*) vkGetGlobalLayerProperties;
8704 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
8705 return (void*) vkGetGlobalExtensionProperties;
8706 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
8707 return (void*) vkGetPhysicalDeviceLayerProperties;
8708 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
8709 return (void*) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008710
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008711 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
8712 void* fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
8713 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008714 return fptr;
8715
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008716 {
8717 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8718 return NULL;
8719 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8720 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008721}