blob: 17ccad4040b38657e7f1b44f29d6435ff1c20e3c [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<<<<<<< HEAD
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004669 if(pCreateInfo->pDsState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4670 pCreateInfo->pDsState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
Tony Barboure307f582015-07-10 15:29:03 -06004671=======
4672 if(pCreateInfo->pDepthStencilState->format < VK_FORMAT_BEGIN_RANGE ||
4673 pCreateInfo->pDepthStencilState->format > VK_FORMAT_END_RANGE)
4674 {
4675 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4676 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pDsState->format, is unrecognized enumerator");
4677 return false;
4678 }
4679 if(pCreateInfo->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4680 pCreateInfo->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4681>>>>>>> fd61c93... Bug 14224: Remove abbreviations on some API symbols
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004682 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004683 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004684 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004685 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004686 }
Tony Barboure307f582015-07-10 15:29:03 -06004687 if(pCreateInfo->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4688 pCreateInfo->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004689 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004690 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004691 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004692 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004693 }
Tony Barboure307f582015-07-10 15:29:03 -06004694 if(pCreateInfo->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4695 pCreateInfo->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004696 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004697 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004698 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004699 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004700 }
Tony Barboure307f582015-07-10 15:29:03 -06004701 if(pCreateInfo->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4702 pCreateInfo->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004703 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004704 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004705 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004706 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004707 }
Tony Barboure307f582015-07-10 15:29:03 -06004708 if(pCreateInfo->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4709 pCreateInfo->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004710 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004711 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004712 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004713 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004714 }
Tony Barboure307f582015-07-10 15:29:03 -06004715 if(pCreateInfo->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4716 pCreateInfo->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004717 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004718 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004719 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004720 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004721 }
Tony Barboure307f582015-07-10 15:29:03 -06004722 if(pCreateInfo->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4723 pCreateInfo->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004724 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004725 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004726 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004727 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004728 }
Tony Barboure307f582015-07-10 15:29:03 -06004729 if(pCreateInfo->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4730 pCreateInfo->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004731 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004732 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004733 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004734 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004735 }
Tony Barboure307f582015-07-10 15:29:03 -06004736 if(pCreateInfo->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4737 pCreateInfo->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004738 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004739 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004740 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004741 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004742 }
Tony Barboure307f582015-07-10 15:29:03 -06004743 if(pCreateInfo->pColorBlendState == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004744 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004745 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004746 "vkCreateGraphicsPipeline parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004747 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004748 }
Tony Barboure307f582015-07-10 15:29:03 -06004749 if(pCreateInfo->pColorBlendState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4750 pCreateInfo->pColorBlendState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004751 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004752 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004753 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004754 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004755 }
Tony Barboure307f582015-07-10 15:29:03 -06004756 if(pCreateInfo->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4757 pCreateInfo->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004758 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004759 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004760 "vkCreateGraphicsPipeline parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004761 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004762 }
Tony Barboure307f582015-07-10 15:29:03 -06004763 if(pCreateInfo->pColorBlendState->pAttachments == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004764 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004765 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004766 "vkCreateGraphicsPipeline parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004767 return false;
4768 }
Tony Barboure307f582015-07-10 15:29:03 -06004769 if(pCreateInfo->pColorBlendState->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4770 pCreateInfo->pColorBlendState->pAttachments->format > VK_FORMAT_END_RANGE)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004771 {
4772 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4773 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator");
4774 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004775 }
Tony Barboure307f582015-07-10 15:29:03 -06004776 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4777 pCreateInfo->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004778 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004779 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004780 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004781 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004782 }
Tony Barboure307f582015-07-10 15:29:03 -06004783 if(pCreateInfo->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4784 pCreateInfo->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004785 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004786 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004787 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004788 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004789 }
Tony Barboure307f582015-07-10 15:29:03 -06004790 if(pCreateInfo->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4791 pCreateInfo->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004792 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004793 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004794 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004795 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004796 }
Tony Barboure307f582015-07-10 15:29:03 -06004797 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4798 pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004799 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004800 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004801 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004802 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004803 }
Tony Barboure307f582015-07-10 15:29:03 -06004804 if(pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4805 pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004806 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004807 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004808 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004809 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004810 }
Tony Barboure307f582015-07-10 15:29:03 -06004811 if(pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4812 pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004813 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004814 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004815 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004816 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004817 }
Tony Barboure307f582015-07-10 15:29:03 -06004818 if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004819 {
Tony Barboure307f582015-07-10 15:29:03 -06004820<<<<<<< HEAD
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004821 std::string reason = "vkCreateGraphicsPipeline parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pCbState->pAttachments->channelWriteMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004822 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Tony Barboure307f582015-07-10 15:29:03 -06004823=======
4824 std::string reason = "vkCreateGraphicsPipeline parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask);
4825 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4826>>>>>>> fd61c93... Bug 14224: Remove abbreviations on some API symbols
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004827 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004828 }
4829 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
4830 {
4831 std::string reason = "vkCreateGraphicsPipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
Tony Barboure307f582015-07-10 15:29:03 -06004832<<<<<<< HEAD
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004833 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4834 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004835 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004836 if(pCreateInfo->layout.handle == 0)
Tony Barboure307f582015-07-10 15:29:03 -06004837=======
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
4845bool PostCreateGraphicsPipeline(
4846 VkDevice device,
4847 VkPipeline* pPipeline,
4848 VkResult result)
4849{
4850
4851 if(pPipeline == nullptr)
4852 {
4853 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4854 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
4855 return false;
4856 }
4857
4858 if(result != VK_SUCCESS)
4859 {
4860 std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
4861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4862 return false;
4863 }
4864
4865 return true;
4866}
4867
4868VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(
4869 VkDevice device,
4870 const VkGraphicsPipelineCreateInfo* pCreateInfo,
4871 VkPipeline* pPipeline)
4872{
4873 PreCreateGraphicsPipeline(device, pCreateInfo);
4874
4875 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
4876
4877 PostCreateGraphicsPipeline(device, pPipeline, result);
4878
4879 return result;
4880}
4881
4882bool PostDestroyPipeline(
4883 VkDevice device,
4884 VkPipeline pipeline,
4885 VkResult result)
4886{
4887
4888
4889 if(result != VK_SUCCESS)
4890 {
4891 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
4892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4893 return false;
4894 }
4895
4896 return true;
4897}
4898
4899VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
4900 VkDevice device,
4901 VkPipeline pipeline)
4902{
4903 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
4904
4905 PostDestroyPipeline(device, pipeline, result);
4906
4907 return result;
4908}
4909
4910bool PreCreateGraphicsPipelineDerivative(
4911 VkDevice device,
4912 const VkGraphicsPipelineCreateInfo* pCreateInfo)
4913{
4914 if(pCreateInfo == nullptr)
4915 {
4916 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4917 "vkCreateGraphicsPipelineDerivative parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer");
4918 return false;
4919 }
4920 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4921 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4922 {
4923 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4924 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4925 return false;
4926 }
4927 if(pCreateInfo->pStages == nullptr)
4928 {
4929 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4930 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer");
4931 return false;
4932 }
4933 if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4934 pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE)
4935 {
4936 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4937 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator");
4938 return false;
4939 }
4940 if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4941 pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4942 {
4943 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4944 "vkCreateGraphicsPipelineDerivative parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator");
4945 return false;
4946 }
4947 if(pCreateInfo->pStages->pSpecializationInfo == nullptr)
4948 {
4949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4950 "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer");
4951 return false;
4952 }
4953 if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr)
4954 {
4955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4956 "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer");
4957 return false;
4958 }
4959 if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr)
4960 {
4961 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4962 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer");
4963 return false;
4964 }
4965 if(pCreateInfo->pVertexInputState == nullptr)
4966 {
4967 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4968 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer");
4969 return false;
4970 }
4971 if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4972 pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4973 {
4974 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4975 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator");
4976 return false;
4977 }
4978 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr)
4979 {
4980 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4981 "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer");
4982 return false;
4983 }
4984 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4985 pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4986 {
4987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4988 "vkCreateGraphicsPipelineDerivative parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator");
4989 return false;
4990 }
4991 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr)
4992 {
4993 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4994 "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer");
4995 return false;
4996 }
4997 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4998 pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4999 {
5000 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5001 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator");
5002 return false;
5003 }
5004 if(pCreateInfo->pInputAssemblyState == nullptr)
5005 {
5006 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5007 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer");
5008 return false;
5009 }
5010 if(pCreateInfo->pInputAssemblyState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5011 pCreateInfo->pInputAssemblyState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5012 {
5013 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5014 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator");
5015 return false;
5016 }
5017 if(pCreateInfo->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
5018 pCreateInfo->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
5019 {
5020 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5021 "vkCreateGraphicsPipelineDerivative parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator");
5022 return false;
5023 }
5024 if(pCreateInfo->pTessellationState == nullptr)
5025 {
5026 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5027 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer");
5028 return false;
5029 }
5030 if(pCreateInfo->pTessellationState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5031 pCreateInfo->pTessellationState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5032 {
5033 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5034 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator");
5035 return false;
5036 }
5037 if(pCreateInfo->pViewportState == nullptr)
5038 {
5039 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5040 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer");
5041 return false;
5042 }
5043 if(pCreateInfo->pViewportState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5044 pCreateInfo->pViewportState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5045 {
5046 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5047 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator");
5048 return false;
5049 }
5050 if(pCreateInfo->pViewportState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
5051 pCreateInfo->pViewportState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
5052 {
5053 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5054 "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator");
5055 return false;
5056 }
5057 if(pCreateInfo->pViewportState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE ||
5058 pCreateInfo->pViewportState->depthMode > VK_DEPTH_MODE_END_RANGE)
5059 {
5060 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5061 "vkCreateGraphicsPipelineDerivative parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator");
5062 return false;
5063 }
5064 if(pCreateInfo->pRasterState == nullptr)
5065 {
5066 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5067 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer");
5068 return false;
5069 }
5070 if(pCreateInfo->pRasterState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5071 pCreateInfo->pRasterState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5072 {
5073 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5074 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator");
5075 return false;
5076 }
5077 if(pCreateInfo->pRasterState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
5078 pCreateInfo->pRasterState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
5079 {
5080 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5081 "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator");
5082 return false;
5083 }
5084 if(pCreateInfo->pRasterState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE ||
5085 pCreateInfo->pRasterState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE)
5086 {
5087 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5088 "vkCreateGraphicsPipelineDerivative parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator");
5089 return false;
5090 }
5091 if(pCreateInfo->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
5092 pCreateInfo->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
5093 {
5094 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5095 "vkCreateGraphicsPipelineDerivative parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator");
5096 return false;
5097 }
5098 if(pCreateInfo->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
5099 pCreateInfo->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
5100 {
5101 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5102 "vkCreateGraphicsPipelineDerivative parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator");
5103 return false;
5104 }
5105 if(pCreateInfo->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
5106 pCreateInfo->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
5107 {
5108 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5109 "vkCreateGraphicsPipelineDerivative parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator");
5110 return false;
5111 }
5112 if(pCreateInfo->pMultisampleState == nullptr)
5113 {
5114 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5115 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer");
5116 return false;
5117 }
5118 if(pCreateInfo->pMultisampleState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5119 pCreateInfo->pMultisampleState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5120 {
5121 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5122 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator");
5123 return false;
5124 }
5125 if(pCreateInfo->pDepthStencilState == nullptr)
5126 {
5127 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5128 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer");
5129 return false;
5130 }
5131 if(pCreateInfo->pDepthStencilState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5132 pCreateInfo->pDepthStencilState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5133 {
5134 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5135 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
5136 return false;
5137 }
5138 if(pCreateInfo->pDepthStencilState->format < VK_FORMAT_BEGIN_RANGE ||
5139 pCreateInfo->pDepthStencilState->format > VK_FORMAT_END_RANGE)
5140 {
5141 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5142 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pDsState->format, is unrecognized enumerator");
5143 return false;
5144 }
5145 if(pCreateInfo->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5146 pCreateInfo->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
5147 {
5148 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5149 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
5150 return false;
5151 }
5152 if(pCreateInfo->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5153 pCreateInfo->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
5154 {
5155 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5156 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator");
5157 return false;
5158 }
5159 if(pCreateInfo->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
5160 pCreateInfo->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5161 {
5162 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5163 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator");
5164 return false;
5165 }
5166 if(pCreateInfo->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5167 pCreateInfo->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5168 {
5169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5170 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator");
5171 return false;
5172 }
5173 if(pCreateInfo->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5174 pCreateInfo->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5175 {
5176 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5177 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator");
5178 return false;
5179 }
5180 if(pCreateInfo->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5181 pCreateInfo->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
5182 {
5183 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5184 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator");
5185 return false;
5186 }
5187 if(pCreateInfo->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
5188 pCreateInfo->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5189 {
5190 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5191 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator");
5192 return false;
5193 }
5194 if(pCreateInfo->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5195 pCreateInfo->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5196 {
5197 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5198 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator");
5199 return false;
5200 }
5201 if(pCreateInfo->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5202 pCreateInfo->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5203 {
5204 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5205 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator");
5206 return false;
5207 }
5208 if(pCreateInfo->pColorBlendState == nullptr)
5209 {
5210 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5211 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer");
5212 return false;
5213 }
5214 if(pCreateInfo->pColorBlendState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5215 pCreateInfo->pColorBlendState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5216 {
5217 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5218 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator");
5219 return false;
5220 }
5221 if(pCreateInfo->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
5222 pCreateInfo->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
5223 {
5224 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5225 "vkCreateGraphicsPipelineDerivative parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator");
5226 return false;
5227 }
5228 if(pCreateInfo->pColorBlendState->pAttachments == nullptr)
5229 {
5230 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5231 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer");
5232 return false;
5233 }
5234 if(pCreateInfo->pColorBlendState->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5235 pCreateInfo->pColorBlendState->pAttachments->format > VK_FORMAT_END_RANGE)
5236 {
5237 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5238 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator");
5239 return false;
5240 }
5241 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
5242 pCreateInfo->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
5243 {
5244 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5245 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator");
5246 return false;
5247 }
5248 if(pCreateInfo->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
5249 pCreateInfo->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
5250 {
5251 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5252 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator");
5253 return false;
5254 }
5255 if(pCreateInfo->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
5256 pCreateInfo->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
5257 {
5258 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5259 "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator");
5260 return false;
5261 }
5262 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5263 pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
5264 {
5265 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5266 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator");
5267 return false;
5268 }
5269 if(pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5270 pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
5271 {
5272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5273 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator");
5274 return false;
5275 }
5276 if(pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
5277 pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
5278 {
5279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5280 "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator");
5281 return false;
5282 }
5283 if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask))
5284 {
5285 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask);
5286 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5287 return false;
5288 }
5289 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5290 {
5291 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5292 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5293 return false;
5294 }
5295
5296 return true;
5297}
5298
5299bool PostCreateGraphicsPipelineDerivative(
5300 VkDevice device,
5301 VkPipeline basePipeline,
5302 VkPipeline* pPipeline,
5303 VkResult result)
5304{
5305
5306
5307 if(pPipeline == nullptr)
5308 {
5309 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5310 "vkCreateGraphicsPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer");
5311 return false;
5312 }
5313
5314 if(result != VK_SUCCESS)
5315 {
5316 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkResult result, is " + EnumeratorString(result);
5317 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5318 return false;
5319 }
5320
5321 return true;
5322}
5323
5324VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(
5325 VkDevice device,
5326 const VkGraphicsPipelineCreateInfo* pCreateInfo,
5327 VkPipeline basePipeline,
5328 VkPipeline* pPipeline)
5329{
5330 PreCreateGraphicsPipelineDerivative(device, pCreateInfo);
5331
5332 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
5333
5334 PostCreateGraphicsPipelineDerivative(device, basePipeline, pPipeline, result);
5335
5336 return result;
5337}
5338
5339bool PreCreateComputePipeline(
5340 VkDevice device,
5341 const VkComputePipelineCreateInfo* pCreateInfo)
5342{
5343 if(pCreateInfo == nullptr)
5344 {
5345 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5346 "vkCreateComputePipeline parameter, const VkComputePipelineCreateInfo* pCreateInfo, is null pointer");
5347 return false;
5348 }
5349 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5350 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5351 {
5352 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5353 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5354 return false;
5355 }
5356 if(pCreateInfo->cs.sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5357 pCreateInfo->cs.sType > VK_STRUCTURE_TYPE_END_RANGE)
5358 {
5359 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5360 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->cs.sType, is unrecognized enumerator");
5361 return false;
5362 }
5363 if(pCreateInfo->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5364 pCreateInfo->cs.stage > VK_SHADER_STAGE_END_RANGE)
5365 {
5366 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5367 "vkCreateComputePipeline parameter, VkShaderStage pCreateInfo->cs.stage, is unrecognized enumerator");
5368 return false;
5369 }
5370 if(pCreateInfo->cs.pSpecializationInfo == nullptr)
5371 {
5372 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5373 "vkCreateComputePipeline parameter, const VkSpecializationInfo* pCreateInfo->cs.pSpecializationInfo, is null pointer");
5374 return false;
5375 }
5376 if(pCreateInfo->cs.pSpecializationInfo->pMap == nullptr)
5377 {
5378 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5379 "vkCreateComputePipeline parameter, const VkSpecializationMapEntry* pCreateInfo->cs.pSpecializationInfo->pMap, is null pointer");
5380 return false;
5381 }
5382 if(pCreateInfo->cs.pSpecializationInfo->pData == nullptr)
5383 {
5384 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5385 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pSpecializationInfo->pData, is null pointer");
5386 return false;
5387 }
5388 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5389 {
5390 std::string reason = "vkCreateComputePipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5391 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5392 return false;
5393 }
5394
5395 return true;
5396}
5397
5398bool PostCreateComputePipeline(
5399 VkDevice device,
5400 VkPipeline* pPipeline,
5401 VkResult result)
5402{
5403
5404 if(pPipeline == nullptr)
5405 {
5406 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5407 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5408 return false;
5409 }
5410
5411 if(result != VK_SUCCESS)
5412>>>>>>> fd61c93... Bug 14224: Remove abbreviations on some API symbols
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005413 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005414 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005415 "vkCreateGraphicsPipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005416 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005417 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005418
5419 return true;
5420}
5421
5422bool PostDestroyPipeline(
5423 VkDevice device,
5424 VkPipeline pipeline,
5425 VkResult result)
5426{
5427 if(result != VK_SUCCESS)
5428 {
5429 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
5430 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5431 return false;
5432 }
5433
5434 return true;
5435}
5436
5437VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5438 VkDevice device,
5439 VkPipeline pipeline)
5440{
5441 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5442
5443 PostDestroyPipeline(device, pipeline, result);
5444
5445 return result;
5446}
5447
5448bool PostCreateGraphicsPipeline(
5449 VkDevice device,
5450 VkPipeline* pPipeline,
5451 VkResult result)
5452{
5453
5454 if(pPipeline == nullptr)
5455 {
5456 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5457 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5458 return false;
5459 }
5460
5461 if(result != VK_SUCCESS)
5462 {
5463 std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
5464 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5465 return false;
5466 }
5467
5468 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005469}
5470
Jon Ashburn0d60d272015-07-09 15:02:25 -06005471//TODO handle count > 1
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005472void PostCreateGraphicsPipeline(
5473 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005474 uint32_t count,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005475 VkPipeline* pPipeline,
5476 VkResult result)
5477{
5478 if(device == nullptr)
5479 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005480 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005481 "vkCreateGraphicsPipeline parameter, VkDevice device, is null pointer");
5482 return;
5483 }
5484
5485 if(pPipeline == nullptr)
5486 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005487 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005488 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5489 return;
5490 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005491 if((*pPipeline).handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005492 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005493 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005494 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5495 return;
5496 }
5497
5498 if(result != VK_SUCCESS)
5499 {
5500 std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005501 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 -06005502 return;
5503 }
5504}
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005505
Jon Ashburn0d60d272015-07-09 15:02:25 -06005506//TODO add intercept of pipelineCache entrypoints
5507VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005508 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005509 VkPipelineCache pipelineCache,
5510 uint32_t count,
5511 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5512 VkPipeline* pPipelines)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005513{
Jon Ashburn0d60d272015-07-09 15:02:25 -06005514 PreCreateGraphicsPipeline(device, count, pCreateInfos);
5515 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005516
Jon Ashburn0d60d272015-07-09 15:02:25 -06005517 PostCreateGraphicsPipeline(device, count, pPipelines, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005518
5519 return result;
5520}
5521
Jon Ashburn0d60d272015-07-09 15:02:25 -06005522//TODO handle count > 1
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005523void PreCreateComputePipeline(
5524 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005525 uint32_t count,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005526 const VkComputePipelineCreateInfo* pCreateInfo)
5527{
5528 if(device == nullptr)
5529 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005530 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005531 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5532 return;
5533 }
5534
5535 if(pCreateInfo == nullptr)
5536 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005537 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005538 "vkCreateComputePipeline parameter, const VkComputePipelineCreateInfo* pCreateInfo, is null pointer");
5539 return;
5540 }
5541 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5542 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5543 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005544 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005545 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5546 return;
5547 }
5548 if(pCreateInfo->cs.sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5549 pCreateInfo->cs.sType > VK_STRUCTURE_TYPE_END_RANGE)
5550 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005551 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005552 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->cs.sType, is unrecognized enumerator");
5553 return;
5554 }
5555 if(pCreateInfo->cs.pNext == nullptr)
5556 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005557 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005558 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pNext, is null pointer");
5559 return;
5560 }
5561 if(pCreateInfo->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5562 pCreateInfo->cs.stage > VK_SHADER_STAGE_END_RANGE)
5563 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005564 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005565 "vkCreateComputePipeline parameter, VkShaderStage pCreateInfo->cs.stage, is unrecognized enumerator");
5566 return;
5567 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005568 if(pCreateInfo->cs.shader.handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005569 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005570 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005571 "vkCreateComputePipeline parameter, VkShader pCreateInfo->cs.shader, is null pointer");
5572 return;
5573 }
5574 if(pCreateInfo->cs.pLinkConstBufferInfo == nullptr)
5575 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005576 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005577 "vkCreateComputePipeline parameter, const VkLinkConstBuffer* pCreateInfo->cs.pLinkConstBufferInfo, is null pointer");
5578 return;
5579 }
5580 if(pCreateInfo->cs.pLinkConstBufferInfo->pBufferData == nullptr)
5581 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005582 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005583 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pLinkConstBufferInfo->pBufferData, is null pointer");
5584 return;
5585 }
5586 if(pCreateInfo->cs.pSpecializationInfo == nullptr)
5587 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005588 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005589 "vkCreateComputePipeline parameter, const VkSpecializationInfo* pCreateInfo->cs.pSpecializationInfo, is null pointer");
5590 return;
5591 }
5592 if(pCreateInfo->cs.pSpecializationInfo->pMap == nullptr)
5593 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005594 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005595 "vkCreateComputePipeline parameter, const VkSpecializationMapEntry* pCreateInfo->cs.pSpecializationInfo->pMap, is null pointer");
5596 return;
5597 }
5598 if(pCreateInfo->cs.pSpecializationInfo->pData == nullptr)
5599 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005600 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005601 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pSpecializationInfo->pData, is null pointer");
5602 return;
5603 }
5604 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5605 {
5606 std::string reason = "vkCreateComputePipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005607 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 -06005608 return;
5609 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005610 if(pCreateInfo->layout.handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005611 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005612 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005613 "vkCreateComputePipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
5614 return;
5615 }
5616}
5617
Jon Ashburn0d60d272015-07-09 15:02:25 -06005618//TODO handle count > 1
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005619void PostCreateComputePipeline(
5620 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005621 uint32_t count,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005622 VkPipeline* pPipeline,
5623 VkResult result)
5624{
5625 if(device == nullptr)
5626 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005627 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005628 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5629 return;
5630 }
5631
5632 if(pPipeline == nullptr)
5633 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005634 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005635 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5636 return;
5637 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005638 if((*pPipeline).handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005639 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005640 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005641 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5642 return;
5643 }
5644
5645 if(result != VK_SUCCESS)
5646 {
5647 std::string reason = "vkCreateComputePipeline parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005648 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 -06005649 return;
5650 }
5651}
5652
Jon Ashburn0d60d272015-07-09 15:02:25 -06005653VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005654 VkDevice device,
Jon Ashburn0d60d272015-07-09 15:02:25 -06005655 VkPipelineCache pipelineCache,
5656 uint32_t count,
5657 const VkComputePipelineCreateInfo* pCreateInfos,
5658 VkPipeline* pPipelines)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005659{
Jon Ashburn0d60d272015-07-09 15:02:25 -06005660 PreCreateComputePipeline(device, count, pCreateInfos);
5661 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005662
Jon Ashburn0d60d272015-07-09 15:02:25 -06005663 PostCreateComputePipeline(device, count, pPipelines, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005664
5665 return result;
5666}
5667
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005668void PreCreatePipelineLayout(
5669 VkDevice device,
5670 const VkPipelineLayoutCreateInfo* pCreateInfo)
5671{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005672 if(pCreateInfo == nullptr)
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 "vkCreatePipelineLayout parameter, const VkPipelineLayoutCreateInfo* pCreateInfo, is null pointer");
5676 return;
5677 }
5678 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5679 pCreateInfo->sType > VK_STRUCTURE_TYPE_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 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5683 return;
5684 }
5685 if(pCreateInfo->pSetLayouts == nullptr)
5686 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005687 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005688 "vkCreatePipelineLayout parameter, const VkDescriptorSetLayout* pCreateInfo->pSetLayouts, is null pointer");
5689 return;
5690 }
5691}
5692
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005693bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005694 VkDevice device,
5695 VkPipelineLayout* pPipelineLayout,
5696 VkResult result)
5697{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005698
5699 if(pPipelineLayout == nullptr)
5700 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005701 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005702 "vkCreatePipelineLayout parameter, VkPipelineLayout* pPipelineLayout, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005703 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005704 }
5705
5706 if(result != VK_SUCCESS)
5707 {
5708 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5710 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005711 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005712
5713 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005714}
5715
5716VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5717 VkDevice device,
5718 const VkPipelineLayoutCreateInfo* pCreateInfo,
5719 VkPipelineLayout* pPipelineLayout)
5720{
5721 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005722
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005723 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5724
5725 PostCreatePipelineLayout(device, pPipelineLayout, result);
5726
5727 return result;
5728}
5729
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005730bool PostDestroyPipelineLayout(
5731 VkDevice device,
5732 VkPipelineLayout pipelineLayout,
5733 VkResult result)
5734{
5735
5736
5737 if(result != VK_SUCCESS)
5738 {
5739 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5740 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5741 return false;
5742 }
5743
5744 return true;
5745}
5746
5747VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5748 VkDevice device,
5749 VkPipelineLayout pipelineLayout)
5750{
5751 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5752
5753 PostDestroyPipelineLayout(device, pipelineLayout, result);
5754
5755 return result;
5756}
5757
5758bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005759 VkDevice device,
5760 const VkSamplerCreateInfo* pCreateInfo)
5761{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005762 if(pCreateInfo == nullptr)
5763 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005764 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005765 "vkCreateSampler parameter, const VkSamplerCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005766 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005767 }
5768 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5769 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5770 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005771 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005773 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005774 }
5775 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5776 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5777 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005778 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005779 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005780 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005781 }
5782 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5783 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5784 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005785 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005786 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005787 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005788 }
5789 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5790 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5791 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005792 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005793 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005794 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005795 }
5796 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5797 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5798 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005799 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005800 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005801 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802 }
5803 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5804 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5805 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005806 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005808 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005809 }
5810 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5811 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5812 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005813 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005814 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005815 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005816 }
5817 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5818 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5819 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005820 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005821 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005822 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005823 }
5824 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5825 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5826 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005827 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005828 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005829 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005830 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005831
5832 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005833}
5834
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005835bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005836 VkDevice device,
5837 VkSampler* pSampler,
5838 VkResult result)
5839{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005840
5841 if(pSampler == nullptr)
5842 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005843 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005844 "vkCreateSampler parameter, VkSampler* pSampler, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005845 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005846 }
5847
5848 if(result != VK_SUCCESS)
5849 {
5850 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005851 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5852 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005853 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005854
5855 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005856}
5857
5858VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5859 VkDevice device,
5860 const VkSamplerCreateInfo* pCreateInfo,
5861 VkSampler* pSampler)
5862{
5863 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005864
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005865 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5866
5867 PostCreateSampler(device, pSampler, result);
5868
5869 return result;
5870}
5871
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005872bool PostDestroySampler(
5873 VkDevice device,
5874 VkSampler sampler,
5875 VkResult result)
5876{
5877
5878
5879 if(result != VK_SUCCESS)
5880 {
5881 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5882 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5883 return false;
5884 }
5885
5886 return true;
5887}
5888
5889VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5890 VkDevice device,
5891 VkSampler sampler)
5892{
5893 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5894
5895 PostDestroySampler(device, sampler, result);
5896
5897 return result;
5898}
5899
5900bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005901 VkDevice device,
5902 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5903{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005904 if(pCreateInfo == nullptr)
5905 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005906 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005907 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005908 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005909 }
5910 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5911 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
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 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005915 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005916 }
5917 if(pCreateInfo->pBinding == nullptr)
5918 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005919 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005920 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutBinding* pCreateInfo->pBinding, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005921 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005922 }
5923 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5924 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5925 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005926 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005927 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005928 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005929 }
5930 if(!ValidateEnumerator((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags))
5931 {
5932 std::string reason = "vkCreateDescriptorSetLayout parameter, VkShaderStageFlags pCreateInfo->pBinding->stageFlags, is " + EnumeratorString((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005933 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5934 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005935 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005936
5937 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005938}
5939
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005940bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005941 VkDevice device,
5942 VkDescriptorSetLayout* pSetLayout,
5943 VkResult result)
5944{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005945
5946 if(pSetLayout == nullptr)
5947 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005948 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005949 "vkCreateDescriptorSetLayout parameter, VkDescriptorSetLayout* pSetLayout, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005950 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005951 }
5952
5953 if(result != VK_SUCCESS)
5954 {
5955 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005956 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5957 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005958 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005959
5960 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005961}
5962
5963VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5964 VkDevice device,
5965 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5966 VkDescriptorSetLayout* pSetLayout)
5967{
5968 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005969
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005970 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5971
5972 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5973
5974 return result;
5975}
5976
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005977bool PostDestroyDescriptorSetLayout(
5978 VkDevice device,
5979 VkDescriptorSetLayout descriptorSetLayout,
5980 VkResult result)
5981{
5982
5983
5984 if(result != VK_SUCCESS)
5985 {
5986 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5988 return false;
5989 }
5990
5991 return true;
5992}
5993
5994VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5995 VkDevice device,
5996 VkDescriptorSetLayout descriptorSetLayout)
5997{
5998 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5999
6000 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
6001
6002 return result;
6003}
6004
6005bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006006 VkDevice device,
6007 const VkDescriptorPoolCreateInfo* pCreateInfo)
6008{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006009 if(pCreateInfo == nullptr)
6010 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006011 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006012 "vkCreateDescriptorPool parameter, const VkDescriptorPoolCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006013 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006014 }
6015 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6016 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6017 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006018 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006019 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006020 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006021 }
6022 if(pCreateInfo->pTypeCount == nullptr)
6023 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006024 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006025 "vkCreateDescriptorPool parameter, const VkDescriptorTypeCount* pCreateInfo->pTypeCount, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006026 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006027 }
6028 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
6029 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
6030 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006031 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006032 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006033 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006034 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006035
6036 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006037}
6038
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006039bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006040 VkDevice device,
6041 VkDescriptorPoolUsage poolUsage,
6042 uint32_t maxSets,
6043 VkDescriptorPool* pDescriptorPool,
6044 VkResult result)
6045{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046
6047 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
6048 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
6049 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006050 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006051 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006052 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006053 }
6054
6055
6056 if(pDescriptorPool == nullptr)
6057 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006058 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006059 "vkCreateDescriptorPool parameter, VkDescriptorPool* pDescriptorPool, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006060 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006061 }
6062
6063 if(result != VK_SUCCESS)
6064 {
6065 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006066 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6067 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006068 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006069
6070 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006071}
6072
6073VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
6074 VkDevice device,
6075 VkDescriptorPoolUsage poolUsage,
6076 uint32_t maxSets,
6077 const VkDescriptorPoolCreateInfo* pCreateInfo,
6078 VkDescriptorPool* pDescriptorPool)
6079{
6080 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006081
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006082 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
6083
6084 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
6085
6086 return result;
6087}
6088
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006089bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006090 VkDevice device,
6091 VkDescriptorPool descriptorPool,
6092 VkResult result)
6093{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006094
6095
6096 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006097 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006098 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
6099 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6100 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006101 }
6102
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006103 return true;
6104}
6105
6106VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
6107 VkDevice device,
6108 VkDescriptorPool descriptorPool)
6109{
6110 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
6111
6112 PostDestroyDescriptorPool(device, descriptorPool, result);
6113
6114 return result;
6115}
6116
6117bool PostResetDescriptorPool(
6118 VkDevice device,
6119 VkDescriptorPool descriptorPool,
6120 VkResult result)
6121{
6122
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006123
6124 if(result != VK_SUCCESS)
6125 {
6126 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006127 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6128 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006129 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006130
6131 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006132}
6133
6134VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
6135 VkDevice device,
6136 VkDescriptorPool descriptorPool)
6137{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006138 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
6139
6140 PostResetDescriptorPool(device, descriptorPool, result);
6141
6142 return result;
6143}
6144
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006145bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006146 VkDevice device,
6147 const VkDescriptorSetLayout* pSetLayouts)
6148{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006149 if(pSetLayouts == 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 "vkAllocDescriptorSets parameter, const VkDescriptorSetLayout* pSetLayouts, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006153 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006154 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006155
6156 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006157}
6158
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006159bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006160 VkDevice device,
6161 VkDescriptorPool descriptorPool,
6162 VkDescriptorSetUsage setUsage,
6163 uint32_t count,
6164 VkDescriptorSet* pDescriptorSets,
6165 uint32_t* pCount,
6166 VkResult result)
6167{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006168
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006169
6170 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
6171 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
6172 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006173 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006174 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006175 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006176 }
6177
6178
6179 if(pDescriptorSets == nullptr)
6180 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006181 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006182 "vkAllocDescriptorSets parameter, VkDescriptorSet* pDescriptorSets, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006183 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006184 }
6185
6186 if(pCount == nullptr)
6187 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006188 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006189 "vkAllocDescriptorSets parameter, uint32_t* pCount, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006190 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006191 }
6192
6193 if(result != VK_SUCCESS)
6194 {
6195 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006196 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6197 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006198 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006199
6200 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006201}
6202
6203VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
6204 VkDevice device,
6205 VkDescriptorPool descriptorPool,
6206 VkDescriptorSetUsage setUsage,
6207 uint32_t count,
6208 const VkDescriptorSetLayout* pSetLayouts,
6209 VkDescriptorSet* pDescriptorSets,
6210 uint32_t* pCount)
6211{
6212 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006213
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006214 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
6215
6216 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, pCount, result);
6217
6218 return result;
6219}
6220
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006221bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006222 VkDevice device,
6223 const VkWriteDescriptorSet* pDescriptorWrites,
6224 const VkCopyDescriptorSet* pDescriptorCopies)
6225{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006226 if(pDescriptorWrites == nullptr)
6227 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006228 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006229 "vkUpdateDescriptorSets parameter, const VkWriteDescriptorSet* pDescriptorWrites, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006230 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006231 }
6232 if(pDescriptorWrites->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6233 pDescriptorWrites->sType > VK_STRUCTURE_TYPE_END_RANGE)
6234 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006236 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006237 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006238 }
6239 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
6240 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
6241 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006243 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006244 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006245 }
6246 if(pDescriptorWrites->pDescriptors == nullptr)
6247 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006248 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006249 "vkUpdateDescriptorSets parameter, const VkDescriptorInfo* pDescriptorWrites->pDescriptors, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006250 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006251 }
6252 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6253 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6254 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006255 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006256 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006257 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006258 }
6259
6260 if(pDescriptorCopies == nullptr)
6261 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006262 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006263 "vkUpdateDescriptorSets parameter, const VkCopyDescriptorSet* pDescriptorCopies, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006264 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006265 }
6266 if(pDescriptorCopies->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6267 pDescriptorCopies->sType > VK_STRUCTURE_TYPE_END_RANGE)
6268 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006269 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006270 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006271 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006272 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006273
6274 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006275}
6276
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006277bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006278 VkDevice device,
6279 uint32_t writeCount,
6280 uint32_t copyCount,
6281 VkResult result)
6282{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006283
6284
6285
6286 if(result != VK_SUCCESS)
6287 {
6288 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006289 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6290 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006291 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006292
6293 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006294}
6295
6296VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
6297 VkDevice device,
6298 uint32_t writeCount,
6299 const VkWriteDescriptorSet* pDescriptorWrites,
6300 uint32_t copyCount,
6301 const VkCopyDescriptorSet* pDescriptorCopies)
6302{
6303 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006304
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006305 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
6306
6307 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
6308
6309 return result;
6310}
6311
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006312bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006313 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006314 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006315{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006316 if(pCreateInfo == nullptr)
6317 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006318 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6319 "vkCreateDynamicViewportState parameter, const VkDynamicViewportStateCreateInfo* pCreateInfo, is null pointer");
6320 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006321 }
6322 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6323 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6324 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006325 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006326 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006327 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006328 }
6329 if(pCreateInfo->pViewports == nullptr)
6330 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006331 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006332 "vkCreateDynamicViewportState parameter, const VkViewport* pCreateInfo->pViewports, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006333 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006334 }
6335 if(pCreateInfo->pScissors == nullptr)
6336 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006337 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6338 "vkCreateDynamicViewportState parameter, const VkRect2D* pCreateInfo->pScissors, is null pointer");
6339 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006340 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006341
6342 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006343}
6344
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006345bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006346 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006347 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006348 VkResult result)
6349{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006350
6351 if(pState == nullptr)
6352 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006353 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6354 "vkCreateDynamicViewportState parameter, VkDynamicViewportState* pState, is null pointer");
6355 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006356 }
6357
6358 if(result != VK_SUCCESS)
6359 {
6360 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006361 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6362 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006363 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006364
6365 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006366}
6367
6368VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
6369 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006370 const VkDynamicViewportStateCreateInfo* pCreateInfo,
6371 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006372{
6373 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006374
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006375 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
6376
6377 PostCreateDynamicViewportState(device, pState, result);
6378
6379 return result;
6380}
6381
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006382bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006383 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006384 VkDynamicViewportState dynamicViewportState,
6385 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006386{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006387
6388
6389 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006390 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006391 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
6392 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6393 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006394 }
6395
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006396 return true;
6397}
6398
6399VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
6400 VkDevice device,
6401 VkDynamicViewportState dynamicViewportState)
6402{
6403 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
6404
6405 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
6406
6407 return result;
6408}
6409
6410bool PreCreateDynamicRasterState(
6411 VkDevice device,
6412 const VkDynamicRasterStateCreateInfo* pCreateInfo)
6413{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006414 if(pCreateInfo == nullptr)
6415 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006416 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6417 "vkCreateDynamicRasterState parameter, const VkDynamicRasterStateCreateInfo* pCreateInfo, is null pointer");
6418 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006419 }
6420 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6421 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6422 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006423 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006424 "vkCreateDynamicRasterState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006425 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006426 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006427
6428 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006429}
6430
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006431bool PostCreateDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006432 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006433 VkDynamicRasterState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006434 VkResult result)
6435{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006436
6437 if(pState == nullptr)
6438 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006439 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6440 "vkCreateDynamicRasterState parameter, VkDynamicRasterState* pState, is null pointer");
6441 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006442 }
6443
6444 if(result != VK_SUCCESS)
6445 {
6446 std::string reason = "vkCreateDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006447 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6448 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006449 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006450
6451 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006452}
6453
6454VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(
6455 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006456 const VkDynamicRasterStateCreateInfo* pCreateInfo,
6457 VkDynamicRasterState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006458{
6459 PreCreateDynamicRasterState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006460
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006461 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterState(device, pCreateInfo, pState);
6462
6463 PostCreateDynamicRasterState(device, pState, result);
6464
6465 return result;
6466}
6467
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006468bool PostDestroyDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006469 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006470 VkDynamicRasterState dynamicRasterState,
6471 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006472{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006473
6474
6475 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006476 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006477 std::string reason = "vkDestroyDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
6478 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6479 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006480 }
6481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006482 return true;
6483}
6484
6485VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicRasterState(
6486 VkDevice device,
6487 VkDynamicRasterState dynamicRasterState)
6488{
6489 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicRasterState(device, dynamicRasterState);
6490
6491 PostDestroyDynamicRasterState(device, dynamicRasterState, result);
6492
6493 return result;
6494}
6495
6496bool PreCreateDynamicColorBlendState(
6497 VkDevice device,
6498 const VkDynamicColorBlendStateCreateInfo* pCreateInfo)
6499{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006500 if(pCreateInfo == nullptr)
6501 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006502 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6503 "vkCreateDynamicColorBlendState parameter, const VkDynamicColorBlendStateCreateInfo* pCreateInfo, is null pointer");
6504 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006505 }
6506 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6507 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6508 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006509 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006510 "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006511 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006512 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006513
6514 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006515}
6516
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006517bool PostCreateDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006518 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006519 VkDynamicColorBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006520 VkResult result)
6521{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006522
6523 if(pState == nullptr)
6524 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006525 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6526 "vkCreateDynamicColorBlendState parameter, VkDynamicColorBlendState* pState, is null pointer");
6527 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006528 }
6529
6530 if(result != VK_SUCCESS)
6531 {
6532 std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006533 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6534 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006535 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006536
6537 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006538}
6539
6540VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
6541 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006542 const VkDynamicColorBlendStateCreateInfo* pCreateInfo,
6543 VkDynamicColorBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006544{
6545 PreCreateDynamicColorBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006546
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006547 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState);
6548
6549 PostCreateDynamicColorBlendState(device, pState, result);
6550
6551 return result;
6552}
6553
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006554bool PostDestroyDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006555 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006556 VkDynamicColorBlendState dynamicColorBlendState,
6557 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006558{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006559
6560
6561 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006562 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006563 std::string reason = "vkDestroyDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
6564 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6565 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006566 }
6567
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006568 return true;
6569}
6570
6571VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicColorBlendState(
6572 VkDevice device,
6573 VkDynamicColorBlendState dynamicColorBlendState)
6574{
6575 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicColorBlendState(device, dynamicColorBlendState);
6576
6577 PostDestroyDynamicColorBlendState(device, dynamicColorBlendState, result);
6578
6579 return result;
6580}
6581
6582bool PreCreateDynamicDepthStencilState(
6583 VkDevice device,
6584 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo)
6585{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006586 if(pCreateInfo == nullptr)
6587 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006588 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6589 "vkCreateDynamicDepthStencilState parameter, const VkDynamicDepthStencilStateCreateInfo* pCreateInfo, is null pointer");
6590 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006591 }
6592 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6593 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6594 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006595 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006596 "vkCreateDynamicDepthStencilState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006597 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006598 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006599
6600 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006601}
6602
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006603bool PostCreateDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006604 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006605 VkDynamicDepthStencilState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006606 VkResult result)
6607{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006608
6609 if(pState == nullptr)
6610 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006611 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6612 "vkCreateDynamicDepthStencilState parameter, VkDynamicDepthStencilState* pState, is null pointer");
6613 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006614 }
6615
6616 if(result != VK_SUCCESS)
6617 {
6618 std::string reason = "vkCreateDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006619 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6620 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006621 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006622
6623 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006624}
6625
6626VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(
6627 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006628 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo,
6629 VkDynamicDepthStencilState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006630{
6631 PreCreateDynamicDepthStencilState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006632
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006633 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
6634
6635 PostCreateDynamicDepthStencilState(device, pState, result);
6636
6637 return result;
6638}
6639
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006640bool PostDestroyDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006641 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006642 VkDynamicDepthStencilState dynamicDepthStencilState,
6643 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006644{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006645
6646
6647 if(result != VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006648 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006649 std::string reason = "vkDestroyDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
6650 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6651 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006652 }
6653
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006654 return true;
6655}
6656
6657VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthStencilState(
6658 VkDevice device,
6659 VkDynamicDepthStencilState dynamicDepthStencilState)
6660{
6661 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthStencilState(device, dynamicDepthStencilState);
6662
6663 PostDestroyDynamicDepthStencilState(device, dynamicDepthStencilState, result);
6664
6665 return result;
6666}
6667
6668bool PreCreateCommandBuffer(
6669 VkDevice device,
6670 const VkCmdBufferCreateInfo* pCreateInfo)
6671{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006672 if(pCreateInfo == nullptr)
6673 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006674 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006675 "vkCreateCommandBuffer parameter, const VkCmdBufferCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006676 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006677 }
6678 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6679 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6680 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006681 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006682 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006683 return false;
6684 }
6685 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6686 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6687 {
6688 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6689 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is unrecognized enumerator");
6690 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006691 }
6692
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006693 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006694}
6695
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006696bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006697 VkDevice device,
6698 VkCmdBuffer* pCmdBuffer,
6699 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006700{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006701
6702 if(pCmdBuffer == nullptr)
6703 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006704 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006705 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006706 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006707 }
6708
6709 if(result != VK_SUCCESS)
6710 {
6711 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006712 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6713 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006714 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006715
6716 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006717}
6718
6719VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6720 VkDevice device,
6721 const VkCmdBufferCreateInfo* pCreateInfo,
6722 VkCmdBuffer* pCmdBuffer)
6723{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006724 PreCreateCommandBuffer(device, pCreateInfo);
6725
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006726 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6727
6728 PostCreateCommandBuffer(device, pCmdBuffer, result);
6729
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006730 return result;
6731}
6732
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006733bool PostDestroyCommandBuffer(
6734 VkDevice device,
6735 VkCmdBuffer commandBuffer,
6736 VkResult result)
6737{
6738
6739
6740 if(result != VK_SUCCESS)
6741 {
6742 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6743 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6744 return false;
6745 }
6746
6747 return true;
6748}
6749
6750VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6751 VkDevice device,
6752 VkCmdBuffer commandBuffer)
6753{
6754 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6755
6756 PostDestroyCommandBuffer(device, commandBuffer, result);
6757
6758 return result;
6759}
6760
6761bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006762 VkCmdBuffer cmdBuffer,
6763 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006764{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006765 if(pBeginInfo == nullptr)
6766 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006767 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006768 "vkBeginCommandBuffer parameter, const VkCmdBufferBeginInfo* pBeginInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006769 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006770 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006771 if(pBeginInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6772 pBeginInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6773 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006774 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006775 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006776 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006777 }
6778 if(!ValidateEnumerator((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags))
6779 {
6780 std::string reason = "vkBeginCommandBuffer parameter, VkCmdBufferOptimizeFlags pBeginInfo->flags, is " + EnumeratorString((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006781 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6782 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006783 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006784
6785 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006786}
6787
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006788bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006789 VkCmdBuffer cmdBuffer,
6790 VkResult result)
6791{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006792
6793 if(result != VK_SUCCESS)
6794 {
6795 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006796 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6797 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006798 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006799
6800 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006801}
6802
6803VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6804 VkCmdBuffer cmdBuffer,
6805 const VkCmdBufferBeginInfo* pBeginInfo)
6806{
6807 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006808
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006809 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6810
6811 PostBeginCommandBuffer(cmdBuffer, result);
6812
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006813 return result;
6814}
6815
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006816bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006817 VkCmdBuffer cmdBuffer,
6818 VkResult result)
6819{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006820
6821 if(result != VK_SUCCESS)
6822 {
6823 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006824 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6825 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006826 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006827
6828 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006829}
6830
6831VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6832 VkCmdBuffer cmdBuffer)
6833{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006834 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6835
6836 PostEndCommandBuffer(cmdBuffer, result);
6837
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006838 return result;
6839}
6840
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006841bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006842 VkCmdBuffer cmdBuffer,
6843 VkResult result)
6844{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006845
6846 if(result != VK_SUCCESS)
6847 {
6848 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006849 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6850 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006851 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006852
6853 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006854}
6855
6856VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
6857 VkCmdBuffer cmdBuffer)
6858{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006859 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer);
6860
6861 PostResetCommandBuffer(cmdBuffer, result);
6862
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006863 return result;
6864}
6865
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006866bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006867 VkCmdBuffer cmdBuffer,
6868 VkPipelineBindPoint pipelineBindPoint,
6869 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006870{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006871
6872 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6873 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6874 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006875 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006876 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006877 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006878 }
6879
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006880
6881 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006882}
6883
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006884VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6885 VkCmdBuffer cmdBuffer,
6886 VkPipelineBindPoint pipelineBindPoint,
6887 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006888{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006889 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6890
6891 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6892}
6893
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006894bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006895 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006896 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006897{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006898
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006899
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006900 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006901}
6902
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006903VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006904 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006905 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006906{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006907 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006908
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006909 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006910}
6911
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006912bool PostCmdBindDynamicRasterState(
6913 VkCmdBuffer cmdBuffer,
6914 VkDynamicRasterState dynamicRasterState)
6915{
6916
6917
6918 return true;
6919}
6920
6921VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicRasterState(
6922 VkCmdBuffer cmdBuffer,
6923 VkDynamicRasterState dynamicRasterState)
6924{
6925 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6926
6927 PostCmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6928}
6929
6930bool PostCmdBindDynamicColorBlendState(
6931 VkCmdBuffer cmdBuffer,
6932 VkDynamicColorBlendState dynamicColorBlendState)
6933{
6934
6935
6936 return true;
6937}
6938
6939VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicColorBlendState(
6940 VkCmdBuffer cmdBuffer,
6941 VkDynamicColorBlendState dynamicColorBlendState)
6942{
6943 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6944
6945 PostCmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6946}
6947
6948bool PostCmdBindDynamicDepthStencilState(
6949 VkCmdBuffer cmdBuffer,
6950 VkDynamicDepthStencilState dynamicDepthStencilState)
6951{
6952
6953
6954 return true;
6955}
6956
6957VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthStencilState(
6958 VkCmdBuffer cmdBuffer,
6959 VkDynamicDepthStencilState dynamicDepthStencilState)
6960{
6961 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6962
6963 PostCmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6964}
6965
6966bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006967 VkCmdBuffer cmdBuffer,
6968 const VkDescriptorSet* pDescriptorSets,
6969 const uint32_t* pDynamicOffsets)
6970{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006971 if(pDescriptorSets == nullptr)
6972 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006973 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006974 "vkCmdBindDescriptorSets parameter, const VkDescriptorSet* pDescriptorSets, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006975 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006976 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006977
6978
6979 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006980}
6981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006982bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006983 VkCmdBuffer cmdBuffer,
6984 VkPipelineBindPoint pipelineBindPoint,
6985 VkPipelineLayout layout,
6986 uint32_t firstSet,
6987 uint32_t setCount,
6988 uint32_t dynamicOffsetCount)
6989{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006990
6991 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6992 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6993 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006994 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006995 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006996 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006997 }
6998
6999
7000
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007001
7002
7003 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007004}
7005
7006VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
7007 VkCmdBuffer cmdBuffer,
7008 VkPipelineBindPoint pipelineBindPoint,
7009 VkPipelineLayout layout,
7010 uint32_t firstSet,
7011 uint32_t setCount,
7012 const VkDescriptorSet* pDescriptorSets,
7013 uint32_t dynamicOffsetCount,
7014 const uint32_t* pDynamicOffsets)
7015{
7016 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007017
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007018 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
7019
7020 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
7021}
7022
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007023bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007024 VkCmdBuffer cmdBuffer,
7025 VkBuffer buffer,
7026 VkDeviceSize offset,
7027 VkIndexType indexType)
7028{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007029
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007030
7031
7032 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
7033 indexType > VK_INDEX_TYPE_END_RANGE)
7034 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007035 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007036 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007037 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007038 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007039
7040 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007041}
7042
7043VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
7044 VkCmdBuffer cmdBuffer,
7045 VkBuffer buffer,
7046 VkDeviceSize offset,
7047 VkIndexType indexType)
7048{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007049 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7050
7051 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7052}
7053
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007054bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007055 VkCmdBuffer cmdBuffer,
7056 const VkBuffer* pBuffers,
7057 const VkDeviceSize* pOffsets)
7058{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007059 if(pBuffers == nullptr)
7060 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007061 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007062 "vkCmdBindVertexBuffers parameter, const VkBuffer* pBuffers, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007063 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007064 }
7065
7066 if(pOffsets == nullptr)
7067 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007068 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007069 "vkCmdBindVertexBuffers parameter, const VkDeviceSize* pOffsets, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007070 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007071 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007072
7073 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007074}
7075
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007076bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007077 VkCmdBuffer cmdBuffer,
7078 uint32_t startBinding,
7079 uint32_t bindingCount)
7080{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007081
7082
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007083
7084 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007085}
7086
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06007087VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007088 VkCmdBuffer cmdBuffer,
7089 uint32_t startBinding,
7090 uint32_t bindingCount,
7091 const VkBuffer* pBuffers,
7092 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007093{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007094 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007095
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007096 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
7097
7098 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007099}
7100
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007101bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007102 VkCmdBuffer cmdBuffer,
7103 uint32_t firstVertex,
7104 uint32_t vertexCount,
7105 uint32_t firstInstance,
7106 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007107{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007108
7109
7110
7111
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007112
7113 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007114}
7115
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007116VK_LAYER_EXPORT void VKAPI vkCmdDraw(
7117 VkCmdBuffer cmdBuffer,
7118 uint32_t firstVertex,
7119 uint32_t vertexCount,
7120 uint32_t firstInstance,
7121 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007122{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007123 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
7124
7125 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007126}
7127
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007128bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007129 VkCmdBuffer cmdBuffer,
7130 uint32_t firstIndex,
7131 uint32_t indexCount,
7132 int32_t vertexOffset,
7133 uint32_t firstInstance,
7134 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007135{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007136
7137
7138
7139
7140
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007141
7142 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007143}
7144
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007145VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7146 VkCmdBuffer cmdBuffer,
7147 uint32_t firstIndex,
7148 uint32_t indexCount,
7149 int32_t vertexOffset,
7150 uint32_t firstInstance,
7151 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007152{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007153 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7154
7155 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7156}
7157
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007158bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007159 VkCmdBuffer cmdBuffer,
7160 VkBuffer buffer,
7161 VkDeviceSize offset,
7162 uint32_t count,
7163 uint32_t stride)
7164{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007165
7166
7167
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007168
7169
7170 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007171}
7172
7173VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7174 VkCmdBuffer cmdBuffer,
7175 VkBuffer buffer,
7176 VkDeviceSize offset,
7177 uint32_t count,
7178 uint32_t stride)
7179{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007180 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7181
7182 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7183}
7184
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007185bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007186 VkCmdBuffer cmdBuffer,
7187 VkBuffer buffer,
7188 VkDeviceSize offset,
7189 uint32_t count,
7190 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007191{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007192
7193
7194
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007195
7196
7197 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007198}
7199
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007200VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7201 VkCmdBuffer cmdBuffer,
7202 VkBuffer buffer,
7203 VkDeviceSize offset,
7204 uint32_t count,
7205 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007206{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007207 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7208
7209 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7210}
7211
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007212bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007213 VkCmdBuffer cmdBuffer,
7214 uint32_t x,
7215 uint32_t y,
7216 uint32_t z)
7217{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007218
7219
7220
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007221
7222 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007223}
7224
7225VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7226 VkCmdBuffer cmdBuffer,
7227 uint32_t x,
7228 uint32_t y,
7229 uint32_t z)
7230{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007231 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7232
7233 PostCmdDispatch(cmdBuffer, x, y, z);
7234}
7235
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007236bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007237 VkCmdBuffer cmdBuffer,
7238 VkBuffer buffer,
7239 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007240{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007241
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007242
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007243
7244 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007245}
7246
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007247VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7248 VkCmdBuffer cmdBuffer,
7249 VkBuffer buffer,
7250 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007251{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007252 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7253
7254 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007255}
7256
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007257bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007258 VkCmdBuffer cmdBuffer,
7259 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007260{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007261 if(pRegions == nullptr)
7262 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007263 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007264 "vkCmdCopyBuffer parameter, const VkBufferCopy* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007265 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007266 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007267
7268 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007269}
7270
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007271bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007272 VkCmdBuffer cmdBuffer,
7273 VkBuffer srcBuffer,
7274 VkBuffer destBuffer,
7275 uint32_t regionCount)
7276{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007277
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007278
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007279
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007280
7281 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007282}
7283
7284VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7285 VkCmdBuffer cmdBuffer,
7286 VkBuffer srcBuffer,
7287 VkBuffer destBuffer,
7288 uint32_t regionCount,
7289 const VkBufferCopy* pRegions)
7290{
7291 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007292
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007293 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7294
7295 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7296}
7297
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007298bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007299 VkCmdBuffer cmdBuffer,
7300 const VkImageCopy* pRegions)
7301{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007302 if(pRegions == nullptr)
7303 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007304 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007305 "vkCmdCopyImage parameter, const VkImageCopy* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007306 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007307 }
7308 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7309 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7310 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007311 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007312 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007313 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007314 }
7315 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7316 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7317 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007318 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007319 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007320 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007321 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007322
7323 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007324}
7325
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007326bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007327 VkCmdBuffer cmdBuffer,
7328 VkImage srcImage,
7329 VkImageLayout srcImageLayout,
7330 VkImage destImage,
7331 VkImageLayout destImageLayout,
7332 uint32_t regionCount)
7333{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007334
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007335
7336 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7337 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7338 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007339 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007340 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007341 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007342 }
7343
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007344
7345 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7346 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7347 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007348 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007349 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007350 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007351 }
7352
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007353
7354 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007355}
7356
7357VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7358 VkCmdBuffer cmdBuffer,
7359 VkImage srcImage,
7360 VkImageLayout srcImageLayout,
7361 VkImage destImage,
7362 VkImageLayout destImageLayout,
7363 uint32_t regionCount,
7364 const VkImageCopy* pRegions)
7365{
7366 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007367
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007368 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7369
7370 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7371}
7372
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007373bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007374 VkCmdBuffer cmdBuffer,
7375 const VkImageBlit* pRegions)
7376{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007377 if(pRegions == nullptr)
7378 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007379 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007380 "vkCmdBlitImage parameter, const VkImageBlit* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007381 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007382 }
7383 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7384 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7385 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007386 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007387 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007388 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007389 }
7390 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7391 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7392 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007393 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007394 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007395 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007396 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007397
7398 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007399}
7400
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007401bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007402 VkCmdBuffer cmdBuffer,
7403 VkImage srcImage,
7404 VkImageLayout srcImageLayout,
7405 VkImage destImage,
7406 VkImageLayout destImageLayout,
7407 uint32_t regionCount,
7408 VkTexFilter filter)
7409{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007410
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007411
7412 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7413 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7414 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007415 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007416 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007417 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007418 }
7419
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007420
7421 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7422 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7423 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007424 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007425 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007426 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007427 }
7428
7429
7430 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7431 filter > VK_TEX_FILTER_END_RANGE)
7432 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007433 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007434 "vkCmdBlitImage parameter, VkTexFilter filter, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007435 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007436 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007437
7438 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007439}
7440
7441VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7442 VkCmdBuffer cmdBuffer,
7443 VkImage srcImage,
7444 VkImageLayout srcImageLayout,
7445 VkImage destImage,
7446 VkImageLayout destImageLayout,
7447 uint32_t regionCount,
7448 const VkImageBlit* pRegions,
7449 VkTexFilter filter)
7450{
7451 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007452
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007453 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7454
7455 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7456}
7457
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007458bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007459 VkCmdBuffer cmdBuffer,
7460 const VkBufferImageCopy* pRegions)
7461{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007462 if(pRegions == nullptr)
7463 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007464 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007465 "vkCmdCopyBufferToImage parameter, const VkBufferImageCopy* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007466 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007467 }
7468 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7469 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7470 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007471 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007472 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007473 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007474 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007475
7476 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007477}
7478
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007479bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007480 VkCmdBuffer cmdBuffer,
7481 VkBuffer srcBuffer,
7482 VkImage destImage,
7483 VkImageLayout destImageLayout,
7484 uint32_t regionCount)
7485{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007486
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007487
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007488
7489 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7490 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7491 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007492 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007493 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007494 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007495 }
7496
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007497
7498 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007499}
7500
7501VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7502 VkCmdBuffer cmdBuffer,
7503 VkBuffer srcBuffer,
7504 VkImage destImage,
7505 VkImageLayout destImageLayout,
7506 uint32_t regionCount,
7507 const VkBufferImageCopy* pRegions)
7508{
7509 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007510
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007511 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7512
7513 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7514}
7515
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007516bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007517 VkCmdBuffer cmdBuffer,
7518 const VkBufferImageCopy* pRegions)
7519{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007520 if(pRegions == nullptr)
7521 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007522 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007523 "vkCmdCopyImageToBuffer parameter, const VkBufferImageCopy* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007524 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007525 }
7526 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7527 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7528 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007529 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007530 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007531 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007532 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007533
7534 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007535}
7536
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007537bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007538 VkCmdBuffer cmdBuffer,
7539 VkImage srcImage,
7540 VkImageLayout srcImageLayout,
7541 VkBuffer destBuffer,
7542 uint32_t regionCount)
7543{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007544
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007545
7546 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7547 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7548 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007549 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007550 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007551 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007552 }
7553
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007554
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007555
7556 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007557}
7558
7559VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7560 VkCmdBuffer cmdBuffer,
7561 VkImage srcImage,
7562 VkImageLayout srcImageLayout,
7563 VkBuffer destBuffer,
7564 uint32_t regionCount,
7565 const VkBufferImageCopy* pRegions)
7566{
7567 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007568
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007569 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7570
7571 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7572}
7573
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007574bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007575 VkCmdBuffer cmdBuffer,
7576 const uint32_t* pData)
7577{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007578 if(pData == nullptr)
7579 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007580 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007581 "vkCmdUpdateBuffer parameter, const uint32_t* pData, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007582 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007583 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007584
7585 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007586}
7587
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007588bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007589 VkCmdBuffer cmdBuffer,
7590 VkBuffer destBuffer,
7591 VkDeviceSize destOffset,
7592 VkDeviceSize dataSize)
7593{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007594
7595
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007596
7597
7598 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007599}
7600
7601VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7602 VkCmdBuffer cmdBuffer,
7603 VkBuffer destBuffer,
7604 VkDeviceSize destOffset,
7605 VkDeviceSize dataSize,
7606 const uint32_t* pData)
7607{
7608 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007609
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007610 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7611
7612 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7613}
7614
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007615bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007616 VkCmdBuffer cmdBuffer,
7617 VkBuffer destBuffer,
7618 VkDeviceSize destOffset,
7619 VkDeviceSize fillSize,
7620 uint32_t data)
7621{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007622
7623
7624
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007625
7626
7627 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007628}
7629
7630VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7631 VkCmdBuffer cmdBuffer,
7632 VkBuffer destBuffer,
7633 VkDeviceSize destOffset,
7634 VkDeviceSize fillSize,
7635 uint32_t data)
7636{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007637 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7638
7639 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7640}
7641
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007642bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007643 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007644 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007645 const VkImageSubresourceRange* pRanges)
7646{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007647 if(pColor == nullptr)
7648 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007649 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7650 "vkCmdClearColorImage parameter, const VkClearColorValue* pColor, is null pointer");
7651 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007652 }
7653
7654 if(pRanges == nullptr)
7655 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007656 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007657 "vkCmdClearColorImage parameter, const VkImageSubresourceRange* pRanges, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007658 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007659 }
7660 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7661 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7662 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007663 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007664 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007665 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007666 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007667
7668 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007669}
7670
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007671bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007672 VkCmdBuffer cmdBuffer,
7673 VkImage image,
7674 VkImageLayout imageLayout,
7675 uint32_t rangeCount)
7676{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007677
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007678
7679 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7680 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7681 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007682 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007683 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007684 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007685 }
7686
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007687
7688 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007689}
7690
7691VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7692 VkCmdBuffer cmdBuffer,
7693 VkImage image,
7694 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007695 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007696 uint32_t rangeCount,
7697 const VkImageSubresourceRange* pRanges)
7698{
7699 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007700
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007701 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7702
7703 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7704}
7705
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007706bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007707 VkCmdBuffer cmdBuffer,
7708 const VkImageSubresourceRange* pRanges)
7709{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007710 if(pRanges == nullptr)
7711 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007712 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7713 "vkCmdClearDepthStencilImage parameter, const VkImageSubresourceRange* pRanges, is null pointer");
7714 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007715 }
7716 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7717 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7718 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007719 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7720 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
7721 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007722 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007723
7724 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007725}
7726
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007727bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007728 VkCmdBuffer cmdBuffer,
7729 VkImage image,
7730 VkImageLayout imageLayout,
7731 float depth,
7732 uint32_t stencil,
7733 uint32_t rangeCount)
7734{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007735
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007736
7737 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7738 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7739 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007740 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7741 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7742 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007743 }
7744
7745
7746
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007747
7748 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007749}
7750
Chris Forbes2951d7d2015-06-22 17:21:59 +12007751VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007752 VkCmdBuffer cmdBuffer,
7753 VkImage image,
7754 VkImageLayout imageLayout,
7755 float depth,
7756 uint32_t stencil,
7757 uint32_t rangeCount,
7758 const VkImageSubresourceRange* pRanges)
7759{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007760 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007761
Chris Forbes2951d7d2015-06-22 17:21:59 +12007762 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007763
Chris Forbes2951d7d2015-06-22 17:21:59 +12007764 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007765}
7766
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007767bool PreCmdClearColorAttachment(
7768 VkCmdBuffer cmdBuffer,
7769 const VkClearColorValue* pColor,
7770 const VkRect3D* pRects)
7771{
7772 if(pColor == nullptr)
7773 {
7774 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7775 "vkCmdClearColorAttachment parameter, const VkClearColorValue* pColor, is null pointer");
7776 return false;
7777 }
7778
7779 if(pRects == nullptr)
7780 {
7781 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7782 "vkCmdClearColorAttachment parameter, const VkRect3D* pRects, is null pointer");
7783 return false;
7784 }
7785
7786 return true;
7787}
7788
7789bool PostCmdClearColorAttachment(
7790 VkCmdBuffer cmdBuffer,
7791 uint32_t colorAttachment,
7792 VkImageLayout imageLayout,
7793 uint32_t rectCount)
7794{
7795
7796
7797 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7798 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7799 {
7800 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7801 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7802 return false;
7803 }
7804
7805
7806 return true;
7807}
7808
7809VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7810 VkCmdBuffer cmdBuffer,
7811 uint32_t colorAttachment,
7812 VkImageLayout imageLayout,
7813 const VkClearColorValue* pColor,
7814 uint32_t rectCount,
7815 const VkRect3D* pRects)
7816{
7817 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7818
7819 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7820
7821 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7822}
7823
7824bool PreCmdClearDepthStencilAttachment(
7825 VkCmdBuffer cmdBuffer,
7826 const VkRect3D* pRects)
7827{
7828 if(pRects == nullptr)
7829 {
7830 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7831 "vkCmdClearDepthStencilAttachment parameter, const VkRect3D* pRects, is null pointer");
7832 return false;
7833 }
7834
7835 return true;
7836}
7837
7838bool PostCmdClearDepthStencilAttachment(
7839 VkCmdBuffer cmdBuffer,
7840 VkImageAspectFlags imageAspectMask,
7841 VkImageLayout imageLayout,
7842 float depth,
7843 uint32_t stencil,
7844 uint32_t rectCount)
7845{
7846
7847 if(!ValidateEnumerator((VkImageAspectFlagBits)imageAspectMask))
7848 {
7849 std::string reason = "vkCmdClearDepthStencilAttachment parameter, VkImageAspectFlags imageAspectMask, is " + EnumeratorString((VkImageAspectFlagBits)imageAspectMask);
7850 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
7851 return false;
7852 }
7853
7854 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7855 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7856 {
7857 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7858 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7859 return false;
7860 }
7861
7862
7863
7864
7865 return true;
7866}
7867
7868VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7869 VkCmdBuffer cmdBuffer,
7870 VkImageAspectFlags imageAspectMask,
7871 VkImageLayout imageLayout,
7872 float depth,
7873 uint32_t stencil,
7874 uint32_t rectCount,
7875 const VkRect3D* pRects)
7876{
7877 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7878
7879 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7880
7881 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7882}
7883
7884bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007885 VkCmdBuffer cmdBuffer,
7886 const VkImageResolve* pRegions)
7887{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007888 if(pRegions == nullptr)
7889 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007890 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007891 "vkCmdResolveImage parameter, const VkImageResolve* pRegions, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007892 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007893 }
7894 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7895 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7896 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007897 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007898 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007899 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007900 }
7901 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7902 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7903 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007904 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007905 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007906 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007907 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007908
7909 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007910}
7911
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007912bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007913 VkCmdBuffer cmdBuffer,
7914 VkImage srcImage,
7915 VkImageLayout srcImageLayout,
7916 VkImage destImage,
7917 VkImageLayout destImageLayout,
7918 uint32_t regionCount)
7919{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007920
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007921
7922 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7923 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7924 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007925 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007926 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007927 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007928 }
7929
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007930
7931 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7932 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7933 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007934 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007935 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007936 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007937 }
7938
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007939
7940 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007941}
7942
7943VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7944 VkCmdBuffer cmdBuffer,
7945 VkImage srcImage,
7946 VkImageLayout srcImageLayout,
7947 VkImage destImage,
7948 VkImageLayout destImageLayout,
7949 uint32_t regionCount,
7950 const VkImageResolve* pRegions)
7951{
7952 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007953
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007954 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7955
7956 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7957}
7958
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007959bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007960 VkCmdBuffer cmdBuffer,
7961 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007962 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007963{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007964
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007965
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007966
7967 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007968}
7969
7970VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7971 VkCmdBuffer cmdBuffer,
7972 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007973 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007974{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007975 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007976
Tony Barbourc2e987e2015-06-29 16:20:35 -06007977 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007978}
7979
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007980bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007981 VkCmdBuffer cmdBuffer,
7982 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007983 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007984{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007985
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007986
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007987
7988 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007989}
7990
7991VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7992 VkCmdBuffer cmdBuffer,
7993 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007994 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007995{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007996 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007997
Tony Barbourc2e987e2015-06-29 16:20:35 -06007998 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007999}
8000
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008001bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008002 VkCmdBuffer cmdBuffer,
8003 const VkEvent* pEvents,
8004 const void** ppMemBarriers)
8005{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008006 if(pEvents == nullptr)
8007 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008008 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008009 "vkCmdWaitEvents parameter, const VkEvent* pEvents, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008010 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008011 }
8012
8013 if(ppMemBarriers == nullptr)
8014 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008015 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008016 "vkCmdWaitEvents parameter, const void** ppMemBarriers, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008017 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008018 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008019
8020 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008021}
8022
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008023bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008024 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008025 uint32_t eventCount,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008026 VkPipelineStageFlags sourceStageMask,
8027 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008028 uint32_t memBarrierCount)
8029{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008030
Tony Barbourc2e987e2015-06-29 16:20:35 -06008031
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008032
8033
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008034
8035 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008036}
8037
8038VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
8039 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008040 uint32_t eventCount,
8041 const VkEvent* pEvents,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008042 VkPipelineStageFlags sourceStageMask,
8043 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008044 uint32_t memBarrierCount,
8045 const void** ppMemBarriers)
8046{
8047 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008048
Tony Barbourc2e987e2015-06-29 16:20:35 -06008049 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008050
Tony Barbourc2e987e2015-06-29 16:20:35 -06008051 PostCmdWaitEvents(cmdBuffer, eventCount, sourceStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008052}
8053
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008054bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008055 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008056 const void** ppMemBarriers)
8057{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008058 if(ppMemBarriers == nullptr)
8059 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008060 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008061 "vkCmdPipelineBarrier parameter, const void** ppMemBarriers, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008062 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008063 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008064
8065 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008066}
8067
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008068bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008069 VkCmdBuffer cmdBuffer,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008070 VkPipelineStageFlags sourceStageMask,
8071 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06008072 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008073 uint32_t memBarrierCount)
8074{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008075
Tony Barbourc2e987e2015-06-29 16:20:35 -06008076
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008077
8078
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 vkCmdPipelineBarrier(
8084 VkCmdBuffer cmdBuffer,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008085 VkPipelineStageFlags sourceStageMask,
8086 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06008087 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008088 uint32_t memBarrierCount,
8089 const void** ppMemBarriers)
8090{
Tony Barbourc2e987e2015-06-29 16:20:35 -06008091 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008092
Tony Barbourc2e987e2015-06-29 16:20:35 -06008093 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008094
Tony Barbourc2e987e2015-06-29 16:20:35 -06008095 PostCmdPipelineBarrier(cmdBuffer, sourceStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008096}
8097
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008098bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008099 VkCmdBuffer cmdBuffer,
8100 VkQueryPool queryPool,
8101 uint32_t slot,
8102 VkQueryControlFlags flags)
8103{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008104
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008105
8106
8107 if(!ValidateEnumerator((VkQueryControlFlagBits)flags))
8108 {
8109 std::string reason = "vkCmdBeginQuery parameter, VkQueryControlFlags flags, is " + EnumeratorString((VkQueryControlFlagBits)flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008110 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8111 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008112 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008113
8114 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008115}
8116
8117VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
8118 VkCmdBuffer cmdBuffer,
8119 VkQueryPool queryPool,
8120 uint32_t slot,
8121 VkQueryControlFlags flags)
8122{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008123 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8124
8125 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8126}
8127
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008128bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008129 VkCmdBuffer cmdBuffer,
8130 VkQueryPool queryPool,
8131 uint32_t slot)
8132{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008133
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008134
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008135
8136 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008137}
8138
8139VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
8140 VkCmdBuffer cmdBuffer,
8141 VkQueryPool queryPool,
8142 uint32_t slot)
8143{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008144 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
8145
8146 PostCmdEndQuery(cmdBuffer, queryPool, slot);
8147}
8148
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008149bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008150 VkCmdBuffer cmdBuffer,
8151 VkQueryPool queryPool,
8152 uint32_t startQuery,
8153 uint32_t queryCount)
8154{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008155
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008156
8157
8158
8159 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008160}
8161
8162VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8163 VkCmdBuffer cmdBuffer,
8164 VkQueryPool queryPool,
8165 uint32_t startQuery,
8166 uint32_t queryCount)
8167{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008168 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8169
8170 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8171}
8172
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008173bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008174 VkCmdBuffer cmdBuffer,
8175 VkTimestampType timestampType,
8176 VkBuffer destBuffer,
8177 VkDeviceSize destOffset)
8178{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008179
8180 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8181 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8182 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008183 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008184 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008185 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008186 }
8187
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008188
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008189
8190 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008191}
8192
8193VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8194 VkCmdBuffer cmdBuffer,
8195 VkTimestampType timestampType,
8196 VkBuffer destBuffer,
8197 VkDeviceSize destOffset)
8198{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008199 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8200
8201 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8202}
8203
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008204bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008205 VkCmdBuffer cmdBuffer,
8206 VkQueryPool queryPool,
8207 uint32_t startQuery,
8208 uint32_t queryCount,
8209 VkBuffer destBuffer,
8210 VkDeviceSize destOffset,
8211 VkDeviceSize destStride,
8212 VkQueryResultFlags flags)
8213{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008214
8215
8216
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008217
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008218
8219
8220
8221 if(!ValidateEnumerator((VkQueryResultFlagBits)flags))
8222 {
8223 std::string reason = "vkCmdCopyQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008224 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8225 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008226 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008227
8228 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008229}
8230
Jeremy Hayescf469132015-04-17 10:36:53 -06008231VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008232 VkCmdBuffer cmdBuffer,
8233 VkQueryPool queryPool,
8234 uint32_t startQuery,
8235 uint32_t queryCount,
8236 VkBuffer destBuffer,
8237 VkDeviceSize destOffset,
8238 VkDeviceSize destStride,
8239 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06008240{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008241 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8242
8243 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06008244}
8245
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008246bool PreCreateFramebuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008247 VkDevice device,
8248 const VkFramebufferCreateInfo* pCreateInfo)
8249{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008250 if(pCreateInfo == nullptr)
8251 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008252 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008253 "vkCreateFramebuffer parameter, const VkFramebufferCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008254 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008255 }
8256 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
8257 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
8258 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008259 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008260 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008261 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008262 }
Chia-I Wuc278df82015-07-07 11:50:03 +08008263 if(pCreateInfo->pAttachments == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008264 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008265 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008266 "vkCreateFramebuffer parameter, const VkAttachmentBindInfo* pCreateInfo->pAttachments, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008267 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008268 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008269 if(pCreateInfo->pAttachments->view.handle == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008270 {
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 "vkCreateFramebuffer parameter, VkAttachmentView pCreateInfo->pAttachments->view, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008273 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008274 }
Chia-I Wuc278df82015-07-07 11:50:03 +08008275 if(pCreateInfo->pAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8276 pCreateInfo->pAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008277 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008278 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008279 "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pAttachments->layout, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008280 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008281 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008282
8283 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008284}
8285
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008286bool PostCreateFramebuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008287 VkDevice device,
8288 VkFramebuffer* pFramebuffer,
8289 VkResult result)
8290{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008291
8292 if(pFramebuffer == nullptr)
8293 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008295 "vkCreateFramebuffer parameter, VkFramebuffer* pFramebuffer, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008296 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008297 }
8298
8299 if(result != VK_SUCCESS)
8300 {
8301 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008302 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8303 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008304 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008305
8306 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008307}
8308
8309VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
8310 VkDevice device,
8311 const VkFramebufferCreateInfo* pCreateInfo,
8312 VkFramebuffer* pFramebuffer)
8313{
8314 PreCreateFramebuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008315
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008316 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
8317
8318 PostCreateFramebuffer(device, pFramebuffer, result);
8319
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008320 return result;
8321}
8322
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008323bool PostDestroyFramebuffer(
8324 VkDevice device,
8325 VkFramebuffer framebuffer,
8326 VkResult result)
8327{
8328
8329 if(result != VK_SUCCESS)
8330 {
8331 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
8332 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8333 return false;
8334 }
8335
8336 return true;
8337}
8338
8339VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
8340 VkDevice device,
8341 VkFramebuffer framebuffer)
8342{
8343 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
8344
8345 PostDestroyFramebuffer(device, framebuffer, result);
8346
8347 return result;
8348}
8349
8350bool PreCreateRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008351 VkDevice device,
8352 const VkRenderPassCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008353{
8354 if(pCreateInfo == nullptr)
8355 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008356 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008357 "vkCreateRenderPass parameter, const VkRenderPassCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008358 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008359 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008360 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
8361 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008362 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008363 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008364 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008365 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008366 }
Chia-I Wuc278df82015-07-07 11:50:03 +08008367
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008368 for (uint32_t i = 0; i < pCreateInfo->attachmentCount; i++)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008369 {
Chia-I Wuc278df82015-07-07 11:50:03 +08008370 const VkAttachmentDescription *att = &pCreateInfo->pAttachments[i];
8371
8372 if(att->format < VK_FORMAT_BEGIN_RANGE || att->format > VK_FORMAT_END_RANGE)
8373 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008374 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008375 "vkCreateRenderPass parameter, VkFormat in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008376 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008377 }
8378 if(att->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || att->initialLayout > VK_IMAGE_LAYOUT_END_RANGE ||
8379 att->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || att->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
8380 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008381 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008382 "vkCreateRenderPass parameter, VkImageLayout in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008383 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008384 }
8385 if(att->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE || att->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
8386 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008387 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008388 "vkCreateRenderPass parameter, VkAttachmentLoadOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008389 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008390 }
8391 if(att->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE || att->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
8392 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008393 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008394 "vkCreateRenderPass parameter, VkAttachmentStoreOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008395 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008396 }
8397 if(att->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE || att->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
8398 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008399 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008400 "vkCreateRenderPass parameter, VkAttachmentLoadOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008401 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008402 }
8403 if(att->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE || att->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
8404 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008405 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008406 "vkCreateRenderPass parameter, VkAttachmentStoreOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008407 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008408 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008409 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008410
8411 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008412}
8413
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008414bool PostCreateRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008415 VkDevice device,
8416 VkRenderPass* pRenderPass,
8417 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008418{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008419
8420 if(pRenderPass == nullptr)
8421 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008422 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008423 "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008424 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008425 }
8426
8427 if(result != VK_SUCCESS)
8428 {
8429 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008430 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8431 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008432 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008433
8434 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008435}
8436
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008437VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
8438 VkDevice device,
8439 const VkRenderPassCreateInfo* pCreateInfo,
8440 VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008441{
8442 PreCreateRenderPass(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008443
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008444 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
8445
8446 PostCreateRenderPass(device, pRenderPass, result);
8447
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008448 return result;
8449}
8450
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008451bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008452 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008453 const VkRenderPassBeginInfo* pRenderPassBegin,
8454 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008455{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008456 if(pRenderPassBegin == nullptr)
8457 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008458 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008459 "vkCmdBeginRenderPass parameter, const VkRenderPassBegin* pRenderPassBegin, is null pointer");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008460 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008461 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008462 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8463 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008464 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008465 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8466 "vkCmdBeginRenderPass parameter, VkRenderPassContents pRenderPassBegin->contents, is unrecognized enumerator");
8467 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008468 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008469
8470 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008471}
8472
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008473bool PostCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008474 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008475{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008476
8477 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008478}
8479
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008480VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8481 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008482 const VkRenderPassBeginInfo* pRenderPassBegin,
8483 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008484{
Chia-I Wuc278df82015-07-07 11:50:03 +08008485 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
8486 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008487
8488 PostCmdBeginRenderPass(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008489}
8490
Chia-I Wuc278df82015-07-07 11:50:03 +08008491void PreCmdNextSubpass(
8492 VkCmdBuffer cmdBuffer,
8493 VkRenderPassContents contents)
8494{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008495
8496 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8497 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008498 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008499 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8500 "vkCmdBeginRenderPass parameter, VkRenderPassContents pRenderPassBegin->contents, is unrecognized enumerator");
Chia-I Wuc278df82015-07-07 11:50:03 +08008501 return;
8502 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008503
8504 return;
Chia-I Wuc278df82015-07-07 11:50:03 +08008505}
8506
8507void PostCmdNextSubpass(
8508 VkCmdBuffer cmdBuffer)
8509{
8510 if(cmdBuffer == nullptr)
8511 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008512 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc278df82015-07-07 11:50:03 +08008513 "vkCmdNextSubpass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8514 return;
8515 }
8516}
8517
8518VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8519 VkCmdBuffer cmdBuffer,
8520 VkRenderPassContents contents)
8521{
8522 PreCmdNextSubpass(cmdBuffer, contents);
8523 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8524
8525 PostCmdNextSubpass(cmdBuffer);
8526}
8527
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008528void PreCmdEndRenderPass(
8529 VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008530{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008531 if(cmdBuffer == nullptr)
8532 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008533 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008534 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8535 return;
8536 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008537}
8538
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008539void PostCmdEndRenderPass(
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008540 VkCmdBuffer cmdBuffer)
Chia-I Wu5b66aa52015-04-16 22:02:10 +08008541{
Chia-I Wuc278df82015-07-07 11:50:03 +08008542 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8543
8544 PostCmdEndRenderPass(cmdBuffer);
8545}
8546
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008547bool PreCmdExecuteCommands(
8548 VkCmdBuffer cmdBuffer,
8549 const VkCmdBuffer* pCmdBuffers)
8550{
8551 if(pCmdBuffers == nullptr)
8552 {
8553 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8554 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8555 return false;
8556 }
8557
8558 return true;
8559}
8560
8561bool PostCmdExecuteCommands(
8562 VkCmdBuffer cmdBuffer,
8563 uint32_t cmdBuffersCount)
8564{
8565
8566
8567 return true;
8568}
8569
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008570void PreCmdExecuteCommands(
8571 VkCmdBuffer cmdBuffer)
8572{
8573 if(cmdBuffer == nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008574 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008575 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008576 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
8577 return;
8578 }
8579}
8580
8581void PostCmdExecuteCommands(
8582 VkCmdBuffer cmdBuffer)
8583{
8584 if(cmdBuffer == nullptr)
8585 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008586 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008587 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008588 return;
8589 }
Chia-I Wu5b66aa52015-04-16 22:02:10 +08008590}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008591
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008592VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008593 VkCmdBuffer cmdBuffer,
8594 uint32_t cmdBuffersCount,
8595 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008596{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008597 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8598
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008599 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8600
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008601 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008602}
8603
Jon Ashburn1245cec2015-05-18 13:20:15 -06008604VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008605{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008606 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008607 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008608 }
8609
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008610 /* loader uses this to force layer initialization; device object is wrapped */
8611 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008612 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008613 return (void*) vkGetDeviceProcAddr;
8614 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008615
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008616 if (!strcmp(funcName, "vkCreateDevice"))
8617 return (void*) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008618 if (!strcmp(funcName, "vkDestroyDevice"))
8619 return (void*) vkDestroyDevice;
8620 if (!strcmp(funcName, "vkGetDeviceQueue"))
8621 return (void*) vkGetDeviceQueue;
8622 if (!strcmp(funcName, "vkQueueSubmit"))
8623 return (void*) vkQueueSubmit;
8624 if (!strcmp(funcName, "vkQueueWaitIdle"))
8625 return (void*) vkQueueWaitIdle;
8626 if (!strcmp(funcName, "vkDeviceWaitIdle"))
8627 return (void*) vkDeviceWaitIdle;
8628 if (!strcmp(funcName, "vkAllocMemory"))
8629 return (void*) vkAllocMemory;
8630 if (!strcmp(funcName, "vkFreeMemory"))
8631 return (void*) vkFreeMemory;
8632 if (!strcmp(funcName, "vkMapMemory"))
8633 return (void*) vkMapMemory;
8634 if (!strcmp(funcName, "vkUnmapMemory"))
8635 return (void*) vkUnmapMemory;
8636 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
8637 return (void*) vkFlushMappedMemoryRanges;
8638 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
8639 return (void*) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008640 if (!strcmp(funcName, "vkCreateFence"))
8641 return (void*) vkCreateFence;
8642 if (!strcmp(funcName, "vkResetFences"))
8643 return (void*) vkResetFences;
8644 if (!strcmp(funcName, "vkGetFenceStatus"))
8645 return (void*) vkGetFenceStatus;
8646 if (!strcmp(funcName, "vkWaitForFences"))
8647 return (void*) vkWaitForFences;
8648 if (!strcmp(funcName, "vkCreateSemaphore"))
8649 return (void*) vkCreateSemaphore;
8650 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
8651 return (void*) vkQueueSignalSemaphore;
8652 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
8653 return (void*) vkQueueWaitSemaphore;
8654 if (!strcmp(funcName, "vkCreateEvent"))
8655 return (void*) vkCreateEvent;
8656 if (!strcmp(funcName, "vkGetEventStatus"))
8657 return (void*) vkGetEventStatus;
8658 if (!strcmp(funcName, "vkSetEvent"))
8659 return (void*) vkSetEvent;
8660 if (!strcmp(funcName, "vkResetEvent"))
8661 return (void*) vkResetEvent;
8662 if (!strcmp(funcName, "vkCreateQueryPool"))
8663 return (void*) vkCreateQueryPool;
8664 if (!strcmp(funcName, "vkGetQueryPoolResults"))
8665 return (void*) vkGetQueryPoolResults;
8666 if (!strcmp(funcName, "vkCreateBuffer"))
8667 return (void*) vkCreateBuffer;
8668 if (!strcmp(funcName, "vkCreateBufferView"))
8669 return (void*) vkCreateBufferView;
8670 if (!strcmp(funcName, "vkCreateImage"))
8671 return (void*) vkCreateImage;
8672 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
8673 return (void*) vkGetImageSubresourceLayout;
8674 if (!strcmp(funcName, "vkCreateImageView"))
8675 return (void*) vkCreateImageView;
Chia-I Wuc278df82015-07-07 11:50:03 +08008676 if (!strcmp(funcName, "vkCreateAttachmentView"))
8677 return (void*) vkCreateAttachmentView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008678 if (!strcmp(funcName, "vkCreateShader"))
8679 return (void*) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008680 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
8681 return (void*) vkCreateGraphicsPipelines;
8682 if (!strcmp(funcName, "vkCreateComputePipelines"))
8683 return (void*) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008684 if (!strcmp(funcName, "vkCreatePipelineLayout"))
8685 return (void*) vkCreatePipelineLayout;
8686 if (!strcmp(funcName, "vkCreateSampler"))
8687 return (void*) vkCreateSampler;
8688 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
8689 return (void*) vkCreateDescriptorSetLayout;
8690 if (!strcmp(funcName, "vkCreateDescriptorPool"))
8691 return (void*) vkCreateDescriptorPool;
8692 if (!strcmp(funcName, "vkResetDescriptorPool"))
8693 return (void*) vkResetDescriptorPool;
8694 if (!strcmp(funcName, "vkAllocDescriptorSets"))
8695 return (void*) vkAllocDescriptorSets;
8696 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
8697 return (void*) vkCreateDynamicViewportState;
8698 if (!strcmp(funcName, "vkCreateDynamicRasterState"))
8699 return (void*) vkCreateDynamicRasterState;
8700 if (!strcmp(funcName, "vkCreateDynamicColorBlendState"))
8701 return (void*) vkCreateDynamicColorBlendState;
8702 if (!strcmp(funcName, "vkCreateDynamicDepthStencilState"))
8703 return (void*) vkCreateDynamicDepthStencilState;
8704 if (!strcmp(funcName, "vkCreateCommandBuffer"))
8705 return (void*) vkCreateCommandBuffer;
8706 if (!strcmp(funcName, "vkBeginCommandBuffer"))
8707 return (void*) vkBeginCommandBuffer;
8708 if (!strcmp(funcName, "vkEndCommandBuffer"))
8709 return (void*) vkEndCommandBuffer;
8710 if (!strcmp(funcName, "vkResetCommandBuffer"))
8711 return (void*) vkResetCommandBuffer;
8712 if (!strcmp(funcName, "vkCmdBindPipeline"))
8713 return (void*) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008714 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
8715 return (void*) vkCmdBindDescriptorSets;
8716 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
8717 return (void*) vkCmdBindVertexBuffers;
8718 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
8719 return (void*) vkCmdBindIndexBuffer;
8720 if (!strcmp(funcName, "vkCmdDraw"))
8721 return (void*) vkCmdDraw;
8722 if (!strcmp(funcName, "vkCmdDrawIndexed"))
8723 return (void*) vkCmdDrawIndexed;
8724 if (!strcmp(funcName, "vkCmdDrawIndirect"))
8725 return (void*) vkCmdDrawIndirect;
8726 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
8727 return (void*) vkCmdDrawIndexedIndirect;
8728 if (!strcmp(funcName, "vkCmdDispatch"))
8729 return (void*) vkCmdDispatch;
8730 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
8731 return (void*) vkCmdDispatchIndirect;
8732 if (!strcmp(funcName, "vkCmdCopyBuffer"))
8733 return (void*) vkCmdCopyBuffer;
8734 if (!strcmp(funcName, "vkCmdCopyImage"))
8735 return (void*) vkCmdCopyImage;
8736 if (!strcmp(funcName, "vkCmdBlitImage"))
8737 return (void*) vkCmdBlitImage;
8738 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
8739 return (void*) vkCmdCopyBufferToImage;
8740 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
8741 return (void*) vkCmdCopyImageToBuffer;
8742 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
8743 return (void*) vkCmdUpdateBuffer;
8744 if (!strcmp(funcName, "vkCmdFillBuffer"))
8745 return (void*) vkCmdFillBuffer;
8746 if (!strcmp(funcName, "vkCmdClearColorImage"))
8747 return (void*) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008748 if (!strcmp(funcName, "vkCmdResolveImage"))
8749 return (void*) vkCmdResolveImage;
8750 if (!strcmp(funcName, "vkCmdSetEvent"))
8751 return (void*) vkCmdSetEvent;
8752 if (!strcmp(funcName, "vkCmdResetEvent"))
8753 return (void*) vkCmdResetEvent;
8754 if (!strcmp(funcName, "vkCmdWaitEvents"))
8755 return (void*) vkCmdWaitEvents;
8756 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
8757 return (void*) vkCmdPipelineBarrier;
8758 if (!strcmp(funcName, "vkCmdBeginQuery"))
8759 return (void*) vkCmdBeginQuery;
8760 if (!strcmp(funcName, "vkCmdEndQuery"))
8761 return (void*) vkCmdEndQuery;
8762 if (!strcmp(funcName, "vkCmdResetQueryPool"))
8763 return (void*) vkCmdResetQueryPool;
8764 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
8765 return (void*) vkCmdWriteTimestamp;
8766 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
8767 return (void*) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008768 if (!strcmp(funcName, "vkCreateFramebuffer"))
8769 return (void*) vkCreateFramebuffer;
8770 if (!strcmp(funcName, "vkCreateRenderPass"))
8771 return (void*) vkCreateRenderPass;
8772 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
8773 return (void*) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008774 if (!strcmp(funcName, "vkCmdNextSubpass"))
8775 return (void*) vkCmdNextSubpass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008776 if (!strcmp(funcName, "vkCmdEndRenderPass"))
8777 return (void*) vkCmdEndRenderPass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008778
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008779 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008780 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008781 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008782 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008783 }
8784}
8785
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008786VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008787{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008788 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008789 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008790 }
8791
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008792 /* loader uses this to force layer initialization; instance object is wrapped */
8793 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008794 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
8795 return (void *) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008796 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008797
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008798 if (!strcmp(funcName, "vkCreateInstance"))
8799 return (void*) vkCreateInstance;
8800 if (!strcmp(funcName, "vkDestroyInstance"))
8801 return (void*) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008802 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
8803 return (void*) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008804 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
8805 return (void*) vkGetPhysicalDeviceProperties;
8806 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
8807 return (void*) vkGetPhysicalDeviceFeatures;
8808 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatInfo"))
8809 return (void*) vkGetPhysicalDeviceFormatInfo;
8810 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
8811 return (void*) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008812 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
8813 return (void*) vkGetGlobalLayerProperties;
8814 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
8815 return (void*) vkGetGlobalExtensionProperties;
8816 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
8817 return (void*) vkGetPhysicalDeviceLayerProperties;
8818 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
8819 return (void*) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008820
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008821 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
8822 void* fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
8823 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008824 return fptr;
8825
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008826 {
8827 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8828 return NULL;
8829 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8830 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008831}