blob: f003496d1365fa6fee12fcc90216cfc0ae9e79cb [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <iostream>
30#include <string>
31#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050032#include <unordered_map>
Jeremy Hayes99a96322015-06-26 12:48:09 -060033#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060034
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060035#include "vk_loader_platform.h"
Tobin Ehlis0c6f9ee2015-07-03 09:42:57 -060036#include "vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060037#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060038#include "vk_enum_validate_helper.h"
39#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060040//The following is #included again to catch certain OS-specific functions being used:
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060041#include "vk_loader_platform.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060042
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060043#include "vk_layer_table.h"
44#include "vk_layer_data.h"
45#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060046#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060047
Jeremy Hayes99a96322015-06-26 12:48:09 -060048typedef struct _layer_data {
49 debug_report_data *report_data;
50 VkDbgMsgCallback logging_callback;
51} layer_data;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050052
Jeremy Hayes99a96322015-06-26 12:48:09 -060053static std::unordered_map<void*, layer_data*> layer_data_map;
54static device_table_map pc_device_table_map;
55static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060056
Jeremy Hayes99a96322015-06-26 12:48:09 -060057// "my instance data"
58debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060059{
Jeremy Hayes99a96322015-06-26 12:48:09 -060060 dispatch_key key = get_dispatch_key(object);
61 layer_data *data = get_my_data_ptr(get_dispatch_key(object), layer_data_map);
62#if DISPATCH_MAP_DEBUG
63 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
64#endif
65 assert(data->report_data != NULL);
66
67 return data->report_data;
68}
69
70// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060071debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-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 Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600137static const VkLayerProperties pc_global_layers[] = {
138 {
139 "ParamChecker",
140 VK_API_VERSION,
141 VK_MAKE_VERSION(0, 1, 0),
142 "Validation layer: ParamChecker",
143 }
144};
Tony Barbour59a47322015-06-24 16:06:58 -0600145
146VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600147 const char *pLayerName,
148 uint32_t *pCount,
149 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600150{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600151 /* ParamChecker does not have any global extensions */
152 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600153}
154
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600155VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties(
156 uint32_t *pCount,
157 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600158{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600159 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
160 pc_global_layers,
161 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600162}
163
164VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600165 VkPhysicalDevice physicalDevice,
166 const char* pLayerName,
167 uint32_t* pCount,
168 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600169{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600170 /* ParamChecker does not have any physical device extensions */
171 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayesad367152015-04-17 10:36:53 -0600172}
173
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600174VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
175 VkPhysicalDevice physicalDevice,
176 uint32_t* pCount,
177 VkLayerProperties* pProperties)
178{
179 /* ParamChecker's physical device layers are the same as global */
180 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
181 pCount, pProperties);
182}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600183
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600184// Version: 0.136.0
185
Jeremy Hayes99a96322015-06-26 12:48:09 -0600186static
187std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600188{
Jeremy Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-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 Hayes99a96322015-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 Hayes359eeb92015-07-09 17:11:25 -0600386 case VK_ERROR_INVALID_LAYER:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600387 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600388 return "VK_ERROR_INVALID_LAYER";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600389 break;
390 }
391 default:
392 {
393 return "unrecognized enumerator";
394 break;
395 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600396 }
Jeremy Hayes99a96322015-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 Hayes359eeb92015-07-09 17:11:25 -0600462 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayes99a96322015-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 Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -0600946 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600947 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-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 Hayes99a96322015-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 Wu08accc62015-07-07 11:50:03 +08001005bool ValidateEnumerator(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001006{
Chia-I Wu08accc62015-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 Hayes99a96322015-06-26 12:48:09 -06001009 if(enumerator & (~allFlags))
1010 {
1011 return false;
1012 }
1013
1014 return true;
1015}
1016
1017static
Chia-I Wu08accc62015-07-07 11:50:03 +08001018std::string EnumeratorString(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-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 Wu08accc62015-07-07 11:50:03 +08001026 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001027 {
Chia-I Wu08accc62015-07-07 11:50:03 +08001028 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001029 }
Chia-I Wu08accc62015-07-07 11:50:03 +08001030 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001031 {
Chia-I Wu08accc62015-07-07 11:50:03 +08001032 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-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 Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001719 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-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 Hayesa8b1a8d2015-04-06 13:46:11 -06001748 return result;
1749}
1750
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001751bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001752 VkInstance instance,
1753 uint32_t* pPhysicalDeviceCount,
1754 VkPhysicalDevice* pPhysicalDevices,
1755 VkResult result)
1756{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001757
1758 if(pPhysicalDeviceCount == nullptr)
1759 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001760 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06001761 "vkEnumeratePhysicalDevices parameter, uint32_t* pPhysicalDeviceCount, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001762 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001763 }
1764
1765 if(pPhysicalDevices == nullptr)
1766 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001767 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06001768 "vkEnumeratePhysicalDevices parameter, VkPhysicalDevice* pPhysicalDevices, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001769 return false;
Jeremy Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -06001777 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001778
1779 return true;
Jeremy Hayes99a96322015-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 Hayes99a96322015-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 Hayesa8b1a8d2015-04-06 13:46:11 -06001791 return result;
1792}
1793
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001794bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001795 VkPhysicalDevice physicalDevice,
1796 VkPhysicalDeviceFeatures* pFeatures,
1797 VkResult result)
1798{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001799
1800 if(pFeatures == nullptr)
1801 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001802 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06001803 "vkGetPhysicalDeviceFeatures parameter, VkPhysicalDeviceFeatures* pFeatures, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001804 return false;
Jeremy Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -06001812 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001813
1814 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001815}
1816
1817VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
1818 VkPhysicalDevice physicalDevice,
1819 VkPhysicalDeviceFeatures* pFeatures)
1820{
Jeremy Hayes99a96322015-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 Hayesa8b1a8d2015-04-06 13:46:11 -06001825 return result;
1826}
1827
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001828bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001829 VkPhysicalDevice physicalDevice,
1830 VkFormat format,
1831 VkFormatProperties* pFormatInfo,
1832 VkResult result)
1833{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001834
1835 if(format < VK_FORMAT_BEGIN_RANGE ||
1836 format > VK_FORMAT_END_RANGE)
1837 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001838 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001839 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001840 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001841 }
1842
1843 if(pFormatInfo == nullptr)
1844 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001845 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001846 "vkGetPhysicalDeviceFormatProperties parameter, VkFormatProperties* pFormatInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001847 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001848 }
1849 if(!ValidateEnumerator((VkFormatFeatureFlagBits)pFormatInfo->linearTilingFeatures))
1850 {
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001851 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkFormatFeatureFlags pFormatInfo->linearTilingFeatures, is " + EnumeratorString((VkFormatFeatureFlagBits)pFormatInfo->linearTilingFeatures);
Jeremy Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -06001854 }
1855 if(!ValidateEnumerator((VkFormatFeatureFlagBits)pFormatInfo->optimalTilingFeatures))
1856 {
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001857 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkFormatFeatureFlags pFormatInfo->optimalTilingFeatures, is " + EnumeratorString((VkFormatFeatureFlagBits)pFormatInfo->optimalTilingFeatures);
Jeremy Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -06001860 }
1861
1862 if(result != VK_SUCCESS)
1863 {
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001864 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -06001867 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001868
1869 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001870}
1871
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001872VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001873 VkPhysicalDevice physicalDevice,
1874 VkFormat format,
1875 VkFormatProperties* pFormatInfo)
1876{
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001877 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001878
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001879 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatInfo, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001880
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001881 return result;
1882}
1883
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001884bool PostGetPhysicalDeviceLimits(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001885 VkPhysicalDevice physicalDevice,
1886 VkPhysicalDeviceLimits* pLimits,
1887 VkResult result)
1888{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001889
1890 if(pLimits == nullptr)
1891 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001892 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06001893 "vkGetPhysicalDeviceLimits parameter, VkPhysicalDeviceLimits* pLimits, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001894 return false;
Jeremy Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -06001902 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001903
1904 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001905}
1906
1907VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
1908 VkPhysicalDevice physicalDevice,
1909 VkPhysicalDeviceLimits* pLimits)
1910{
Jeremy Hayes99a96322015-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 Goeltzenleuchterca173b82015-06-25 18:01:43 -06001923 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayes99a96322015-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 Hayes359eeb92015-07-09 17:11:25 -06001952bool PostGetPhysicalDeviceProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001953 VkPhysicalDevice physicalDevice,
1954 VkPhysicalDeviceProperties* pProperties,
1955 VkResult result)
1956{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001957
1958 if(pProperties == nullptr)
1959 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001960 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06001961 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceProperties* pProperties, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001962 return false;
Jeremy Hayes99a96322015-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 Hayes359eeb92015-07-09 17:11:25 -06001967 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06001968 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001969 return false;
Jeremy Hayes99a96322015-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 Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -06001977 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001978
1979 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001980}
1981
1982VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
1983 VkPhysicalDevice physicalDevice,
1984 VkPhysicalDeviceProperties* pProperties)
1985{
Jeremy Hayes99a96322015-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 Hayes359eeb92015-07-09 17:11:25 -06001993bool PostGetPhysicalDeviceQueueCount(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001994 VkPhysicalDevice physicalDevice,
1995 uint32_t* pCount,
1996 VkResult result)
1997{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001998
1999 if(pCount == nullptr)
2000 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002001 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002002 "vkGetPhysicalDeviceQueueCount parameter, uint32_t* pCount, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002003 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002004 }
2005
2006 if(result != VK_SUCCESS)
2007 {
2008 std::string reason = "vkGetPhysicalDeviceQueueCount parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-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 Hayes99a96322015-06-26 12:48:09 -06002011 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002012
2013 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002014}
2015
2016VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueCount(
2017 VkPhysicalDevice physicalDevice,
2018 uint32_t* pCount)
2019{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002020 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueCount(physicalDevice, pCount);
2021
2022 PostGetPhysicalDeviceQueueCount(physicalDevice, pCount, result);
2023
2024 return result;
2025}
2026
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002027bool PostGetPhysicalDeviceQueueProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002028 VkPhysicalDevice physicalDevice,
2029 uint32_t count,
2030 VkPhysicalDeviceQueueProperties* pQueueProperties,
2031 VkResult result)
2032{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002033
2034
2035 if(pQueueProperties == nullptr)
2036 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002037 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002038 "vkGetPhysicalDeviceQueueProperties parameter, VkPhysicalDeviceQueueProperties* pQueueProperties, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002039 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002040 }
2041 if(!ValidateEnumerator((VkQueueFlagBits)pQueueProperties->queueFlags))
2042 {
2043 std::string reason = "vkGetPhysicalDeviceQueueProperties parameter, VkQueueFlags pQueueProperties->queueFlags, is " + EnumeratorString((VkQueueFlagBits)pQueueProperties->queueFlags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002044 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2045 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002046 }
2047
2048 if(result != VK_SUCCESS)
2049 {
2050 std::string reason = "vkGetPhysicalDeviceQueueProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002051 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2052 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002053 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002054
2055 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002056}
2057
2058VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2059 VkPhysicalDevice physicalDevice,
2060 uint32_t count,
2061 VkPhysicalDeviceQueueProperties* pQueueProperties)
2062{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002063 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties);
2064
2065 PostGetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties, result);
2066
2067 return result;
2068}
2069
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002070bool PostGetPhysicalDeviceMemoryProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002071 VkPhysicalDevice physicalDevice,
2072 VkPhysicalDeviceMemoryProperties* pMemoryProperies,
2073 VkResult result)
2074{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002075
2076 if(pMemoryProperies == nullptr)
2077 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002078 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002079 "vkGetPhysicalDeviceMemoryProperties parameter, VkPhysicalDeviceMemoryProperties* pMemoryProperies, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002080 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002081 }
2082
2083 if(result != VK_SUCCESS)
2084 {
2085 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002086 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2087 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002088 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002089
2090 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002091}
2092
2093VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2094 VkPhysicalDevice physicalDevice,
2095 VkPhysicalDeviceMemoryProperties* pMemoryProperies)
2096{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002097 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperies);
2098
2099 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperies, result);
2100
2101 return result;
2102}
2103
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002104bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002105 VkDevice device,
2106 uint32_t queueNodeIndex,
2107 uint32_t queueIndex,
2108 VkQueue* pQueue,
2109 VkResult result)
2110{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002111
2112
2113
2114 if(pQueue == nullptr)
2115 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002116 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002117 "vkGetDeviceQueue parameter, VkQueue* pQueue, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002118 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002119 }
2120
2121 if(result != VK_SUCCESS)
2122 {
2123 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002124 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2125 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002126 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002127
2128 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002129}
2130
2131VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2132 VkDevice device,
2133 uint32_t queueNodeIndex,
2134 uint32_t queueIndex,
2135 VkQueue* pQueue)
2136{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002137 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
2138
2139 PostGetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue, result);
2140
2141 return result;
2142}
2143
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002144bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002145 VkQueue queue,
2146 const VkCmdBuffer* pCmdBuffers)
2147{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002148 if(pCmdBuffers == nullptr)
2149 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002150 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002151 "vkQueueSubmit parameter, const VkCmdBuffer* pCmdBuffers, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002152 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002153 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002154
2155 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002156}
2157
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002158bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002159 VkQueue queue,
2160 uint32_t cmdBufferCount,
2161 VkFence fence,
2162 VkResult result)
2163{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002164
2165
Jeremy Hayes99a96322015-06-26 12:48:09 -06002166
Jeremy Hayes99a96322015-06-26 12:48:09 -06002167 if(result != VK_SUCCESS)
2168 {
2169 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002170 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2171 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002172 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002173
2174 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002175}
2176
2177VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2178 VkQueue queue,
2179 uint32_t cmdBufferCount,
2180 const VkCmdBuffer* pCmdBuffers,
2181 VkFence fence)
2182{
2183 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002184
Jeremy Hayes99a96322015-06-26 12:48:09 -06002185 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2186
2187 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2188
2189 return result;
2190}
2191
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002192bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002193 VkQueue queue,
2194 VkResult result)
2195{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196
2197 if(result != VK_SUCCESS)
2198 {
2199 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002200 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2201 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002202 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002203
2204 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002205}
2206
2207VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2208 VkQueue queue)
2209{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002210 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2211
2212 PostQueueWaitIdle(queue, result);
2213
2214 return result;
2215}
2216
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002217bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002218 VkDevice device,
2219 VkResult result)
2220{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221
2222 if(result != VK_SUCCESS)
2223 {
2224 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002225 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2226 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002227 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002228
2229 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002230}
2231
2232VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2233 VkDevice device)
2234{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002235 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2236
2237 PostDeviceWaitIdle(device, result);
2238
2239 return result;
2240}
2241
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002242bool PreAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002243 VkDevice device,
2244 const VkMemoryAllocInfo* pAllocInfo)
2245{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002246 if(pAllocInfo == nullptr)
2247 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002248 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002249 "vkAllocMemory parameter, const VkMemoryAllocInfo* pAllocInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002250 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002251 }
2252 if(pAllocInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2253 pAllocInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
2254 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002255 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002256 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002257 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002258 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002259
2260 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002261}
2262
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002263bool PostAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002264 VkDevice device,
2265 VkDeviceMemory* pMem,
2266 VkResult result)
2267{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002268
2269 if(pMem == nullptr)
2270 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002271 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002272 "vkAllocMemory parameter, VkDeviceMemory* pMem, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002273 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274 }
2275
2276 if(result != VK_SUCCESS)
2277 {
2278 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2280 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002281 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002282
2283 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002284}
2285
2286VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2287 VkDevice device,
2288 const VkMemoryAllocInfo* pAllocInfo,
2289 VkDeviceMemory* pMem)
2290{
2291 PreAllocMemory(device, pAllocInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002292
Jeremy Hayes99a96322015-06-26 12:48:09 -06002293 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2294
2295 PostAllocMemory(device, pMem, result);
2296
2297 return result;
2298}
2299
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002300bool PostFreeMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002301 VkDevice device,
2302 VkDeviceMemory mem,
2303 VkResult result)
2304{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002305
Jeremy Hayes99a96322015-06-26 12:48:09 -06002306
2307 if(result != VK_SUCCESS)
2308 {
2309 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002310 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2311 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002312 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002313
2314 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002315}
2316
2317VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2318 VkDevice device,
2319 VkDeviceMemory mem)
2320{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002321 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2322
2323 PostFreeMemory(device, mem, result);
2324
2325 return result;
2326}
2327
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002328bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002329 VkDevice device,
2330 VkDeviceMemory mem,
2331 VkDeviceSize offset,
2332 VkDeviceSize size,
2333 VkMemoryMapFlags flags,
2334 void** ppData,
2335 VkResult result)
2336{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002337
Jeremy Hayes99a96322015-06-26 12:48:09 -06002338
2339
2340
2341
2342 if(ppData == nullptr)
2343 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002344 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002345 "vkMapMemory parameter, void** ppData, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002346 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002347 }
2348
2349 if(result != VK_SUCCESS)
2350 {
2351 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002352 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2353 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002354 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002355
2356 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002357}
2358
2359VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2360 VkDevice device,
2361 VkDeviceMemory mem,
2362 VkDeviceSize offset,
2363 VkDeviceSize size,
2364 VkMemoryMapFlags flags,
2365 void** ppData)
2366{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002367 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2368
2369 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2370
2371 return result;
2372}
2373
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002374bool PostUnmapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002375 VkDevice device,
2376 VkDeviceMemory mem,
2377 VkResult result)
2378{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002379
Jeremy Hayes99a96322015-06-26 12:48:09 -06002380
2381 if(result != VK_SUCCESS)
2382 {
2383 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002384 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2385 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002386 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002387
2388 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002389}
2390
2391VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2392 VkDevice device,
2393 VkDeviceMemory mem)
2394{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002395 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2396
2397 PostUnmapMemory(device, mem, result);
2398
2399 return result;
2400}
2401
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002402bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002403 VkDevice device,
2404 const VkMappedMemoryRange* pMemRanges)
2405{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002406 if(pMemRanges == nullptr)
2407 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002408 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002409 "vkFlushMappedMemoryRanges parameter, const VkMappedMemoryRange* pMemRanges, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002410 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002411 }
2412 if(pMemRanges->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2413 pMemRanges->sType > VK_STRUCTURE_TYPE_END_RANGE)
2414 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002415 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002416 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002417 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002418 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002419
2420 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002421}
2422
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002423bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002424 VkDevice device,
2425 uint32_t memRangeCount,
2426 VkResult result)
2427{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002428
2429
2430 if(result != VK_SUCCESS)
2431 {
2432 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002433 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2434 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002435 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002436
2437 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002438}
2439
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002440VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002441 VkDevice device,
2442 uint32_t memRangeCount,
2443 const VkMappedMemoryRange* pMemRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002444{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002445 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002446
Jeremy Hayes99a96322015-06-26 12:48:09 -06002447 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002448
Jeremy Hayes99a96322015-06-26 12:48:09 -06002449 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2450
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002451 return result;
2452}
2453
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002454bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002455 VkDevice device,
2456 const VkMappedMemoryRange* pMemRanges)
2457{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002458 if(pMemRanges == nullptr)
2459 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002460 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002461 "vkInvalidateMappedMemoryRanges parameter, const VkMappedMemoryRange* pMemRanges, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002462 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002463 }
2464 if(pMemRanges->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2465 pMemRanges->sType > VK_STRUCTURE_TYPE_END_RANGE)
2466 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002467 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002468 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002469 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002470 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002471
2472 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002473}
2474
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002475bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002476 VkDevice device,
2477 uint32_t memRangeCount,
2478 VkResult result)
2479{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002480
2481
2482 if(result != VK_SUCCESS)
2483 {
2484 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002485 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2486 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002487 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002488
2489 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002490}
2491
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002492VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002493 VkDevice device,
2494 uint32_t memRangeCount,
2495 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002496{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002497 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002498
Jeremy Hayes99a96322015-06-26 12:48:09 -06002499 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002500
Jeremy Hayes99a96322015-06-26 12:48:09 -06002501 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2502
Tony Barbourb1250542015-04-16 19:23:13 -06002503 return result;
2504}
2505
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002506VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
2507 VkDevice device,
2508 VkDeviceMemory memory,
2509 VkDeviceSize* pCommittedMemoryInBytes)
2510{
2511 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2512
2513 return result;
2514}
2515
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002516bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002517 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002518 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002519 VkDeviceMemory mem,
2520 VkDeviceSize memOffset,
2521 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002522{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002523
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002524
Jeremy Hayes99a96322015-06-26 12:48:09 -06002525
2526
2527 if(result != VK_SUCCESS)
2528 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002529 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2530 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2531 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002532 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002533
2534 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002535}
2536
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002537VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002538 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002539 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002540 VkDeviceMemory mem,
2541 VkDeviceSize memOffset)
2542{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002543 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002544
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002545 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002546
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002547 return result;
2548}
2549
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002550bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002551 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002552 VkImage image,
2553 VkDeviceMemory mem,
2554 VkDeviceSize memOffset,
2555 VkResult result)
2556{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002557
2558
2559
2560
2561 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002562 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002563 std::string reason = "vkBindImageMemory 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 Hayes99a96322015-06-26 12:48:09 -06002566 }
2567
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002568 return true;
2569}
2570
2571VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2572 VkDevice device,
2573 VkImage image,
2574 VkDeviceMemory mem,
2575 VkDeviceSize memOffset)
2576{
2577 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2578
2579 PostBindImageMemory(device, image, mem, memOffset, result);
2580
2581 return result;
2582}
2583
2584bool PostGetBufferMemoryRequirements(
2585 VkDevice device,
2586 VkBuffer buffer,
2587 VkMemoryRequirements* pMemoryRequirements,
2588 VkResult result)
2589{
2590
2591
2592 if(pMemoryRequirements == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002593 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002594 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2595 "vkGetBufferMemoryRequirements parameter, VkMemoryRequirements* pMemoryRequirements, is null pointer");
2596 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002597 }
2598
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002599 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002600 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002601 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2602 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2603 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002604 }
2605
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002606 return true;
2607}
2608
2609VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2610 VkDevice device,
2611 VkBuffer buffer,
2612 VkMemoryRequirements* pMemoryRequirements)
2613{
2614 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2615
2616 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2617
2618 return result;
2619}
2620
2621bool PostGetImageMemoryRequirements(
2622 VkDevice device,
2623 VkImage image,
2624 VkMemoryRequirements* pMemoryRequirements,
2625 VkResult result)
2626{
2627
2628
2629 if(pMemoryRequirements == nullptr)
2630 {
2631 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2632 "vkGetImageMemoryRequirements parameter, VkMemoryRequirements* pMemoryRequirements, is null pointer");
2633 return false;
2634 }
2635
2636 if(result != VK_SUCCESS)
2637 {
2638 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2639 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2640 return false;
2641 }
2642
2643 return true;
2644}
2645
2646VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2647 VkDevice device,
2648 VkImage image,
2649 VkMemoryRequirements* pMemoryRequirements)
2650{
2651 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2652
2653 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2654
2655 return result;
2656}
2657
2658bool PostGetImageSparseMemoryRequirements(
2659 VkDevice device,
2660 VkImage image,
2661 uint32_t* pNumRequirements,
2662 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2663 VkResult result)
2664{
2665
2666
2667 if(pNumRequirements == nullptr)
2668 {
2669 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2670 "vkGetImageSparseMemoryRequirements parameter, uint32_t* pNumRequirements, is null pointer");
2671 return false;
2672 }
2673
2674 if(pSparseMemoryRequirements == nullptr)
2675 {
2676 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2677 "vkGetImageSparseMemoryRequirements parameter, VkSparseImageMemoryRequirements* pSparseMemoryRequirements, is null pointer");
2678 return false;
2679 }
2680 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2681 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2682 {
2683 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2684 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is unrecognized enumerator");
2685 return false;
2686 }
2687 if(!ValidateEnumerator((VkSparseImageFormatFlagBits)pSparseMemoryRequirements->formatProps.flags))
2688 {
2689 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkSparseImageFormatFlags pSparseMemoryRequirements->formatProps.flags, is " + EnumeratorString((VkSparseImageFormatFlagBits)pSparseMemoryRequirements->formatProps.flags);
2690 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2691 return false;
2692 }
2693
2694 if(result != VK_SUCCESS)
2695 {
2696 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2697 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2698 return false;
2699 }
2700
2701 return true;
2702}
2703
2704VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2705 VkDevice device,
2706 VkImage image,
2707 uint32_t* pNumRequirements,
2708 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2709{
2710 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2711
2712 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2713
2714 return result;
2715}
2716
2717bool PostGetPhysicalDeviceSparseImageFormatProperties(
2718 VkPhysicalDevice physicalDevice,
2719 VkFormat format,
2720 VkImageType type,
2721 uint32_t samples,
2722 VkImageUsageFlags usage,
2723 VkImageTiling tiling,
2724 uint32_t* pNumProperties,
2725 VkSparseImageFormatProperties* pProperties,
2726 VkResult result)
2727{
2728
2729 if(format < VK_FORMAT_BEGIN_RANGE ||
2730 format > VK_FORMAT_END_RANGE)
2731 {
2732 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2733 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is unrecognized enumerator");
2734 return false;
2735 }
2736
2737 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2738 type > VK_IMAGE_TYPE_END_RANGE)
2739 {
2740 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2741 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is unrecognized enumerator");
2742 return false;
2743 }
2744
2745
2746 if(!ValidateEnumerator((VkImageUsageFlagBits)usage))
2747 {
2748 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageUsageFlags usage, is " + EnumeratorString((VkImageUsageFlagBits)usage);
2749 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2750 return false;
2751 }
2752
2753 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2754 tiling > VK_IMAGE_TILING_END_RANGE)
2755 {
2756 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2757 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is unrecognized enumerator");
2758 return false;
2759 }
2760
2761 if(pNumProperties == nullptr)
2762 {
2763 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2764 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, uint32_t* pNumProperties, is null pointer");
2765 return false;
2766 }
2767
2768 if(pProperties == nullptr)
2769 {
2770 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2771 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkSparseImageFormatProperties* pProperties, is null pointer");
2772 return false;
2773 }
2774 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2775 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2776 {
2777 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2778 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is unrecognized enumerator");
2779 return false;
2780 }
2781 if(!ValidateEnumerator((VkSparseImageFormatFlagBits)pProperties->flags))
2782 {
2783 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkSparseImageFormatFlags pProperties->flags, is " + EnumeratorString((VkSparseImageFormatFlagBits)pProperties->flags);
2784 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2785 return false;
2786 }
2787
2788 if(result != VK_SUCCESS)
2789 {
2790 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2791 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2792 return false;
2793 }
2794
2795 return true;
2796}
2797
2798VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2799 VkPhysicalDevice physicalDevice,
2800 VkFormat format,
2801 VkImageType type,
2802 uint32_t samples,
2803 VkImageUsageFlags usage,
2804 VkImageTiling tiling,
2805 uint32_t* pNumProperties,
2806 VkSparseImageFormatProperties* pProperties)
2807{
2808 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2809
2810 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2811
2812 return result;
2813}
2814
2815bool PreQueueBindSparseBufferMemory(
2816 VkQueue queue,
2817 const VkSparseMemoryBindInfo* pBindInfo)
2818{
2819 if(pBindInfo == nullptr)
2820 {
2821 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2822 "vkQueueBindSparseBufferMemory parameter, const VkSparseMemoryBindInfo* pBindInfo, is null pointer");
2823 return false;
2824 }
2825
2826 return true;
2827}
2828
2829bool PostQueueBindSparseBufferMemory(
2830 VkQueue queue,
2831 VkBuffer buffer,
2832 uint32_t numBindings,
2833 VkResult result)
2834{
2835
2836
2837
2838 if(result != VK_SUCCESS)
2839 {
2840 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2841 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2842 return false;
2843 }
2844
2845 return true;
2846}
2847
2848VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2849 VkQueue queue,
2850 VkBuffer buffer,
2851 uint32_t numBindings,
2852 const VkSparseMemoryBindInfo* pBindInfo)
2853{
2854 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2855
2856 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2857
2858 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2859
2860 return result;
2861}
2862
2863bool PreQueueBindSparseImageOpaqueMemory(
2864 VkQueue queue,
2865 const VkSparseMemoryBindInfo* pBindInfo)
2866{
2867 if(pBindInfo == nullptr)
2868 {
2869 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2870 "vkQueueBindSparseImageOpaqueMemory parameter, const VkSparseMemoryBindInfo* pBindInfo, is null pointer");
2871 return false;
2872 }
2873
2874 return true;
2875}
2876
2877bool PostQueueBindSparseImageOpaqueMemory(
2878 VkQueue queue,
2879 VkImage image,
2880 uint32_t numBindings,
2881 VkResult result)
2882{
2883
2884
2885
2886 if(result != VK_SUCCESS)
2887 {
2888 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2889 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2890 return false;
2891 }
2892
2893 return true;
2894}
2895
2896VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2897 VkQueue queue,
2898 VkImage image,
2899 uint32_t numBindings,
2900 const VkSparseMemoryBindInfo* pBindInfo)
2901{
2902 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2903
2904 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2905
2906 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2907
2908 return result;
2909}
2910
2911bool PreQueueBindSparseImageMemory(
2912 VkQueue queue,
2913 const VkSparseImageMemoryBindInfo* pBindInfo)
2914{
2915 if(pBindInfo == nullptr)
2916 {
2917 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2918 "vkQueueBindSparseImageMemory parameter, const VkSparseImageMemoryBindInfo* pBindInfo, is null pointer");
2919 return false;
2920 }
2921 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2922 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
2923 {
2924 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2925 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is unrecognized enumerator");
2926 return false;
2927 }
2928 if(!ValidateEnumerator((VkSparseMemoryBindFlagBits)pBindInfo->flags))
2929 {
2930 std::string reason = "vkQueueBindSparseImageMemory parameter, VkSparseMemoryBindFlags pBindInfo->flags, is " + EnumeratorString((VkSparseMemoryBindFlagBits)pBindInfo->flags);
2931 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2932 return false;
2933 }
2934
2935 return true;
2936}
2937
2938bool PostQueueBindSparseImageMemory(
2939 VkQueue queue,
2940 VkImage image,
2941 uint32_t numBindings,
2942 VkResult result)
2943{
2944
2945
Jeremy Hayes99a96322015-06-26 12:48:09 -06002946
2947 if(result != VK_SUCCESS)
2948 {
2949 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002950 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2951 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002952 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002953
2954 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002955}
2956
2957VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002958 VkQueue queue,
2959 VkImage image,
2960 uint32_t numBindings,
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002961 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002962{
2963 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002964
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002965 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002966
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002967 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002968
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002969 return result;
2970}
2971
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002972bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002973 VkDevice device,
2974 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002975{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002976 if(pCreateInfo == nullptr)
2977 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002978 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002979 "vkCreateFence parameter, const VkFenceCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002980 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002981 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002982 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
2983 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002984 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002985 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06002986 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002987 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002988 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002989 if(!ValidateEnumerator((VkFenceCreateFlagBits)pCreateInfo->flags))
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002990 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002991 std::string reason = "vkCreateFence parameter, VkFenceCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkFenceCreateFlagBits)pCreateInfo->flags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002992 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2993 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002994 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002995
2996 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002997}
2998
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002999bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003000 VkDevice device,
3001 VkFence* pFence,
3002 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003003{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003004
3005 if(pFence == nullptr)
3006 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003007 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003008 "vkCreateFence parameter, VkFence* pFence, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003009 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003010 }
3011
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06003012 if(result != VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003013 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003014 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003015 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3016 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003017 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003018
3019 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003020}
3021
3022VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3023 VkDevice device,
3024 const VkFenceCreateInfo* pCreateInfo,
3025 VkFence* pFence)
3026{
3027 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003028
Jeremy Hayes99a96322015-06-26 12:48:09 -06003029 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3030
3031 PostCreateFence(device, pFence, result);
3032
3033 return result;
3034}
3035
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003036bool PostDestroyFence(
3037 VkDevice device,
3038 VkFence fence,
3039 VkResult result)
3040{
3041
3042
3043 if(result != VK_SUCCESS)
3044 {
3045 std::string reason = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3046 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3047 return false;
3048 }
3049
3050 return true;
3051}
3052
3053VK_LAYER_EXPORT VkResult VKAPI vkDestroyFence(
3054 VkDevice device,
3055 VkFence fence)
3056{
3057 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3058
3059 PostDestroyFence(device, fence, result);
3060
3061 return result;
3062}
3063
3064bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003065 VkDevice device,
3066 const VkFence* pFences)
3067{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003068 if(pFences == nullptr)
3069 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003070 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071 "vkResetFences parameter, const VkFence* pFences, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003072 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003073 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003074
3075 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003076}
3077
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003078bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003079 VkDevice device,
3080 uint32_t fenceCount,
3081 VkResult result)
3082{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003083
3084
3085 if(result != VK_SUCCESS)
3086 {
3087 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003088 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3089 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003090 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003091
3092 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003093}
3094
3095VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3096 VkDevice device,
3097 uint32_t fenceCount,
3098 const VkFence* pFences)
3099{
3100 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003101
Jeremy Hayes99a96322015-06-26 12:48:09 -06003102 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3103
3104 PostResetFences(device, fenceCount, result);
3105
3106 return result;
3107}
3108
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003109bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003110 VkDevice device,
3111 VkFence fence,
3112 VkResult result)
3113{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003114
Jeremy Hayes99a96322015-06-26 12:48:09 -06003115
3116 if(result != VK_SUCCESS)
3117 {
3118 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003119 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3120 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003122
3123 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003124}
3125
3126VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3127 VkDevice device,
3128 VkFence fence)
3129{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003130 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3131
3132 PostGetFenceStatus(device, fence, result);
3133
3134 return result;
3135}
3136
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003137bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003138 VkDevice device,
3139 const VkFence* pFences)
3140{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141 if(pFences == nullptr)
3142 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003143 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003144 "vkWaitForFences parameter, const VkFence* pFences, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003145 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003146 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003147
3148 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003149}
3150
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003151bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003152 VkDevice device,
3153 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06003154 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003155 uint64_t timeout,
3156 VkResult result)
3157{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003158
3159
3160
3161
3162 if(result != VK_SUCCESS)
3163 {
3164 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003165 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3166 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003167 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003168
3169 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003170}
3171
3172VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3173 VkDevice device,
3174 uint32_t fenceCount,
3175 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06003176 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003177 uint64_t timeout)
3178{
3179 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003180
Jeremy Hayes99a96322015-06-26 12:48:09 -06003181 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3182
3183 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3184
3185 return result;
3186}
3187
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003188bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003189 VkDevice device,
3190 const VkSemaphoreCreateInfo* pCreateInfo)
3191{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003192 if(pCreateInfo == nullptr)
3193 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003194 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003195 "vkCreateSemaphore parameter, const VkSemaphoreCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003196 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003197 }
3198 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3199 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3200 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003201 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003202 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003203 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003204 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003205
3206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003207}
3208
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003209bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003210 VkDevice device,
3211 VkSemaphore* pSemaphore,
3212 VkResult result)
3213{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003214
3215 if(pSemaphore == nullptr)
3216 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003217 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003218 "vkCreateSemaphore parameter, VkSemaphore* pSemaphore, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003219 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003220 }
3221
3222 if(result != VK_SUCCESS)
3223 {
3224 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003225 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3226 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003227 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003228
3229 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003230}
3231
3232VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3233 VkDevice device,
3234 const VkSemaphoreCreateInfo* pCreateInfo,
3235 VkSemaphore* pSemaphore)
3236{
3237 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003238
Jeremy Hayes99a96322015-06-26 12:48:09 -06003239 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3240
3241 PostCreateSemaphore(device, pSemaphore, result);
3242
3243 return result;
3244}
3245
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003246bool PostDestroySemaphore(
3247 VkDevice device,
3248 VkSemaphore semaphore,
3249 VkResult result)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003250{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003251
3252
3253 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003254 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003255 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3256 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3257 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003258 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003259
3260 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003261}
3262
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003263VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3264 VkDevice device,
3265 VkSemaphore semaphore)
3266{
3267 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3268
3269 PostDestroySemaphore(device, semaphore, result);
3270
3271 return result;
3272}
3273
3274bool PostQueueSignalSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003275 VkQueue queue,
3276 VkSemaphore semaphore,
3277 VkResult result)
3278{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003279
Jeremy Hayes99a96322015-06-26 12:48:09 -06003280
3281 if(result != VK_SUCCESS)
3282 {
3283 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003284 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3285 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003286 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003287
3288 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003289}
3290
3291VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3292 VkQueue queue,
3293 VkSemaphore semaphore)
3294{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003295 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3296
3297 PostQueueSignalSemaphore(queue, semaphore, result);
3298
3299 return result;
3300}
3301
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003302bool PostQueueWaitSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003303 VkQueue queue,
3304 VkSemaphore semaphore,
3305 VkResult result)
3306{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003307
Jeremy Hayes99a96322015-06-26 12:48:09 -06003308
3309 if(result != VK_SUCCESS)
3310 {
3311 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003312 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3313 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003314 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003315
3316 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003317}
3318
3319VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3320 VkQueue queue,
3321 VkSemaphore semaphore)
3322{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003323 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3324
3325 PostQueueWaitSemaphore(queue, semaphore, result);
3326
3327 return result;
3328}
3329
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003330bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003331 VkDevice device,
3332 const VkEventCreateInfo* pCreateInfo)
3333{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003334 if(pCreateInfo == nullptr)
3335 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003336 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003337 "vkCreateEvent parameter, const VkEventCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003338 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003339 }
3340 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3341 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3342 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003343 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003344 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003345 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003346 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003347
3348 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003349}
3350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003351bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003352 VkDevice device,
3353 VkEvent* pEvent,
3354 VkResult result)
3355{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003356
3357 if(pEvent == nullptr)
3358 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003359 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003360 "vkCreateEvent parameter, VkEvent* pEvent, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003361 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003362 }
3363
3364 if(result != VK_SUCCESS)
3365 {
3366 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3368 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003369 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003370
3371 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003372}
3373
3374VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3375 VkDevice device,
3376 const VkEventCreateInfo* pCreateInfo,
3377 VkEvent* pEvent)
3378{
3379 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003380
Jeremy Hayes99a96322015-06-26 12:48:09 -06003381 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3382
3383 PostCreateEvent(device, pEvent, result);
3384
3385 return result;
3386}
3387
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003388bool PostDestroyEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003389 VkDevice device,
3390 VkEvent event,
3391 VkResult result)
3392{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003393
3394
3395 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003396 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003397 std::string reason = "vkDestroyEvent parameter, VkResult result, is " + EnumeratorString(result);
3398 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3399 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003400 }
3401
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003402 return true;
3403}
3404
3405VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3406 VkDevice device,
3407 VkEvent event)
3408{
3409 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3410
3411 PostDestroyEvent(device, event, result);
3412
3413 return result;
3414}
3415
3416bool PostGetEventStatus(
3417 VkDevice device,
3418 VkEvent event,
3419 VkResult result)
3420{
3421
Jeremy Hayes99a96322015-06-26 12:48:09 -06003422
3423 if(result != VK_SUCCESS)
3424 {
3425 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003426 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3427 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003428 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003429
3430 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003431}
3432
3433VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3434 VkDevice device,
3435 VkEvent event)
3436{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003437 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3438
3439 PostGetEventStatus(device, event, result);
3440
3441 return result;
3442}
3443
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003444bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003445 VkDevice device,
3446 VkEvent event,
3447 VkResult result)
3448{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003449
Jeremy Hayes99a96322015-06-26 12:48:09 -06003450
3451 if(result != VK_SUCCESS)
3452 {
3453 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003454 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3455 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003456 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003457
3458 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003459}
3460
3461VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3462 VkDevice device,
3463 VkEvent event)
3464{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003465 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3466
3467 PostSetEvent(device, event, result);
3468
3469 return result;
3470}
3471
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003472bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003473 VkDevice device,
3474 VkEvent event,
3475 VkResult result)
3476{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003477
Jeremy Hayes99a96322015-06-26 12:48:09 -06003478
3479 if(result != VK_SUCCESS)
3480 {
3481 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003482 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3483 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003484 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003485
3486 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003487}
3488
3489VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3490 VkDevice device,
3491 VkEvent event)
3492{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003493 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3494
3495 PostResetEvent(device, event, result);
3496
3497 return result;
3498}
3499
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003500bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003501 VkDevice device,
3502 const VkQueryPoolCreateInfo* pCreateInfo)
3503{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003504 if(pCreateInfo == nullptr)
3505 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003506 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003507 "vkCreateQueryPool parameter, const VkQueryPoolCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003508 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003509 }
3510 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3511 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3512 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003513 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003514 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003515 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003516 }
3517 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3518 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3519 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003520 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003521 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003522 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003523 }
3524 if(!ValidateEnumerator((VkQueryPipelineStatisticFlagBits)pCreateInfo->pipelineStatistics))
3525 {
3526 std::string reason = "vkCreateQueryPool parameter, VkQueryPipelineStatisticFlags pCreateInfo->pipelineStatistics, is " + EnumeratorString((VkQueryPipelineStatisticFlagBits)pCreateInfo->pipelineStatistics);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003527 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3528 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003529 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003530
3531 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003532}
3533
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003534bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003535 VkDevice device,
3536 VkQueryPool* pQueryPool,
3537 VkResult result)
3538{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003539
3540 if(pQueryPool == nullptr)
3541 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003542 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003543 "vkCreateQueryPool parameter, VkQueryPool* pQueryPool, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003544 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003545 }
3546
3547 if(result != VK_SUCCESS)
3548 {
3549 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003550 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3551 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003552 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003553
3554 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003555}
3556
3557VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3558 VkDevice device,
3559 const VkQueryPoolCreateInfo* pCreateInfo,
3560 VkQueryPool* pQueryPool)
3561{
3562 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003563
Jeremy Hayes99a96322015-06-26 12:48:09 -06003564 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3565
3566 PostCreateQueryPool(device, pQueryPool, result);
3567
3568 return result;
3569}
3570
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003571bool PostDestroyQueryPool(
3572 VkDevice device,
3573 VkQueryPool queryPool,
3574 VkResult result)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003575{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003576
3577
3578 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003579 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003580 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3581 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3582 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003583 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003584
3585 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003586}
3587
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003588VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3589 VkDevice device,
3590 VkQueryPool queryPool)
3591{
3592 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3593
3594 PostDestroyQueryPool(device, queryPool, result);
3595
3596 return result;
3597}
3598
3599bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003600 VkDevice device,
3601 VkQueryPool queryPool,
3602 uint32_t startQuery,
3603 uint32_t queryCount,
3604 size_t* pDataSize,
3605 void* pData,
3606 VkQueryResultFlags flags,
3607 VkResult result)
3608{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003609
Jeremy Hayes99a96322015-06-26 12:48:09 -06003610
3611
3612
3613 if(pDataSize == nullptr)
3614 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003615 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003616 "vkGetQueryPoolResults parameter, size_t* pDataSize, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003617 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003618 }
3619
3620 if(pData == nullptr)
3621 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003622 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003623 "vkGetQueryPoolResults parameter, void* pData, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003624 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003625 }
3626
3627 if(!ValidateEnumerator((VkQueryResultFlagBits)flags))
3628 {
3629 std::string reason = "vkGetQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3631 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003632 }
3633
3634 if(result != VK_SUCCESS)
3635 {
3636 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003637 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3638 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003639 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003640
3641 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003642}
3643
3644VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3645 VkDevice device,
3646 VkQueryPool queryPool,
3647 uint32_t startQuery,
3648 uint32_t queryCount,
3649 size_t* pDataSize,
3650 void* pData,
3651 VkQueryResultFlags flags)
3652{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003653 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3654
3655 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3656
3657 return result;
3658}
3659
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003660bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003661 VkDevice device,
3662 const VkBufferCreateInfo* pCreateInfo)
3663{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003664 if(pCreateInfo == nullptr)
3665 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003666 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003667 "vkCreateBuffer parameter, const VkBufferCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003668 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003669 }
3670 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3671 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3672 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003673 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003674 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003675 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003676 }
3677 if(!ValidateEnumerator((VkBufferUsageFlagBits)pCreateInfo->usage))
3678 {
3679 std::string reason = "vkCreateBuffer parameter, VkBufferUsageFlags pCreateInfo->usage, is " + EnumeratorString((VkBufferUsageFlagBits)pCreateInfo->usage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003680 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3681 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003682 }
3683 if(!ValidateEnumerator((VkBufferCreateFlagBits)pCreateInfo->flags))
3684 {
3685 std::string reason = "vkCreateBuffer parameter, VkBufferCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkBufferCreateFlagBits)pCreateInfo->flags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003686 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3687 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003688 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003689
3690 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003691}
3692
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003693bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003694 VkDevice device,
3695 VkBuffer* pBuffer,
3696 VkResult result)
3697{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003698
3699 if(pBuffer == nullptr)
3700 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003701 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003702 "vkCreateBuffer parameter, VkBuffer* pBuffer, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003703 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003704 }
3705
3706 if(result != VK_SUCCESS)
3707 {
3708 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3710 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003711 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003712
3713 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003714}
3715
3716VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3717 VkDevice device,
3718 const VkBufferCreateInfo* pCreateInfo,
3719 VkBuffer* pBuffer)
3720{
3721 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003722
Jeremy Hayes99a96322015-06-26 12:48:09 -06003723 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3724
3725 PostCreateBuffer(device, pBuffer, result);
3726
3727 return result;
3728}
3729
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003730bool PostDestroyBuffer(
3731 VkDevice device,
3732 VkBuffer buffer,
3733 VkResult result)
3734{
3735
3736
3737 if(result != VK_SUCCESS)
3738 {
3739 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3740 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3741 return false;
3742 }
3743
3744 return true;
3745}
3746
3747VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3748 VkDevice device,
3749 VkBuffer buffer)
3750{
3751 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
3752
3753 PostDestroyBuffer(device, buffer, result);
3754
3755 return result;
3756}
3757
3758bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003759 VkDevice device,
3760 const VkBufferViewCreateInfo* pCreateInfo)
3761{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003762 if(pCreateInfo == nullptr)
3763 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003764 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003765 "vkCreateBufferView parameter, const VkBufferViewCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003766 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003767 }
3768 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3769 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3770 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003771 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003772 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003773 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003774 }
3775 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3776 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3777 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003778 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003779 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003780 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003781 }
3782 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3783 pCreateInfo->format > VK_FORMAT_END_RANGE)
3784 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003785 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003786 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003787 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003788 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003789
3790 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003791}
3792
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003793bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003794 VkDevice device,
3795 VkBufferView* pView,
3796 VkResult result)
3797{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003798
3799 if(pView == nullptr)
3800 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003801 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003802 "vkCreateBufferView parameter, VkBufferView* pView, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003803 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003804 }
3805
3806 if(result != VK_SUCCESS)
3807 {
3808 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003809 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3810 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003811 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003812
3813 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003814}
3815
3816VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3817 VkDevice device,
3818 const VkBufferViewCreateInfo* pCreateInfo,
3819 VkBufferView* pView)
3820{
3821 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003822
Jeremy Hayes99a96322015-06-26 12:48:09 -06003823 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3824
3825 PostCreateBufferView(device, pView, result);
3826
3827 return result;
3828}
3829
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003830bool PostDestroyBufferView(
3831 VkDevice device,
3832 VkBufferView bufferView,
3833 VkResult result)
3834{
3835
3836
3837 if(result != VK_SUCCESS)
3838 {
3839 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
3840 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3841 return false;
3842 }
3843
3844 return true;
3845}
3846
3847VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
3848 VkDevice device,
3849 VkBufferView bufferView)
3850{
3851 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
3852
3853 PostDestroyBufferView(device, bufferView, result);
3854
3855 return result;
3856}
3857
3858bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003859 VkDevice device,
3860 const VkImageCreateInfo* pCreateInfo)
3861{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003862 if(pCreateInfo == nullptr)
3863 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003864 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003865 "vkCreateImage parameter, const VkImageCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003866 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003867 }
3868 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
3869 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
3870 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003871 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003872 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003873 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003874 }
3875 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3876 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3877 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003878 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003879 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003880 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003881 }
3882 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3883 pCreateInfo->format > VK_FORMAT_END_RANGE)
3884 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003885 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003886 "vkCreateImage parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003887 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003888 }
3889 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3890 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3891 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003893 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003894 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003895 }
3896 if(!ValidateEnumerator((VkImageUsageFlagBits)pCreateInfo->usage))
3897 {
3898 std::string reason = "vkCreateImage parameter, VkImageUsageFlags pCreateInfo->usage, is " + EnumeratorString((VkImageUsageFlagBits)pCreateInfo->usage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003899 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3900 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003901 }
3902 if(!ValidateEnumerator((VkImageCreateFlagBits)pCreateInfo->flags))
3903 {
3904 std::string reason = "vkCreateImage parameter, VkImageCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkImageCreateFlagBits)pCreateInfo->flags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003905 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3906 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003907 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003908
3909 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003910}
3911
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003912bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003913 VkDevice device,
3914 VkImage* pImage,
3915 VkResult result)
3916{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003917
3918 if(pImage == nullptr)
3919 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003920 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003921 "vkCreateImage parameter, VkImage* pImage, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003922 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003923 }
3924
3925 if(result != VK_SUCCESS)
3926 {
3927 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003928 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3929 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003930 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003931
3932 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003933}
3934
Jeremy Hayes99a96322015-06-26 12:48:09 -06003935VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3936 VkDevice device,
3937 const VkImageCreateInfo* pCreateInfo,
3938 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003939{
3940 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003941
Jeremy Hayes99a96322015-06-26 12:48:09 -06003942 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3943
3944 PostCreateImage(device, pImage, result);
3945
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003946 return result;
3947}
3948
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003949bool PostDestroyImage(
3950 VkDevice device,
3951 VkImage image,
3952 VkResult result)
3953{
3954
3955
3956 if(result != VK_SUCCESS)
3957 {
3958 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
3959 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3960 return false;
3961 }
3962
3963 return true;
3964}
3965
3966VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
3967 VkDevice device,
3968 VkImage image)
3969{
3970 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
3971
3972 PostDestroyImage(device, image, result);
3973
3974 return result;
3975}
3976
3977bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003978 VkDevice device,
3979 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003980{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003981 if(pSubresource == nullptr)
3982 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003983 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003984 "vkGetImageSubresourceLayout parameter, const VkImageSubresource* pSubresource, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003985 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003986 }
3987 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3988 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
3989 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003990 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06003991 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003992 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003993 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003994
3995 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003996}
3997
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003998bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003999 VkDevice device,
4000 VkImage image,
4001 VkSubresourceLayout* pLayout,
4002 VkResult result)
4003{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004004
Jeremy Hayes99a96322015-06-26 12:48:09 -06004005
4006 if(pLayout == nullptr)
4007 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004009 "vkGetImageSubresourceLayout parameter, VkSubresourceLayout* pLayout, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004010 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004011 }
4012
4013 if(result != VK_SUCCESS)
4014 {
4015 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4017 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004018 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004019
4020 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004021}
4022
4023VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4024 VkDevice device,
4025 VkImage image,
4026 const VkImageSubresource* pSubresource,
4027 VkSubresourceLayout* pLayout)
4028{
4029 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004030
Jeremy Hayes99a96322015-06-26 12:48:09 -06004031 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4032
4033 PostGetImageSubresourceLayout(device, image, pLayout, result);
4034
4035 return result;
4036}
4037
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004038bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004039 VkDevice device,
4040 const VkImageViewCreateInfo* pCreateInfo)
4041{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004042 if(pCreateInfo == nullptr)
4043 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004044 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004045 "vkCreateImageView parameter, const VkImageViewCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004046 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004047 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004048 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4049 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004050 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004051 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004052 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004053 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004054 }
4055 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4056 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4057 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004058 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004059 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004060 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004061 }
4062 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4063 pCreateInfo->format > VK_FORMAT_END_RANGE)
4064 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004065 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004066 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004067 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004068 }
4069 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4070 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4071 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004072 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004073 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004074 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004075 }
4076 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4077 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4078 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004079 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004080 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004081 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004082 }
4083 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4084 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4085 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004086 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004087 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004088 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004089 }
4090 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4091 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4092 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004093 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004094 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004095 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004096 }
4097 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4098 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4099 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004100 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004101 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004102 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004103 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004104
4105 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004106}
4107
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004108bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004109 VkDevice device,
4110 VkImageView* pView,
4111 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004112{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004113
4114 if(pView == nullptr)
4115 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004116 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004117 "vkCreateImageView parameter, VkImageView* pView, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004118 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004119 }
4120
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06004121 if(result != VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004122 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004123 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004124 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4125 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004126 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004127
4128 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004129}
4130
4131VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4132 VkDevice device,
4133 const VkImageViewCreateInfo* pCreateInfo,
4134 VkImageView* pView)
4135{
4136 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004137
Jeremy Hayes99a96322015-06-26 12:48:09 -06004138 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4139
4140 PostCreateImageView(device, pView, result);
4141
4142 return result;
4143}
4144
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004145bool PostDestroyImageView(
4146 VkDevice device,
4147 VkImageView imageView,
4148 VkResult result)
4149{
4150
4151
4152 if(result != VK_SUCCESS)
4153 {
4154 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4155 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4156 return false;
4157 }
4158
4159 return true;
4160}
4161
4162VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4163 VkDevice device,
4164 VkImageView imageView)
4165{
4166 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4167
4168 PostDestroyImageView(device, imageView, result);
4169
4170 return result;
4171}
4172
Chia-I Wu08accc62015-07-07 11:50:03 +08004173void PreCreateAttachmentView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004174 VkDevice device,
Chia-I Wu08accc62015-07-07 11:50:03 +08004175 const VkAttachmentViewCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004176{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004177 if(pCreateInfo == nullptr)
4178 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004179 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08004180 "vkCreateAttachmentView parameter, const VkAttachmentViewCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes99a96322015-06-26 12:48:09 -06004181 return;
4182 }
4183 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4184 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4185 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004186 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08004187 "vkCreateAttachmentView parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes99a96322015-06-26 12:48:09 -06004188 return;
4189 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004190 if(pCreateInfo->image.handle == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004191 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004192 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08004193 "vkCreateAttachmentView parameter, VkImage pCreateInfo->image, is null pointer");
Jeremy Hayes99a96322015-06-26 12:48:09 -06004194 return;
4195 }
4196 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4197 pCreateInfo->format > VK_FORMAT_END_RANGE)
4198 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004199 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08004200 "vkCreateAttachmentView parameter, VkFormat pCreateInfo->format, is unrecognized enumerator");
Jeremy Hayes99a96322015-06-26 12:48:09 -06004201 return;
4202 }
Chia-I Wu08accc62015-07-07 11:50:03 +08004203 if(!ValidateEnumerator((VkAttachmentViewCreateFlagBits)pCreateInfo->flags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06004204 {
Chia-I Wu08accc62015-07-07 11:50:03 +08004205 std::string reason = "vkCreateAttachmentView parameter, VkAttachmentViewCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkAttachmentViewCreateFlagBits)pCreateInfo->flags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004206 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes99a96322015-06-26 12:48:09 -06004207 return;
4208 }
4209}
4210
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004211bool PostDestroyAttachmentView(
4212 VkDevice device,
4213 VkAttachmentView attachmentView,
4214 VkResult result)
4215{
4216
4217
4218 if(result != VK_SUCCESS)
4219 {
4220 std::string reason = "vkDestroyAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4222 return false;
4223 }
4224
4225 return true;
4226}
4227
4228VK_LAYER_EXPORT VkResult VKAPI vkDestroyAttachmentView(
4229 VkDevice device,
4230 VkAttachmentView attachmentView)
4231{
4232 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyAttachmentView(device, attachmentView);
4233
4234 PostDestroyAttachmentView(device, attachmentView, result);
4235
4236 return result;
4237}
4238
4239
Chia-I Wu08accc62015-07-07 11:50:03 +08004240void PostCreateAttachmentView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004241 VkDevice device,
Chia-I Wu08accc62015-07-07 11:50:03 +08004242 VkAttachmentView* pView,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004243 VkResult result)
4244{
4245 if(device == nullptr)
4246 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004247 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08004248 "vkCreateAttachmentView parameter, VkDevice device, is null pointer");
Jeremy Hayes99a96322015-06-26 12:48:09 -06004249 return;
4250 }
4251
4252 if(pView == nullptr)
4253 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004254 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08004255 "vkCreateAttachmentView parameter, VkAttachmentView* pView, is null pointer");
Jeremy Hayes99a96322015-06-26 12:48:09 -06004256 return;
4257 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004258 if((*pView).handle == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004259 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004260 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08004261 "vkCreateAttachmentView parameter, VkAttachmentView* pView, is null pointer");
Jeremy Hayes99a96322015-06-26 12:48:09 -06004262 return;
4263 }
4264
4265 if(result != VK_SUCCESS)
4266 {
Chia-I Wu08accc62015-07-07 11:50:03 +08004267 std::string reason = "vkCreateAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004268 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes99a96322015-06-26 12:48:09 -06004269 return;
4270 }
4271}
4272
Chia-I Wu08accc62015-07-07 11:50:03 +08004273VK_LAYER_EXPORT VkResult VKAPI vkCreateAttachmentView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004274 VkDevice device,
Chia-I Wu08accc62015-07-07 11:50:03 +08004275 const VkAttachmentViewCreateInfo* pCreateInfo,
4276 VkAttachmentView* pView)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004277{
Chia-I Wu08accc62015-07-07 11:50:03 +08004278 PreCreateAttachmentView(device, pCreateInfo);
4279 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateAttachmentView(device, pCreateInfo, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004280
Chia-I Wu08accc62015-07-07 11:50:03 +08004281 PostCreateAttachmentView(device, pView, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004282
4283 return result;
4284}
4285
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004286bool PostDestroyShaderModule(
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004287 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004288 VkShaderModule shaderModule,
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004289 VkResult result)
4290{
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004291
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004292
4293 if(result != VK_SUCCESS)
4294 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004295 std::string reason = "vkDestroyShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4296 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4297 return false;
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004298 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004299
4300 return true;
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004301}
4302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004303VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004304 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004305 VkShaderModule shaderModule)
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004306{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004307 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004308
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004309 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004310
4311 return result;
4312}
4313
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004314bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004315 VkDevice device,
4316 const VkShaderCreateInfo* pCreateInfo)
4317{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004318 if(pCreateInfo == nullptr)
4319 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004320 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004321 "vkCreateShader parameter, const VkShaderCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004322 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004323 }
4324 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4325 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4326 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004327 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004328 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004329 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004330 }
Courtney Goeltzenleuchteree4027d2015-06-28 13:01:17 -06004331 if(pCreateInfo->pName == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004332 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004333 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4334 "vkCreateShader parameter, const char* pCreateInfo->pName, is null pointer");
4335 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004336 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004337
4338 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004339}
4340
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004341bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004342 VkDevice device,
4343 VkShader* pShader,
4344 VkResult result)
4345{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004346
4347 if(pShader == nullptr)
4348 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004349 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004350 "vkCreateShader parameter, VkShader* pShader, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004351 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004352 }
4353
4354 if(result != VK_SUCCESS)
4355 {
4356 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004357 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4358 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004359 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004360
4361 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004362}
4363
4364VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4365 VkDevice device,
4366 const VkShaderCreateInfo* pCreateInfo,
4367 VkShader* pShader)
4368{
4369 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004370
Jeremy Hayes99a96322015-06-26 12:48:09 -06004371 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4372
4373 PostCreateShader(device, pShader, result);
4374
4375 return result;
4376}
4377
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004378bool PostDestroyShader(
4379 VkDevice device,
4380 VkShader shader,
4381 VkResult result)
4382{
4383 if(result != VK_SUCCESS)
4384 {
4385 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4386 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4387 return false;
4388 }
4389
4390 return true;
4391}
4392
4393VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4394 VkDevice device,
4395 VkShader shader)
4396{
4397 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4398
4399 PostDestroyShader(device, shader, result);
4400
4401 return result;
4402}
4403
Jon Ashburnc669cc62015-07-09 15:02:25 -06004404//TODO handle count > 1
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004405bool PreCreateGraphicsPipeline(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004406 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06004407 uint32_t count,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004408 const VkGraphicsPipelineCreateInfo* pCreateInfo)
4409{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004410 if(pCreateInfo == nullptr)
4411 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004412 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004413 "vkCreateGraphicsPipeline parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004414 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004415 }
4416 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4417 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4418 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004419 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004420 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004421 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004422 }
4423 if(pCreateInfo->pStages == nullptr)
4424 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004425 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004426 "vkCreateGraphicsPipeline parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004427 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004428 }
4429 if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4430 pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE)
4431 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004432 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004433 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004434 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004435 }
4436 if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4437 pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4438 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004439 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004440 "vkCreateGraphicsPipeline parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004441 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004442 }
4443 if(pCreateInfo->pStages->pSpecializationInfo == nullptr)
4444 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004446 "vkCreateGraphicsPipeline parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004447 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004448 }
4449 if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr)
4450 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004451 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004452 "vkCreateGraphicsPipeline parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004453 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004454 }
4455 if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr)
4456 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004457 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004458 "vkCreateGraphicsPipeline parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004459 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004460 }
4461 if(pCreateInfo->pVertexInputState == nullptr)
4462 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004463 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004464 "vkCreateGraphicsPipeline parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004465 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004466 }
4467 if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4468 pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4469 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004470 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004471 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004472 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004473 }
4474 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr)
4475 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004476 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004477 "vkCreateGraphicsPipeline parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004478 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004479 }
4480 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4481 pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4482 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004483 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004484 "vkCreateGraphicsPipeline parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004485 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004486 }
4487 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr)
4488 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004489 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004490 "vkCreateGraphicsPipeline parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004491 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004492 }
4493 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4494 pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4495 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004496 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004497 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004498 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004499 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004500 if(pCreateInfo->pInputAssemblyState == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004501 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004502 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004503 "vkCreateGraphicsPipeline parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004504 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004505 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004506 if(pCreateInfo->pInputAssemblyState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4507 pCreateInfo->pInputAssemblyState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004508 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004509 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004510 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004511 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004512 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004513 if(pCreateInfo->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4514 pCreateInfo->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004515 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004516 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004517 "vkCreateGraphicsPipeline parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004518 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004519 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004520 if(pCreateInfo->pTessellationState == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004521 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004522 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004523 "vkCreateGraphicsPipeline parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004524 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004525 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004526 if(pCreateInfo->pTessellationState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4527 pCreateInfo->pTessellationState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004528 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004529 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004530 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004531 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004532 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004533 if(pCreateInfo->pViewportState == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004534 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004535 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004536 "vkCreateGraphicsPipeline parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004537 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004538 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004539 if(pCreateInfo->pViewportState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4540 pCreateInfo->pViewportState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004541 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004542 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004543 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004544 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004545 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004546 if(pCreateInfo->pViewportState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4547 pCreateInfo->pViewportState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004548 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004549 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004550 "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004551 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004552 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004553 if(pCreateInfo->pViewportState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE ||
4554 pCreateInfo->pViewportState->depthMode > VK_DEPTH_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004555 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004556 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004557 "vkCreateGraphicsPipeline parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004558 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004559 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004560 if(pCreateInfo->pRasterState == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004561 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004562 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004563 "vkCreateGraphicsPipeline parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004564 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004565 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004566 if(pCreateInfo->pRasterState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4567 pCreateInfo->pRasterState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004568 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004569 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004570 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004571 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004572 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004573 if(pCreateInfo->pRasterState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4574 pCreateInfo->pRasterState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004575 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004576 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004577 "vkCreateGraphicsPipeline parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004578 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004579 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004580 if(pCreateInfo->pRasterState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE ||
4581 pCreateInfo->pRasterState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004582 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004583 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004584 "vkCreateGraphicsPipeline parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004585 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004586 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004587 if(pCreateInfo->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4588 pCreateInfo->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004589 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004590 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004591 "vkCreateGraphicsPipeline parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004592 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004593 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004594 if(pCreateInfo->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4595 pCreateInfo->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004596 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004597 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004598 "vkCreateGraphicsPipeline parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004599 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004600 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004601 if(pCreateInfo->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4602 pCreateInfo->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004603 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004604 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004605 "vkCreateGraphicsPipeline parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004606 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004607 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004608 if(pCreateInfo->pMultisampleState == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004609 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004610 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004611 "vkCreateGraphicsPipeline parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004612 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004613 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004614 if(pCreateInfo->pMultisampleState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4615 pCreateInfo->pMultisampleState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004616 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004617 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004618 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004619 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004620 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004621 if(pCreateInfo->pDepthStencilState == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004622 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004623 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004624 "vkCreateGraphicsPipeline parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004625 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004626 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004627 if(pCreateInfo->pDepthStencilState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4628 pCreateInfo->pDepthStencilState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004629 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004631 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004632 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004633 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004634 if(pCreateInfo->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4635 pCreateInfo->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004636 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004637 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004638 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004639 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004640 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004641 if(pCreateInfo->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4642 pCreateInfo->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004643 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004644 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004645 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004646 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004647 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004648 if(pCreateInfo->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4649 pCreateInfo->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004650 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004651 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004652 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004653 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004654 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004655 if(pCreateInfo->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4656 pCreateInfo->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004657 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004658 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004659 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004660 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004661 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004662 if(pCreateInfo->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4663 pCreateInfo->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004664 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004665 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004666 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004667 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004668 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004669 if(pCreateInfo->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4670 pCreateInfo->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004671 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004672 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004673 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004674 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004675 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004676 if(pCreateInfo->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4677 pCreateInfo->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004678 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004679 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004680 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004681 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004682 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004683 if(pCreateInfo->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4684 pCreateInfo->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004685 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004686 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004687 "vkCreateGraphicsPipeline parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004688 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004689 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004690 if(pCreateInfo->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4691 pCreateInfo->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004692 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004693 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004694 "vkCreateGraphicsPipeline parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004695 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004696 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004697 if(pCreateInfo->pColorBlendState == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004698 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004699 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004700 "vkCreateGraphicsPipeline parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004701 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004702 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004703 if(pCreateInfo->pColorBlendState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4704 pCreateInfo->pColorBlendState->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004705 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004706 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004707 "vkCreateGraphicsPipeline parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004708 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004709 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004710 if(pCreateInfo->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4711 pCreateInfo->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004712 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004713 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004714 "vkCreateGraphicsPipeline parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004715 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004716 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004717 if(pCreateInfo->pColorBlendState->pAttachments == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004718 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004719 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004720 "vkCreateGraphicsPipeline parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004721 return false;
4722 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004723 if(pCreateInfo->pColorBlendState->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4724 pCreateInfo->pColorBlendState->pAttachments->format > VK_FORMAT_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004725 {
4726 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4727 "vkCreateGraphicsPipeline parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator");
4728 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004729 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004730 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4731 pCreateInfo->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004732 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004733 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004734 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004735 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004736 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004737 if(pCreateInfo->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4738 pCreateInfo->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004739 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004740 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004741 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004742 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004743 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004744 if(pCreateInfo->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4745 pCreateInfo->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004746 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004747 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004748 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004749 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004750 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004751 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4752 pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004753 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004754 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004755 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004756 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004757 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004758 if(pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4759 pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004760 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004761 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004762 "vkCreateGraphicsPipeline parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004763 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004764 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004765 if(pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4766 pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004767 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004768 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06004769 "vkCreateGraphicsPipeline parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004770 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004771 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004772 if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask))
Jeremy Hayes99a96322015-06-26 12:48:09 -06004773 {
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004774 std::string reason = "vkCreateGraphicsPipeline parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask);
4775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004776 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004777 }
4778 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
4779 {
4780 std::string reason = "vkCreateGraphicsPipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004781 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4782 return false;
4783 }
4784
4785 return true;
4786}
4787
4788bool PostCreateGraphicsPipeline(
4789 VkDevice device,
4790 VkPipeline* pPipeline,
4791 VkResult result)
4792{
4793
4794 if(pPipeline == nullptr)
4795 {
4796 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4797 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
4798 return false;
4799 }
4800
4801 if(result != VK_SUCCESS)
4802 {
4803 std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
4804 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4805 return false;
4806 }
4807
4808 return true;
4809}
4810
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004811bool PostDestroyPipeline(
4812 VkDevice device,
4813 VkPipeline pipeline,
4814 VkResult result)
4815{
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004816 if(result != VK_SUCCESS)
4817 {
4818 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
4819 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4820 return false;
4821 }
4822
4823 return true;
4824}
4825
Tony Barbourdd6e32e2015-07-10 15:29:03 -06004826bool PreCreateGraphicsPipelineDerivative(
4827 VkDevice device,
4828 const VkGraphicsPipelineCreateInfo* pCreateInfo)
4829{
4830 if(pCreateInfo == nullptr)
4831 {
4832 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4833 "vkCreateGraphicsPipelineDerivative parameter, const VkGraphicsPipelineCreateInfo* pCreateInfo, is null pointer");
4834 return false;
4835 }
4836 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4837 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
4838 {
4839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4840 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
4841 return false;
4842 }
4843 if(pCreateInfo->pStages == nullptr)
4844 {
4845 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4846 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineShaderStageCreateInfo* pCreateInfo->pStages, is null pointer");
4847 return false;
4848 }
4849 if(pCreateInfo->pStages->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4850 pCreateInfo->pStages->sType > VK_STRUCTURE_TYPE_END_RANGE)
4851 {
4852 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4853 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pStages->sType, is unrecognized enumerator");
4854 return false;
4855 }
4856 if(pCreateInfo->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4857 pCreateInfo->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4858 {
4859 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4860 "vkCreateGraphicsPipelineDerivative parameter, VkShaderStage pCreateInfo->pStages->stage, is unrecognized enumerator");
4861 return false;
4862 }
4863 if(pCreateInfo->pStages->pSpecializationInfo == nullptr)
4864 {
4865 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4866 "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationInfo* pCreateInfo->pStages->pSpecializationInfo, is null pointer");
4867 return false;
4868 }
4869 if(pCreateInfo->pStages->pSpecializationInfo->pMap == nullptr)
4870 {
4871 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4872 "vkCreateGraphicsPipelineDerivative parameter, const VkSpecializationMapEntry* pCreateInfo->pStages->pSpecializationInfo->pMap, is null pointer");
4873 return false;
4874 }
4875 if(pCreateInfo->pStages->pSpecializationInfo->pData == nullptr)
4876 {
4877 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4878 "vkCreateGraphicsPipelineDerivative parameter, const void* pCreateInfo->pStages->pSpecializationInfo->pData, is null pointer");
4879 return false;
4880 }
4881 if(pCreateInfo->pVertexInputState == nullptr)
4882 {
4883 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4884 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVertexInputStateCreateInfo* pCreateInfo->pVertexInputState, is null pointer");
4885 return false;
4886 }
4887 if(pCreateInfo->pVertexInputState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4888 pCreateInfo->pVertexInputState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4889 {
4890 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4891 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVertexInputState->sType, is unrecognized enumerator");
4892 return false;
4893 }
4894 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions == nullptr)
4895 {
4896 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4897 "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputBindingDescription* pCreateInfo->pVertexInputState->pVertexBindingDescriptions, is null pointer");
4898 return false;
4899 }
4900 if(pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4901 pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4902 {
4903 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4904 "vkCreateGraphicsPipelineDerivative parameter, VkVertexInputStepRate pCreateInfo->pVertexInputState->pVertexBindingDescriptions->stepRate, is unrecognized enumerator");
4905 return false;
4906 }
4907 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions == nullptr)
4908 {
4909 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4910 "vkCreateGraphicsPipelineDerivative parameter, const VkVertexInputAttributeDescription* pCreateInfo->pVertexInputState->pVertexAttributeDescriptions, is null pointer");
4911 return false;
4912 }
4913 if(pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4914 pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4915 {
4916 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4917 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pVertexInputState->pVertexAttributeDescriptions->format, is unrecognized enumerator");
4918 return false;
4919 }
4920 if(pCreateInfo->pInputAssemblyState == nullptr)
4921 {
4922 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4923 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineIaStateCreateInfo* pCreateInfo->pIaState, is null pointer");
4924 return false;
4925 }
4926 if(pCreateInfo->pInputAssemblyState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4927 pCreateInfo->pInputAssemblyState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4928 {
4929 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4930 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pIaState->sType, is unrecognized enumerator");
4931 return false;
4932 }
4933 if(pCreateInfo->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4934 pCreateInfo->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4935 {
4936 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4937 "vkCreateGraphicsPipelineDerivative parameter, VkPrimitiveTopology pCreateInfo->pIaState->topology, is unrecognized enumerator");
4938 return false;
4939 }
4940 if(pCreateInfo->pTessellationState == nullptr)
4941 {
4942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4943 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineTessStateCreateInfo* pCreateInfo->pTessState, is null pointer");
4944 return false;
4945 }
4946 if(pCreateInfo->pTessellationState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4947 pCreateInfo->pTessellationState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4948 {
4949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4950 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pTessState->sType, is unrecognized enumerator");
4951 return false;
4952 }
4953 if(pCreateInfo->pViewportState == nullptr)
4954 {
4955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4956 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineVpStateCreateInfo* pCreateInfo->pVpState, is null pointer");
4957 return false;
4958 }
4959 if(pCreateInfo->pViewportState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4960 pCreateInfo->pViewportState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4961 {
4962 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4963 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pVpState->sType, is unrecognized enumerator");
4964 return false;
4965 }
4966 if(pCreateInfo->pViewportState->clipOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4967 pCreateInfo->pViewportState->clipOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
4968 {
4969 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4970 "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pVpState->clipOrigin, is unrecognized enumerator");
4971 return false;
4972 }
4973 if(pCreateInfo->pViewportState->depthMode < VK_DEPTH_MODE_BEGIN_RANGE ||
4974 pCreateInfo->pViewportState->depthMode > VK_DEPTH_MODE_END_RANGE)
4975 {
4976 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4977 "vkCreateGraphicsPipelineDerivative parameter, VkDepthMode pCreateInfo->pVpState->depthMode, is unrecognized enumerator");
4978 return false;
4979 }
4980 if(pCreateInfo->pRasterState == nullptr)
4981 {
4982 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4983 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineRsStateCreateInfo* pCreateInfo->pRsState, is null pointer");
4984 return false;
4985 }
4986 if(pCreateInfo->pRasterState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
4987 pCreateInfo->pRasterState->sType > VK_STRUCTURE_TYPE_END_RANGE)
4988 {
4989 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4990 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pRsState->sType, is unrecognized enumerator");
4991 return false;
4992 }
4993 if(pCreateInfo->pRasterState->pointOrigin < VK_COORDINATE_ORIGIN_BEGIN_RANGE ||
4994 pCreateInfo->pRasterState->pointOrigin > VK_COORDINATE_ORIGIN_END_RANGE)
4995 {
4996 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4997 "vkCreateGraphicsPipelineDerivative parameter, VkCoordinateOrigin pCreateInfo->pRsState->pointOrigin, is unrecognized enumerator");
4998 return false;
4999 }
5000 if(pCreateInfo->pRasterState->provokingVertex < VK_PROVOKING_VERTEX_BEGIN_RANGE ||
5001 pCreateInfo->pRasterState->provokingVertex > VK_PROVOKING_VERTEX_END_RANGE)
5002 {
5003 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5004 "vkCreateGraphicsPipelineDerivative parameter, VkProvokingVertex pCreateInfo->pRsState->provokingVertex, is unrecognized enumerator");
5005 return false;
5006 }
5007 if(pCreateInfo->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
5008 pCreateInfo->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
5009 {
5010 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5011 "vkCreateGraphicsPipelineDerivative parameter, VkFillMode pCreateInfo->pRsState->fillMode, is unrecognized enumerator");
5012 return false;
5013 }
5014 if(pCreateInfo->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
5015 pCreateInfo->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
5016 {
5017 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5018 "vkCreateGraphicsPipelineDerivative parameter, VkCullMode pCreateInfo->pRsState->cullMode, is unrecognized enumerator");
5019 return false;
5020 }
5021 if(pCreateInfo->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
5022 pCreateInfo->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
5023 {
5024 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5025 "vkCreateGraphicsPipelineDerivative parameter, VkFrontFace pCreateInfo->pRsState->frontFace, is unrecognized enumerator");
5026 return false;
5027 }
5028 if(pCreateInfo->pMultisampleState == nullptr)
5029 {
5030 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5031 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineMsStateCreateInfo* pCreateInfo->pMsState, is null pointer");
5032 return false;
5033 }
5034 if(pCreateInfo->pMultisampleState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5035 pCreateInfo->pMultisampleState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5036 {
5037 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5038 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pMsState->sType, is unrecognized enumerator");
5039 return false;
5040 }
5041 if(pCreateInfo->pDepthStencilState == nullptr)
5042 {
5043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5044 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineDsStateCreateInfo* pCreateInfo->pDsState, is null pointer");
5045 return false;
5046 }
5047 if(pCreateInfo->pDepthStencilState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5048 pCreateInfo->pDepthStencilState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5049 {
5050 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5051 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pDsState->sType, is unrecognized enumerator");
5052 return false;
5053 }
Tony Barbourdd6e32e2015-07-10 15:29:03 -06005054 if(pCreateInfo->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5055 pCreateInfo->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
5056 {
5057 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5058 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->depthCompareOp, is unrecognized enumerator");
5059 return false;
5060 }
5061 if(pCreateInfo->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5062 pCreateInfo->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
5063 {
5064 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5065 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilFailOp, is unrecognized enumerator");
5066 return false;
5067 }
5068 if(pCreateInfo->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
5069 pCreateInfo->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5070 {
5071 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5072 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilPassOp, is unrecognized enumerator");
5073 return false;
5074 }
5075 if(pCreateInfo->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5076 pCreateInfo->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5077 {
5078 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5079 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->front.stencilDepthFailOp, is unrecognized enumerator");
5080 return false;
5081 }
5082 if(pCreateInfo->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5083 pCreateInfo->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5084 {
5085 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5086 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->front.stencilCompareOp, is unrecognized enumerator");
5087 return false;
5088 }
5089 if(pCreateInfo->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5090 pCreateInfo->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
5091 {
5092 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5093 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilFailOp, is unrecognized enumerator");
5094 return false;
5095 }
5096 if(pCreateInfo->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
5097 pCreateInfo->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
5098 {
5099 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5100 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilPassOp, is unrecognized enumerator");
5101 return false;
5102 }
5103 if(pCreateInfo->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
5104 pCreateInfo->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
5105 {
5106 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5107 "vkCreateGraphicsPipelineDerivative parameter, VkStencilOp pCreateInfo->pDsState->back.stencilDepthFailOp, is unrecognized enumerator");
5108 return false;
5109 }
5110 if(pCreateInfo->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5111 pCreateInfo->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
5112 {
5113 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5114 "vkCreateGraphicsPipelineDerivative parameter, VkCompareOp pCreateInfo->pDsState->back.stencilCompareOp, is unrecognized enumerator");
5115 return false;
5116 }
5117 if(pCreateInfo->pColorBlendState == nullptr)
5118 {
5119 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5120 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbStateCreateInfo* pCreateInfo->pCbState, is null pointer");
5121 return false;
5122 }
5123 if(pCreateInfo->pColorBlendState->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5124 pCreateInfo->pColorBlendState->sType > VK_STRUCTURE_TYPE_END_RANGE)
5125 {
5126 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5127 "vkCreateGraphicsPipelineDerivative parameter, VkStructureType pCreateInfo->pCbState->sType, is unrecognized enumerator");
5128 return false;
5129 }
5130 if(pCreateInfo->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
5131 pCreateInfo->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
5132 {
5133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5134 "vkCreateGraphicsPipelineDerivative parameter, VkLogicOp pCreateInfo->pCbState->logicOp, is unrecognized enumerator");
5135 return false;
5136 }
5137 if(pCreateInfo->pColorBlendState->pAttachments == nullptr)
5138 {
5139 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5140 "vkCreateGraphicsPipelineDerivative parameter, const VkPipelineCbAttachmentState* pCreateInfo->pCbState->pAttachments, is null pointer");
5141 return false;
5142 }
5143 if(pCreateInfo->pColorBlendState->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5144 pCreateInfo->pColorBlendState->pAttachments->format > VK_FORMAT_END_RANGE)
5145 {
5146 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5147 "vkCreateGraphicsPipelineDerivative parameter, VkFormat pCreateInfo->pCbState->pAttachments->format, is unrecognized enumerator");
5148 return false;
5149 }
5150 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
5151 pCreateInfo->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
5152 {
5153 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5154 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendColor, is unrecognized enumerator");
5155 return false;
5156 }
5157 if(pCreateInfo->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
5158 pCreateInfo->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
5159 {
5160 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5161 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendColor, is unrecognized enumerator");
5162 return false;
5163 }
5164 if(pCreateInfo->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
5165 pCreateInfo->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
5166 {
5167 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5168 "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpColor, is unrecognized enumerator");
5169 return false;
5170 }
5171 if(pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5172 pCreateInfo->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
5173 {
5174 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5175 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->srcBlendAlpha, is unrecognized enumerator");
5176 return false;
5177 }
5178 if(pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5179 pCreateInfo->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
5180 {
5181 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5182 "vkCreateGraphicsPipelineDerivative parameter, VkBlend pCreateInfo->pCbState->pAttachments->destBlendAlpha, is unrecognized enumerator");
5183 return false;
5184 }
5185 if(pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
5186 pCreateInfo->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
5187 {
5188 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5189 "vkCreateGraphicsPipelineDerivative parameter, VkBlendOp pCreateInfo->pCbState->pAttachments->blendOpAlpha, is unrecognized enumerator");
5190 return false;
5191 }
5192 if(!ValidateEnumerator((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask))
5193 {
5194 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkChannelFlags pCreateInfo->pCbState->pAttachments->channelWriteMask, is " + EnumeratorString((VkChannelFlagBits)pCreateInfo->pColorBlendState->pAttachments->channelWriteMask);
5195 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5196 return false;
5197 }
5198 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5199 {
5200 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5201 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5202 return false;
5203 }
5204
5205 return true;
5206}
5207
5208bool PostCreateGraphicsPipelineDerivative(
5209 VkDevice device,
5210 VkPipeline basePipeline,
5211 VkPipeline* pPipeline,
5212 VkResult result)
5213{
5214
5215
5216 if(pPipeline == nullptr)
5217 {
5218 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5219 "vkCreateGraphicsPipelineDerivative parameter, VkPipeline* pPipeline, is null pointer");
5220 return false;
5221 }
5222
5223 if(result != VK_SUCCESS)
5224 {
5225 std::string reason = "vkCreateGraphicsPipelineDerivative parameter, VkResult result, is " + EnumeratorString(result);
5226 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5227 return false;
5228 }
5229
5230 return true;
5231}
5232
Tony Barbourdd6e32e2015-07-10 15:29:03 -06005233bool PreCreateComputePipeline(
5234 VkDevice device,
5235 const VkComputePipelineCreateInfo* pCreateInfo)
5236{
5237 if(pCreateInfo == nullptr)
5238 {
5239 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5240 "vkCreateComputePipeline parameter, const VkComputePipelineCreateInfo* pCreateInfo, is null pointer");
5241 return false;
5242 }
5243 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5244 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5245 {
5246 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5247 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5248 return false;
5249 }
5250 if(pCreateInfo->cs.sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5251 pCreateInfo->cs.sType > VK_STRUCTURE_TYPE_END_RANGE)
5252 {
5253 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5254 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->cs.sType, is unrecognized enumerator");
5255 return false;
5256 }
5257 if(pCreateInfo->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5258 pCreateInfo->cs.stage > VK_SHADER_STAGE_END_RANGE)
5259 {
5260 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5261 "vkCreateComputePipeline parameter, VkShaderStage pCreateInfo->cs.stage, is unrecognized enumerator");
5262 return false;
5263 }
5264 if(pCreateInfo->cs.pSpecializationInfo == nullptr)
5265 {
5266 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5267 "vkCreateComputePipeline parameter, const VkSpecializationInfo* pCreateInfo->cs.pSpecializationInfo, is null pointer");
5268 return false;
5269 }
5270 if(pCreateInfo->cs.pSpecializationInfo->pMap == nullptr)
5271 {
5272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5273 "vkCreateComputePipeline parameter, const VkSpecializationMapEntry* pCreateInfo->cs.pSpecializationInfo->pMap, is null pointer");
5274 return false;
5275 }
5276 if(pCreateInfo->cs.pSpecializationInfo->pData == nullptr)
5277 {
5278 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5279 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pSpecializationInfo->pData, is null pointer");
5280 return false;
5281 }
5282 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5283 {
5284 std::string reason = "vkCreateComputePipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
5285 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5286 return false;
5287 }
5288
5289 return true;
5290}
5291
5292bool PostCreateComputePipeline(
5293 VkDevice device,
5294 VkPipeline* pPipeline,
5295 VkResult result)
5296{
5297
5298 if(pPipeline == nullptr)
5299 {
5300 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5301 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5302 return false;
5303 }
5304
5305 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005306 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005307 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005308 "vkCreateGraphicsPipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005309 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005310 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005311
5312 return true;
5313}
5314
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005315VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5316 VkDevice device,
5317 VkPipeline pipeline)
5318{
5319 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5320
5321 PostDestroyPipeline(device, pipeline, result);
5322
5323 return result;
5324}
5325
Jon Ashburnc669cc62015-07-09 15:02:25 -06005326//TODO handle count > 1
Jeremy Hayes99a96322015-06-26 12:48:09 -06005327void PostCreateGraphicsPipeline(
5328 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005329 uint32_t count,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005330 VkPipeline* pPipeline,
5331 VkResult result)
5332{
5333 if(device == nullptr)
5334 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005335 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005336 "vkCreateGraphicsPipeline parameter, VkDevice device, is null pointer");
5337 return;
5338 }
5339
5340 if(pPipeline == nullptr)
5341 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005342 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005343 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5344 return;
5345 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005346 if((*pPipeline).handle == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005347 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005348 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005349 "vkCreateGraphicsPipeline parameter, VkPipeline* pPipeline, is null pointer");
5350 return;
5351 }
5352
5353 if(result != VK_SUCCESS)
5354 {
5355 std::string reason = "vkCreateGraphicsPipeline parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005356 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes99a96322015-06-26 12:48:09 -06005357 return;
5358 }
5359}
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005360
Jon Ashburnc669cc62015-07-09 15:02:25 -06005361//TODO add intercept of pipelineCache entrypoints
5362VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005363 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005364 VkPipelineCache pipelineCache,
5365 uint32_t count,
5366 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5367 VkPipeline* pPipelines)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005368{
Jon Ashburnc669cc62015-07-09 15:02:25 -06005369 PreCreateGraphicsPipeline(device, count, pCreateInfos);
5370 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005371
Jon Ashburnc669cc62015-07-09 15:02:25 -06005372 PostCreateGraphicsPipeline(device, count, pPipelines, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005373
5374 return result;
5375}
5376
Jon Ashburnc669cc62015-07-09 15:02:25 -06005377//TODO handle count > 1
Jeremy Hayes99a96322015-06-26 12:48:09 -06005378void PreCreateComputePipeline(
5379 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005380 uint32_t count,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005381 const VkComputePipelineCreateInfo* pCreateInfo)
5382{
5383 if(device == nullptr)
5384 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005385 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005386 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5387 return;
5388 }
5389
5390 if(pCreateInfo == nullptr)
5391 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005392 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005393 "vkCreateComputePipeline parameter, const VkComputePipelineCreateInfo* pCreateInfo, is null pointer");
5394 return;
5395 }
5396 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5397 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5398 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005399 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005400 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5401 return;
5402 }
5403 if(pCreateInfo->cs.sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5404 pCreateInfo->cs.sType > VK_STRUCTURE_TYPE_END_RANGE)
5405 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005406 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005407 "vkCreateComputePipeline parameter, VkStructureType pCreateInfo->cs.sType, is unrecognized enumerator");
5408 return;
5409 }
5410 if(pCreateInfo->cs.pNext == nullptr)
5411 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005412 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005413 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pNext, is null pointer");
5414 return;
5415 }
5416 if(pCreateInfo->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5417 pCreateInfo->cs.stage > VK_SHADER_STAGE_END_RANGE)
5418 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005419 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005420 "vkCreateComputePipeline parameter, VkShaderStage pCreateInfo->cs.stage, is unrecognized enumerator");
5421 return;
5422 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005423 if(pCreateInfo->cs.shader.handle == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005424 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005425 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005426 "vkCreateComputePipeline parameter, VkShader pCreateInfo->cs.shader, is null pointer");
5427 return;
5428 }
5429 if(pCreateInfo->cs.pLinkConstBufferInfo == nullptr)
5430 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005431 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005432 "vkCreateComputePipeline parameter, const VkLinkConstBuffer* pCreateInfo->cs.pLinkConstBufferInfo, is null pointer");
5433 return;
5434 }
5435 if(pCreateInfo->cs.pLinkConstBufferInfo->pBufferData == nullptr)
5436 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005437 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005438 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pLinkConstBufferInfo->pBufferData, is null pointer");
5439 return;
5440 }
5441 if(pCreateInfo->cs.pSpecializationInfo == nullptr)
5442 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005443 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005444 "vkCreateComputePipeline parameter, const VkSpecializationInfo* pCreateInfo->cs.pSpecializationInfo, is null pointer");
5445 return;
5446 }
5447 if(pCreateInfo->cs.pSpecializationInfo->pMap == nullptr)
5448 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005449 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005450 "vkCreateComputePipeline parameter, const VkSpecializationMapEntry* pCreateInfo->cs.pSpecializationInfo->pMap, is null pointer");
5451 return;
5452 }
5453 if(pCreateInfo->cs.pSpecializationInfo->pData == nullptr)
5454 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005455 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005456 "vkCreateComputePipeline parameter, const void* pCreateInfo->cs.pSpecializationInfo->pData, is null pointer");
5457 return;
5458 }
5459 if(!ValidateEnumerator((VkPipelineCreateFlagBits)pCreateInfo->flags))
5460 {
5461 std::string reason = "vkCreateComputePipeline parameter, VkPipelineCreateFlags pCreateInfo->flags, is " + EnumeratorString((VkPipelineCreateFlagBits)pCreateInfo->flags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005462 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes99a96322015-06-26 12:48:09 -06005463 return;
5464 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005465 if(pCreateInfo->layout.handle == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005466 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005467 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005468 "vkCreateComputePipeline parameter, VkPipelineLayout pCreateInfo->layout, is null pointer");
5469 return;
5470 }
5471}
5472
Jon Ashburnc669cc62015-07-09 15:02:25 -06005473//TODO handle count > 1
Jeremy Hayes99a96322015-06-26 12:48:09 -06005474void PostCreateComputePipeline(
5475 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005476 uint32_t count,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005477 VkPipeline* pPipeline,
5478 VkResult result)
5479{
5480 if(device == nullptr)
5481 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005482 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005483 "vkCreateComputePipeline parameter, VkDevice device, is null pointer");
5484 return;
5485 }
5486
5487 if(pPipeline == nullptr)
5488 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005489 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005490 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5491 return;
5492 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005493 if((*pPipeline).handle == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005494 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005495 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005496 "vkCreateComputePipeline parameter, VkPipeline* pPipeline, is null pointer");
5497 return;
5498 }
5499
5500 if(result != VK_SUCCESS)
5501 {
5502 std::string reason = "vkCreateComputePipeline parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005503 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes99a96322015-06-26 12:48:09 -06005504 return;
5505 }
5506}
5507
Jon Ashburnc669cc62015-07-09 15:02:25 -06005508VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005509 VkDevice device,
Jon Ashburnc669cc62015-07-09 15:02:25 -06005510 VkPipelineCache pipelineCache,
5511 uint32_t count,
5512 const VkComputePipelineCreateInfo* pCreateInfos,
5513 VkPipeline* pPipelines)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005514{
Jon Ashburnc669cc62015-07-09 15:02:25 -06005515 PreCreateComputePipeline(device, count, pCreateInfos);
5516 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005517
Jon Ashburnc669cc62015-07-09 15:02:25 -06005518 PostCreateComputePipeline(device, count, pPipelines, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005519
5520 return result;
5521}
5522
Jeremy Hayes99a96322015-06-26 12:48:09 -06005523void PreCreatePipelineLayout(
5524 VkDevice device,
5525 const VkPipelineLayoutCreateInfo* pCreateInfo)
5526{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005527 if(pCreateInfo == nullptr)
5528 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005529 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005530 "vkCreatePipelineLayout parameter, const VkPipelineLayoutCreateInfo* pCreateInfo, is null pointer");
5531 return;
5532 }
5533 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5534 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5535 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005536 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005537 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
5538 return;
5539 }
5540 if(pCreateInfo->pSetLayouts == nullptr)
5541 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005542 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005543 "vkCreatePipelineLayout parameter, const VkDescriptorSetLayout* pCreateInfo->pSetLayouts, is null pointer");
5544 return;
5545 }
5546}
5547
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005548bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005549 VkDevice device,
5550 VkPipelineLayout* pPipelineLayout,
5551 VkResult result)
5552{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005553
5554 if(pPipelineLayout == nullptr)
5555 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005556 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005557 "vkCreatePipelineLayout parameter, VkPipelineLayout* pPipelineLayout, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005558 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005559 }
5560
5561 if(result != VK_SUCCESS)
5562 {
5563 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005564 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5565 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005566 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005567
5568 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005569}
5570
5571VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5572 VkDevice device,
5573 const VkPipelineLayoutCreateInfo* pCreateInfo,
5574 VkPipelineLayout* pPipelineLayout)
5575{
5576 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005577
Jeremy Hayes99a96322015-06-26 12:48:09 -06005578 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5579
5580 PostCreatePipelineLayout(device, pPipelineLayout, result);
5581
5582 return result;
5583}
5584
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005585bool PostDestroyPipelineLayout(
5586 VkDevice device,
5587 VkPipelineLayout pipelineLayout,
5588 VkResult result)
5589{
5590
5591
5592 if(result != VK_SUCCESS)
5593 {
5594 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5595 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5596 return false;
5597 }
5598
5599 return true;
5600}
5601
5602VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5603 VkDevice device,
5604 VkPipelineLayout pipelineLayout)
5605{
5606 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5607
5608 PostDestroyPipelineLayout(device, pipelineLayout, result);
5609
5610 return result;
5611}
5612
5613bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005614 VkDevice device,
5615 const VkSamplerCreateInfo* pCreateInfo)
5616{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005617 if(pCreateInfo == nullptr)
5618 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005619 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620 "vkCreateSampler parameter, const VkSamplerCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005621 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005622 }
5623 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5624 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5625 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005626 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005627 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005628 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005629 }
5630 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5631 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5632 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005633 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005634 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005635 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005636 }
5637 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5638 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5639 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005640 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005641 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005642 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005643 }
5644 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5645 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5646 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005647 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005648 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005649 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005650 }
5651 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5652 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5653 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005654 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005655 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005656 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005657 }
5658 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5659 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5660 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005661 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005662 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005663 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664 }
5665 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5666 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5667 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005668 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005669 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005670 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005671 }
5672 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5673 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5674 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005675 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005676 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005677 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005678 }
5679 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5680 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5681 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005682 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005683 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005684 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005685 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005686
5687 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005688}
5689
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005690bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005691 VkDevice device,
5692 VkSampler* pSampler,
5693 VkResult result)
5694{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005695
5696 if(pSampler == nullptr)
5697 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005698 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005699 "vkCreateSampler parameter, VkSampler* pSampler, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005700 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005701 }
5702
5703 if(result != VK_SUCCESS)
5704 {
5705 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005706 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5707 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005708 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005709
5710 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005711}
5712
5713VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5714 VkDevice device,
5715 const VkSamplerCreateInfo* pCreateInfo,
5716 VkSampler* pSampler)
5717{
5718 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005719
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5721
5722 PostCreateSampler(device, pSampler, result);
5723
5724 return result;
5725}
5726
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005727bool PostDestroySampler(
5728 VkDevice device,
5729 VkSampler sampler,
5730 VkResult result)
5731{
5732
5733
5734 if(result != VK_SUCCESS)
5735 {
5736 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5737 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5738 return false;
5739 }
5740
5741 return true;
5742}
5743
5744VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5745 VkDevice device,
5746 VkSampler sampler)
5747{
5748 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5749
5750 PostDestroySampler(device, sampler, result);
5751
5752 return result;
5753}
5754
5755bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005756 VkDevice device,
5757 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5758{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005759 if(pCreateInfo == nullptr)
5760 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005761 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005762 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005763 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005764 }
5765 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5766 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5767 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005768 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005769 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005770 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005771 }
5772 if(pCreateInfo->pBinding == nullptr)
5773 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005775 "vkCreateDescriptorSetLayout parameter, const VkDescriptorSetLayoutBinding* pCreateInfo->pBinding, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005776 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005777 }
5778 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5779 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5780 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005781 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005782 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005783 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005784 }
5785 if(!ValidateEnumerator((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags))
5786 {
5787 std::string reason = "vkCreateDescriptorSetLayout parameter, VkShaderStageFlags pCreateInfo->pBinding->stageFlags, is " + EnumeratorString((VkShaderStageFlagBits)pCreateInfo->pBinding->stageFlags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005788 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5789 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005790 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005791
5792 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005793}
5794
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005795bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005796 VkDevice device,
5797 VkDescriptorSetLayout* pSetLayout,
5798 VkResult result)
5799{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005800
5801 if(pSetLayout == nullptr)
5802 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005803 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005804 "vkCreateDescriptorSetLayout parameter, VkDescriptorSetLayout* pSetLayout, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005805 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005806 }
5807
5808 if(result != VK_SUCCESS)
5809 {
5810 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005811 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5812 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005813 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005814
5815 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005816}
5817
5818VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5819 VkDevice device,
5820 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5821 VkDescriptorSetLayout* pSetLayout)
5822{
5823 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005824
Jeremy Hayes99a96322015-06-26 12:48:09 -06005825 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5826
5827 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5828
5829 return result;
5830}
5831
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005832bool PostDestroyDescriptorSetLayout(
5833 VkDevice device,
5834 VkDescriptorSetLayout descriptorSetLayout,
5835 VkResult result)
5836{
5837
5838
5839 if(result != VK_SUCCESS)
5840 {
5841 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5842 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5843 return false;
5844 }
5845
5846 return true;
5847}
5848
5849VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5850 VkDevice device,
5851 VkDescriptorSetLayout descriptorSetLayout)
5852{
5853 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5854
5855 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5856
5857 return result;
5858}
5859
5860bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005861 VkDevice device,
5862 const VkDescriptorPoolCreateInfo* pCreateInfo)
5863{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005864 if(pCreateInfo == nullptr)
5865 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005866 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005867 "vkCreateDescriptorPool parameter, const VkDescriptorPoolCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005868 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005869 }
5870 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
5871 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
5872 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005873 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005874 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005875 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005876 }
5877 if(pCreateInfo->pTypeCount == nullptr)
5878 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005879 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005880 "vkCreateDescriptorPool parameter, const VkDescriptorTypeCount* pCreateInfo->pTypeCount, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005881 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005882 }
5883 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5884 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5885 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005886 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005887 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005888 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005889 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005890
5891 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005892}
5893
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005894bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005895 VkDevice device,
5896 VkDescriptorPoolUsage poolUsage,
5897 uint32_t maxSets,
5898 VkDescriptorPool* pDescriptorPool,
5899 VkResult result)
5900{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005901
5902 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5903 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5904 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005905 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005906 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005907 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005908 }
5909
5910
5911 if(pDescriptorPool == nullptr)
5912 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06005914 "vkCreateDescriptorPool parameter, VkDescriptorPool* pDescriptorPool, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005915 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005916 }
5917
5918 if(result != VK_SUCCESS)
5919 {
5920 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005921 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5922 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005923 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005924
5925 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005926}
5927
5928VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5929 VkDevice device,
5930 VkDescriptorPoolUsage poolUsage,
5931 uint32_t maxSets,
5932 const VkDescriptorPoolCreateInfo* pCreateInfo,
5933 VkDescriptorPool* pDescriptorPool)
5934{
5935 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005936
Jeremy Hayes99a96322015-06-26 12:48:09 -06005937 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5938
5939 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5940
5941 return result;
5942}
5943
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005944bool PostDestroyDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005945 VkDevice device,
5946 VkDescriptorPool descriptorPool,
5947 VkResult result)
5948{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005949
5950
5951 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005952 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005953 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5954 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5955 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005956 }
5957
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005958 return true;
5959}
5960
5961VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5962 VkDevice device,
5963 VkDescriptorPool descriptorPool)
5964{
5965 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5966
5967 PostDestroyDescriptorPool(device, descriptorPool, result);
5968
5969 return result;
5970}
5971
5972bool PostResetDescriptorPool(
5973 VkDevice device,
5974 VkDescriptorPool descriptorPool,
5975 VkResult result)
5976{
5977
Jeremy Hayes99a96322015-06-26 12:48:09 -06005978
5979 if(result != VK_SUCCESS)
5980 {
5981 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005982 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5983 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005984 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005985
5986 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005987}
5988
5989VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5990 VkDevice device,
5991 VkDescriptorPool descriptorPool)
5992{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005993 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5994
5995 PostResetDescriptorPool(device, descriptorPool, result);
5996
5997 return result;
5998}
5999
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006000bool PreAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006001 VkDevice device,
6002 const VkDescriptorSetLayout* pSetLayouts)
6003{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006004 if(pSetLayouts == nullptr)
6005 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006006 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007 "vkAllocDescriptorSets parameter, const VkDescriptorSetLayout* pSetLayouts, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006008 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006009 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006010
6011 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006012}
6013
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006014bool PostAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006015 VkDevice device,
6016 VkDescriptorPool descriptorPool,
6017 VkDescriptorSetUsage setUsage,
6018 uint32_t count,
6019 VkDescriptorSet* pDescriptorSets,
6020 uint32_t* pCount,
6021 VkResult result)
6022{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006023
Jeremy Hayes99a96322015-06-26 12:48:09 -06006024
6025 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
6026 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
6027 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006028 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006029 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006030 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006031 }
6032
6033
6034 if(pDescriptorSets == nullptr)
6035 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006036 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037 "vkAllocDescriptorSets parameter, VkDescriptorSet* pDescriptorSets, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006038 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006039 }
6040
6041 if(pCount == nullptr)
6042 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044 "vkAllocDescriptorSets parameter, uint32_t* pCount, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006045 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006046 }
6047
6048 if(result != VK_SUCCESS)
6049 {
6050 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006051 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6052 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006053 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006054
6055 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006056}
6057
6058VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
6059 VkDevice device,
6060 VkDescriptorPool descriptorPool,
6061 VkDescriptorSetUsage setUsage,
6062 uint32_t count,
6063 const VkDescriptorSetLayout* pSetLayouts,
6064 VkDescriptorSet* pDescriptorSets,
6065 uint32_t* pCount)
6066{
6067 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006068
Jeremy Hayes99a96322015-06-26 12:48:09 -06006069 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
6070
6071 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, pCount, result);
6072
6073 return result;
6074}
6075
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006076bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006077 VkDevice device,
6078 const VkWriteDescriptorSet* pDescriptorWrites,
6079 const VkCopyDescriptorSet* pDescriptorCopies)
6080{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006081 if(pDescriptorWrites == nullptr)
6082 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006083 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084 "vkUpdateDescriptorSets parameter, const VkWriteDescriptorSet* pDescriptorWrites, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006085 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006086 }
6087 if(pDescriptorWrites->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6088 pDescriptorWrites->sType > VK_STRUCTURE_TYPE_END_RANGE)
6089 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006090 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006091 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006092 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006093 }
6094 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
6095 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
6096 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006097 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006098 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006099 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006100 }
6101 if(pDescriptorWrites->pDescriptors == nullptr)
6102 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006103 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006104 "vkUpdateDescriptorSets parameter, const VkDescriptorInfo* pDescriptorWrites->pDescriptors, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006105 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006106 }
6107 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6108 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6109 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006110 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006111 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006112 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006113 }
6114
6115 if(pDescriptorCopies == nullptr)
6116 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006117 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006118 "vkUpdateDescriptorSets parameter, const VkCopyDescriptorSet* pDescriptorCopies, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006119 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006120 }
6121 if(pDescriptorCopies->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6122 pDescriptorCopies->sType > VK_STRUCTURE_TYPE_END_RANGE)
6123 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006124 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006125 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006126 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006127 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006128
6129 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006130}
6131
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006132bool PostUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006133 VkDevice device,
6134 uint32_t writeCount,
6135 uint32_t copyCount,
6136 VkResult result)
6137{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006138
6139
6140
6141 if(result != VK_SUCCESS)
6142 {
6143 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006144 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6145 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006146 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006147
6148 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006149}
6150
6151VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
6152 VkDevice device,
6153 uint32_t writeCount,
6154 const VkWriteDescriptorSet* pDescriptorWrites,
6155 uint32_t copyCount,
6156 const VkCopyDescriptorSet* pDescriptorCopies)
6157{
6158 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006159
Jeremy Hayes99a96322015-06-26 12:48:09 -06006160 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
6161
6162 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
6163
6164 return result;
6165}
6166
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006167bool PreCreateDynamicViewportState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006168 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006169 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006170{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006171 if(pCreateInfo == nullptr)
6172 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006173 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6174 "vkCreateDynamicViewportState parameter, const VkDynamicViewportStateCreateInfo* pCreateInfo, is null pointer");
6175 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006176 }
6177 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6178 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6179 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006180 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006181 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006182 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006183 }
6184 if(pCreateInfo->pViewports == nullptr)
6185 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006186 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006187 "vkCreateDynamicViewportState parameter, const VkViewport* pCreateInfo->pViewports, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006188 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006189 }
6190 if(pCreateInfo->pScissors == nullptr)
6191 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006192 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6193 "vkCreateDynamicViewportState parameter, const VkRect2D* pCreateInfo->pScissors, is null pointer");
6194 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006195 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006196
6197 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198}
6199
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006200bool PostCreateDynamicViewportState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006201 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006202 VkDynamicViewportState* pState,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006203 VkResult result)
6204{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006205
6206 if(pState == nullptr)
6207 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006208 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6209 "vkCreateDynamicViewportState parameter, VkDynamicViewportState* pState, is null pointer");
6210 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006211 }
6212
6213 if(result != VK_SUCCESS)
6214 {
6215 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006216 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6217 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006218 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006219
6220 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006221}
6222
6223VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
6224 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006225 const VkDynamicViewportStateCreateInfo* pCreateInfo,
6226 VkDynamicViewportState* pState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006227{
6228 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006229
Jeremy Hayes99a96322015-06-26 12:48:09 -06006230 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
6231
6232 PostCreateDynamicViewportState(device, pState, result);
6233
6234 return result;
6235}
6236
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006237bool PostDestroyDynamicViewportState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006238 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006239 VkDynamicViewportState dynamicViewportState,
6240 VkResult result)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006241{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006242
6243
6244 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006245 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006246 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
6247 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6248 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006249 }
6250
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006251 return true;
6252}
6253
6254VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
6255 VkDevice device,
6256 VkDynamicViewportState dynamicViewportState)
6257{
6258 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
6259
6260 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
6261
6262 return result;
6263}
6264
6265bool PreCreateDynamicRasterState(
6266 VkDevice device,
6267 const VkDynamicRasterStateCreateInfo* pCreateInfo)
6268{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006269 if(pCreateInfo == nullptr)
6270 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006271 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6272 "vkCreateDynamicRasterState parameter, const VkDynamicRasterStateCreateInfo* pCreateInfo, is null pointer");
6273 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006274 }
6275 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6276 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6277 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006278 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006279 "vkCreateDynamicRasterState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006280 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006281 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006282
6283 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006284}
6285
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006286bool PostCreateDynamicRasterState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006287 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006288 VkDynamicRasterState* pState,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006289 VkResult result)
6290{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006291
6292 if(pState == nullptr)
6293 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6295 "vkCreateDynamicRasterState parameter, VkDynamicRasterState* pState, is null pointer");
6296 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006297 }
6298
6299 if(result != VK_SUCCESS)
6300 {
6301 std::string reason = "vkCreateDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006302 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6303 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006304 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006305
6306 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006307}
6308
6309VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(
6310 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006311 const VkDynamicRasterStateCreateInfo* pCreateInfo,
6312 VkDynamicRasterState* pState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006313{
6314 PreCreateDynamicRasterState(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006315
Jeremy Hayes99a96322015-06-26 12:48:09 -06006316 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterState(device, pCreateInfo, pState);
6317
6318 PostCreateDynamicRasterState(device, pState, result);
6319
6320 return result;
6321}
6322
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006323bool PostDestroyDynamicRasterState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006324 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006325 VkDynamicRasterState dynamicRasterState,
6326 VkResult result)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006327{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006328
6329
6330 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006331 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006332 std::string reason = "vkDestroyDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
6333 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6334 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006335 }
6336
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006337 return true;
6338}
6339
6340VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicRasterState(
6341 VkDevice device,
6342 VkDynamicRasterState dynamicRasterState)
6343{
6344 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicRasterState(device, dynamicRasterState);
6345
6346 PostDestroyDynamicRasterState(device, dynamicRasterState, result);
6347
6348 return result;
6349}
6350
6351bool PreCreateDynamicColorBlendState(
6352 VkDevice device,
6353 const VkDynamicColorBlendStateCreateInfo* pCreateInfo)
6354{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006355 if(pCreateInfo == nullptr)
6356 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006357 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6358 "vkCreateDynamicColorBlendState parameter, const VkDynamicColorBlendStateCreateInfo* pCreateInfo, is null pointer");
6359 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006360 }
6361 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6362 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6363 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006365 "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006366 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006367 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006368
6369 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006370}
6371
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006372bool PostCreateDynamicColorBlendState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006373 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006374 VkDynamicColorBlendState* pState,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006375 VkResult result)
6376{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006377
6378 if(pState == nullptr)
6379 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006380 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6381 "vkCreateDynamicColorBlendState parameter, VkDynamicColorBlendState* pState, is null pointer");
6382 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006383 }
6384
6385 if(result != VK_SUCCESS)
6386 {
6387 std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006388 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6389 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006390 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006391
6392 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006393}
6394
6395VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
6396 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006397 const VkDynamicColorBlendStateCreateInfo* pCreateInfo,
6398 VkDynamicColorBlendState* pState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006399{
6400 PreCreateDynamicColorBlendState(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006401
Jeremy Hayes99a96322015-06-26 12:48:09 -06006402 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState);
6403
6404 PostCreateDynamicColorBlendState(device, pState, result);
6405
6406 return result;
6407}
6408
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006409bool PostDestroyDynamicColorBlendState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006410 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006411 VkDynamicColorBlendState dynamicColorBlendState,
6412 VkResult result)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006413{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006414
6415
6416 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006417 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006418 std::string reason = "vkDestroyDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
6419 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6420 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006421 }
6422
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006423 return true;
6424}
6425
6426VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicColorBlendState(
6427 VkDevice device,
6428 VkDynamicColorBlendState dynamicColorBlendState)
6429{
6430 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicColorBlendState(device, dynamicColorBlendState);
6431
6432 PostDestroyDynamicColorBlendState(device, dynamicColorBlendState, result);
6433
6434 return result;
6435}
6436
6437bool PreCreateDynamicDepthStencilState(
6438 VkDevice device,
6439 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo)
6440{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006441 if(pCreateInfo == nullptr)
6442 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006443 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6444 "vkCreateDynamicDepthStencilState parameter, const VkDynamicDepthStencilStateCreateInfo* pCreateInfo, is null pointer");
6445 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006446 }
6447 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6448 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6449 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006450 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006451 "vkCreateDynamicDepthStencilState parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006452 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006453 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006454
6455 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006456}
6457
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006458bool PostCreateDynamicDepthStencilState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006459 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006460 VkDynamicDepthStencilState* pState,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006461 VkResult result)
6462{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006463
6464 if(pState == nullptr)
6465 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006466 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6467 "vkCreateDynamicDepthStencilState parameter, VkDynamicDepthStencilState* pState, is null pointer");
6468 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006469 }
6470
6471 if(result != VK_SUCCESS)
6472 {
6473 std::string reason = "vkCreateDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006474 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6475 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006476 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006477
6478 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006479}
6480
6481VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(
6482 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006483 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo,
6484 VkDynamicDepthStencilState* pState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006485{
6486 PreCreateDynamicDepthStencilState(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006487
Jeremy Hayes99a96322015-06-26 12:48:09 -06006488 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
6489
6490 PostCreateDynamicDepthStencilState(device, pState, result);
6491
6492 return result;
6493}
6494
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006495bool PostDestroyDynamicDepthStencilState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006496 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006497 VkDynamicDepthStencilState dynamicDepthStencilState,
6498 VkResult result)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006499{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006500
6501
6502 if(result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006503 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006504 std::string reason = "vkDestroyDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
6505 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6506 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006507 }
6508
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006509 return true;
6510}
6511
6512VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthStencilState(
6513 VkDevice device,
6514 VkDynamicDepthStencilState dynamicDepthStencilState)
6515{
6516 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthStencilState(device, dynamicDepthStencilState);
6517
6518 PostDestroyDynamicDepthStencilState(device, dynamicDepthStencilState, result);
6519
6520 return result;
6521}
6522
6523bool PreCreateCommandBuffer(
6524 VkDevice device,
6525 const VkCmdBufferCreateInfo* pCreateInfo)
6526{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006527 if(pCreateInfo == nullptr)
6528 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006529 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006530 "vkCreateCommandBuffer parameter, const VkCmdBufferCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006531 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006532 }
6533 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6534 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6535 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006536 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006537 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006538 return false;
6539 }
6540 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6541 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6542 {
6543 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6544 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is unrecognized enumerator");
6545 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006546 }
6547
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006548 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006549}
6550
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006551bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006552 VkDevice device,
6553 VkCmdBuffer* pCmdBuffer,
6554 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006555{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556
6557 if(pCmdBuffer == nullptr)
6558 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560 "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006561 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006562 }
6563
6564 if(result != VK_SUCCESS)
6565 {
6566 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006567 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6568 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006569 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006570
6571 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006572}
6573
6574VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6575 VkDevice device,
6576 const VkCmdBufferCreateInfo* pCreateInfo,
6577 VkCmdBuffer* pCmdBuffer)
6578{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006579 PreCreateCommandBuffer(device, pCreateInfo);
6580
Jeremy Hayes99a96322015-06-26 12:48:09 -06006581 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6582
6583 PostCreateCommandBuffer(device, pCmdBuffer, result);
6584
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006585 return result;
6586}
6587
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006588bool PostDestroyCommandBuffer(
6589 VkDevice device,
6590 VkCmdBuffer commandBuffer,
6591 VkResult result)
6592{
6593
6594
6595 if(result != VK_SUCCESS)
6596 {
6597 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6598 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6599 return false;
6600 }
6601
6602 return true;
6603}
6604
6605VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6606 VkDevice device,
6607 VkCmdBuffer commandBuffer)
6608{
6609 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6610
6611 PostDestroyCommandBuffer(device, commandBuffer, result);
6612
6613 return result;
6614}
6615
6616bool PreBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006617 VkCmdBuffer cmdBuffer,
6618 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006619{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006620 if(pBeginInfo == nullptr)
6621 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006622 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006623 "vkBeginCommandBuffer parameter, const VkCmdBufferBeginInfo* pBeginInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006624 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006625 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06006626 if(pBeginInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
6627 pBeginInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
6628 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006629 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006630 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006631 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006632 }
6633 if(!ValidateEnumerator((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags))
6634 {
6635 std::string reason = "vkBeginCommandBuffer parameter, VkCmdBufferOptimizeFlags pBeginInfo->flags, is " + EnumeratorString((VkCmdBufferOptimizeFlagBits)pBeginInfo->flags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006636 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6637 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006638 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006639
6640 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006641}
6642
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006643bool PostBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006644 VkCmdBuffer cmdBuffer,
6645 VkResult result)
6646{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006647
6648 if(result != VK_SUCCESS)
6649 {
6650 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006651 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6652 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006653 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006654
6655 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006656}
6657
6658VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6659 VkCmdBuffer cmdBuffer,
6660 const VkCmdBufferBeginInfo* pBeginInfo)
6661{
6662 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006663
Jeremy Hayes99a96322015-06-26 12:48:09 -06006664 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6665
6666 PostBeginCommandBuffer(cmdBuffer, result);
6667
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006668 return result;
6669}
6670
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006671bool PostEndCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006672 VkCmdBuffer cmdBuffer,
6673 VkResult result)
6674{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006675
6676 if(result != VK_SUCCESS)
6677 {
6678 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006679 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6680 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006681 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006682
6683 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006684}
6685
6686VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6687 VkCmdBuffer cmdBuffer)
6688{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006689 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6690
6691 PostEndCommandBuffer(cmdBuffer, result);
6692
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006693 return result;
6694}
6695
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006696bool PostResetCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006697 VkCmdBuffer cmdBuffer,
6698 VkResult result)
6699{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006700
6701 if(result != VK_SUCCESS)
6702 {
6703 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006704 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6705 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006706 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006707
6708 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006709}
6710
6711VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06006712 VkCmdBuffer cmdBuffer,
6713 VkCmdBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006714{
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06006715 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006716
6717 PostResetCommandBuffer(cmdBuffer, result);
6718
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006719 return result;
6720}
6721
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006722bool PostCmdBindPipeline(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006723 VkCmdBuffer cmdBuffer,
6724 VkPipelineBindPoint pipelineBindPoint,
6725 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006726{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006727
6728 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6729 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6730 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006731 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006732 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006733 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006734 }
6735
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006736
6737 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006738}
6739
Jeremy Hayes99a96322015-06-26 12:48:09 -06006740VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6741 VkCmdBuffer cmdBuffer,
6742 VkPipelineBindPoint pipelineBindPoint,
6743 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006744{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006745 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6746
6747 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6748}
6749
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006750bool PostCmdBindDynamicViewportState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006751 VkCmdBuffer cmdBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006752 VkDynamicViewportState dynamicViewportState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006753{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006754
Jeremy Hayes99a96322015-06-26 12:48:09 -06006755
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006756 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006757}
6758
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006759VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006760 VkCmdBuffer cmdBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006761 VkDynamicViewportState dynamicViewportState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006762{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006763 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006764
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006765 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006766}
6767
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006768bool PostCmdBindDynamicRasterState(
6769 VkCmdBuffer cmdBuffer,
6770 VkDynamicRasterState dynamicRasterState)
6771{
6772
6773
6774 return true;
6775}
6776
6777VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicRasterState(
6778 VkCmdBuffer cmdBuffer,
6779 VkDynamicRasterState dynamicRasterState)
6780{
6781 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6782
6783 PostCmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6784}
6785
6786bool PostCmdBindDynamicColorBlendState(
6787 VkCmdBuffer cmdBuffer,
6788 VkDynamicColorBlendState dynamicColorBlendState)
6789{
6790
6791
6792 return true;
6793}
6794
6795VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicColorBlendState(
6796 VkCmdBuffer cmdBuffer,
6797 VkDynamicColorBlendState dynamicColorBlendState)
6798{
6799 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6800
6801 PostCmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6802}
6803
6804bool PostCmdBindDynamicDepthStencilState(
6805 VkCmdBuffer cmdBuffer,
6806 VkDynamicDepthStencilState dynamicDepthStencilState)
6807{
6808
6809
6810 return true;
6811}
6812
6813VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthStencilState(
6814 VkCmdBuffer cmdBuffer,
6815 VkDynamicDepthStencilState dynamicDepthStencilState)
6816{
6817 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6818
6819 PostCmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6820}
6821
6822bool PreCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006823 VkCmdBuffer cmdBuffer,
6824 const VkDescriptorSet* pDescriptorSets,
6825 const uint32_t* pDynamicOffsets)
6826{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006827 if(pDescriptorSets == nullptr)
6828 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006829 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006830 "vkCmdBindDescriptorSets parameter, const VkDescriptorSet* pDescriptorSets, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006831 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006832 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006833
6834
6835 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006836}
6837
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006838bool PostCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006839 VkCmdBuffer cmdBuffer,
6840 VkPipelineBindPoint pipelineBindPoint,
6841 VkPipelineLayout layout,
6842 uint32_t firstSet,
6843 uint32_t setCount,
6844 uint32_t dynamicOffsetCount)
6845{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006846
6847 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6848 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6849 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006850 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006851 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006852 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006853 }
6854
6855
6856
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006857
6858
6859 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006860}
6861
6862VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6863 VkCmdBuffer cmdBuffer,
6864 VkPipelineBindPoint pipelineBindPoint,
6865 VkPipelineLayout layout,
6866 uint32_t firstSet,
6867 uint32_t setCount,
6868 const VkDescriptorSet* pDescriptorSets,
6869 uint32_t dynamicOffsetCount,
6870 const uint32_t* pDynamicOffsets)
6871{
6872 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006873
Jeremy Hayes99a96322015-06-26 12:48:09 -06006874 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6875
6876 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6877}
6878
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006879bool PostCmdBindIndexBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006880 VkCmdBuffer cmdBuffer,
6881 VkBuffer buffer,
6882 VkDeviceSize offset,
6883 VkIndexType indexType)
6884{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006885
Jeremy Hayes99a96322015-06-26 12:48:09 -06006886
6887
6888 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6889 indexType > VK_INDEX_TYPE_END_RANGE)
6890 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006891 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006892 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006893 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006894 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006895
6896 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006897}
6898
6899VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6900 VkCmdBuffer cmdBuffer,
6901 VkBuffer buffer,
6902 VkDeviceSize offset,
6903 VkIndexType indexType)
6904{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006905 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6906
6907 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6908}
6909
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006910bool PreCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006911 VkCmdBuffer cmdBuffer,
6912 const VkBuffer* pBuffers,
6913 const VkDeviceSize* pOffsets)
6914{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006915 if(pBuffers == nullptr)
6916 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006917 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006918 "vkCmdBindVertexBuffers parameter, const VkBuffer* pBuffers, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006919 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006920 }
6921
6922 if(pOffsets == nullptr)
6923 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006924 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06006925 "vkCmdBindVertexBuffers parameter, const VkDeviceSize* pOffsets, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006926 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006927 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006928
6929 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006930}
6931
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006932bool PostCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006933 VkCmdBuffer cmdBuffer,
6934 uint32_t startBinding,
6935 uint32_t bindingCount)
6936{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006937
6938
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006939
6940 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006941}
6942
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06006943VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006944 VkCmdBuffer cmdBuffer,
6945 uint32_t startBinding,
6946 uint32_t bindingCount,
6947 const VkBuffer* pBuffers,
6948 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006949{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006950 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006951
Jeremy Hayes99a96322015-06-26 12:48:09 -06006952 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
6953
6954 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006955}
6956
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006957bool PostCmdDraw(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006958 VkCmdBuffer cmdBuffer,
6959 uint32_t firstVertex,
6960 uint32_t vertexCount,
6961 uint32_t firstInstance,
6962 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006963{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006964
6965
6966
6967
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006968
6969 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006970}
6971
Jeremy Hayes99a96322015-06-26 12:48:09 -06006972VK_LAYER_EXPORT void VKAPI vkCmdDraw(
6973 VkCmdBuffer cmdBuffer,
6974 uint32_t firstVertex,
6975 uint32_t vertexCount,
6976 uint32_t firstInstance,
6977 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006978{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006979 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
6980
6981 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006982}
6983
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006984bool PostCmdDrawIndexed(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006985 VkCmdBuffer cmdBuffer,
6986 uint32_t firstIndex,
6987 uint32_t indexCount,
6988 int32_t vertexOffset,
6989 uint32_t firstInstance,
6990 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006991{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006992
6993
6994
6995
6996
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006997
6998 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006999}
7000
Jeremy Hayes99a96322015-06-26 12:48:09 -06007001VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7002 VkCmdBuffer cmdBuffer,
7003 uint32_t firstIndex,
7004 uint32_t indexCount,
7005 int32_t vertexOffset,
7006 uint32_t firstInstance,
7007 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007008{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007009 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7010
7011 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7012}
7013
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007014bool PostCmdDrawIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007015 VkCmdBuffer cmdBuffer,
7016 VkBuffer buffer,
7017 VkDeviceSize offset,
7018 uint32_t count,
7019 uint32_t stride)
7020{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007021
7022
7023
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007024
7025
7026 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007027}
7028
7029VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7030 VkCmdBuffer cmdBuffer,
7031 VkBuffer buffer,
7032 VkDeviceSize offset,
7033 uint32_t count,
7034 uint32_t stride)
7035{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007036 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7037
7038 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7039}
7040
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007041bool PostCmdDrawIndexedIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007042 VkCmdBuffer cmdBuffer,
7043 VkBuffer buffer,
7044 VkDeviceSize offset,
7045 uint32_t count,
7046 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007047{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007048
7049
7050
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007051
7052
7053 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007054}
7055
Jeremy Hayes99a96322015-06-26 12:48:09 -06007056VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7057 VkCmdBuffer cmdBuffer,
7058 VkBuffer buffer,
7059 VkDeviceSize offset,
7060 uint32_t count,
7061 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007062{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007063 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7064
7065 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7066}
7067
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007068bool PostCmdDispatch(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007069 VkCmdBuffer cmdBuffer,
7070 uint32_t x,
7071 uint32_t y,
7072 uint32_t z)
7073{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007074
7075
7076
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007077
7078 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007079}
7080
7081VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7082 VkCmdBuffer cmdBuffer,
7083 uint32_t x,
7084 uint32_t y,
7085 uint32_t z)
7086{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007087 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7088
7089 PostCmdDispatch(cmdBuffer, x, y, z);
7090}
7091
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007092bool PostCmdDispatchIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007093 VkCmdBuffer cmdBuffer,
7094 VkBuffer buffer,
7095 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007096{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007097
Jeremy Hayes99a96322015-06-26 12:48:09 -06007098
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007099
7100 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007101}
7102
Jeremy Hayes99a96322015-06-26 12:48:09 -06007103VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7104 VkCmdBuffer cmdBuffer,
7105 VkBuffer buffer,
7106 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007107{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007108 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7109
7110 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007111}
7112
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007113bool PreCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007114 VkCmdBuffer cmdBuffer,
7115 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007116{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007117 if(pRegions == nullptr)
7118 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007119 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007120 "vkCmdCopyBuffer parameter, const VkBufferCopy* pRegions, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007121 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007122 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007123
7124 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007125}
7126
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007127bool PostCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007128 VkCmdBuffer cmdBuffer,
7129 VkBuffer srcBuffer,
7130 VkBuffer destBuffer,
7131 uint32_t regionCount)
7132{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007133
Jeremy Hayes99a96322015-06-26 12:48:09 -06007134
Jeremy Hayes99a96322015-06-26 12:48:09 -06007135
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007136
7137 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007138}
7139
7140VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7141 VkCmdBuffer cmdBuffer,
7142 VkBuffer srcBuffer,
7143 VkBuffer destBuffer,
7144 uint32_t regionCount,
7145 const VkBufferCopy* pRegions)
7146{
7147 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007148
Jeremy Hayes99a96322015-06-26 12:48:09 -06007149 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7150
7151 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7152}
7153
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007154bool PreCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007155 VkCmdBuffer cmdBuffer,
7156 const VkImageCopy* pRegions)
7157{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007158 if(pRegions == nullptr)
7159 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007160 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007161 "vkCmdCopyImage parameter, const VkImageCopy* pRegions, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007162 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007163 }
7164 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7165 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7166 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007167 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007168 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007169 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007170 }
7171 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7172 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7173 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007174 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007175 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007176 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007177 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007178
7179 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007180}
7181
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007182bool PostCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007183 VkCmdBuffer cmdBuffer,
7184 VkImage srcImage,
7185 VkImageLayout srcImageLayout,
7186 VkImage destImage,
7187 VkImageLayout destImageLayout,
7188 uint32_t regionCount)
7189{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007190
Jeremy Hayes99a96322015-06-26 12:48:09 -06007191
7192 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7193 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7194 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007195 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007196 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007197 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007198 }
7199
Jeremy Hayes99a96322015-06-26 12:48:09 -06007200
7201 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7202 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7203 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007204 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007205 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007206 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007207 }
7208
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007209
7210 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007211}
7212
7213VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7214 VkCmdBuffer cmdBuffer,
7215 VkImage srcImage,
7216 VkImageLayout srcImageLayout,
7217 VkImage destImage,
7218 VkImageLayout destImageLayout,
7219 uint32_t regionCount,
7220 const VkImageCopy* pRegions)
7221{
7222 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007223
Jeremy Hayes99a96322015-06-26 12:48:09 -06007224 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7225
7226 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7227}
7228
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007229bool PreCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007230 VkCmdBuffer cmdBuffer,
7231 const VkImageBlit* pRegions)
7232{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007233 if(pRegions == nullptr)
7234 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007235 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007236 "vkCmdBlitImage parameter, const VkImageBlit* pRegions, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007237 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007238 }
7239 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7240 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7241 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007242 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007243 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007244 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007245 }
7246 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7247 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7248 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007249 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007250 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007251 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007252 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007253
7254 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007255}
7256
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007257bool PostCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007258 VkCmdBuffer cmdBuffer,
7259 VkImage srcImage,
7260 VkImageLayout srcImageLayout,
7261 VkImage destImage,
7262 VkImageLayout destImageLayout,
7263 uint32_t regionCount,
7264 VkTexFilter filter)
7265{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007266
Jeremy Hayes99a96322015-06-26 12:48:09 -06007267
7268 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7269 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7270 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007271 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007272 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007273 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007274 }
7275
Jeremy Hayes99a96322015-06-26 12:48:09 -06007276
7277 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7278 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7279 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007280 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007281 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007282 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007283 }
7284
7285
7286 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7287 filter > VK_TEX_FILTER_END_RANGE)
7288 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007289 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007290 "vkCmdBlitImage parameter, VkTexFilter filter, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007291 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007292 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007293
7294 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007295}
7296
7297VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7298 VkCmdBuffer cmdBuffer,
7299 VkImage srcImage,
7300 VkImageLayout srcImageLayout,
7301 VkImage destImage,
7302 VkImageLayout destImageLayout,
7303 uint32_t regionCount,
7304 const VkImageBlit* pRegions,
7305 VkTexFilter filter)
7306{
7307 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007308
Jeremy Hayes99a96322015-06-26 12:48:09 -06007309 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7310
7311 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7312}
7313
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007314bool PreCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007315 VkCmdBuffer cmdBuffer,
7316 const VkBufferImageCopy* pRegions)
7317{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007318 if(pRegions == nullptr)
7319 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007320 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007321 "vkCmdCopyBufferToImage parameter, const VkBufferImageCopy* pRegions, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007322 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007323 }
7324 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7325 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7326 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007327 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007328 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007329 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007330 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007331
7332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007333}
7334
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007335bool PostCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007336 VkCmdBuffer cmdBuffer,
7337 VkBuffer srcBuffer,
7338 VkImage destImage,
7339 VkImageLayout destImageLayout,
7340 uint32_t regionCount)
7341{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007342
Jeremy Hayes99a96322015-06-26 12:48:09 -06007343
Jeremy Hayes99a96322015-06-26 12:48:09 -06007344
7345 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7346 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7347 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007348 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007349 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007350 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007351 }
7352
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007353
7354 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007355}
7356
7357VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7358 VkCmdBuffer cmdBuffer,
7359 VkBuffer srcBuffer,
7360 VkImage destImage,
7361 VkImageLayout destImageLayout,
7362 uint32_t regionCount,
7363 const VkBufferImageCopy* pRegions)
7364{
7365 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007366
Jeremy Hayes99a96322015-06-26 12:48:09 -06007367 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7368
7369 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7370}
7371
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007372bool PreCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007373 VkCmdBuffer cmdBuffer,
7374 const VkBufferImageCopy* pRegions)
7375{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007376 if(pRegions == nullptr)
7377 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007378 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007379 "vkCmdCopyImageToBuffer parameter, const VkBufferImageCopy* pRegions, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007380 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007381 }
7382 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7383 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7384 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007385 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007386 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007387 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007388 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007389
7390 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007391}
7392
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007393bool PostCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007394 VkCmdBuffer cmdBuffer,
7395 VkImage srcImage,
7396 VkImageLayout srcImageLayout,
7397 VkBuffer destBuffer,
7398 uint32_t regionCount)
7399{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007400
Jeremy Hayes99a96322015-06-26 12:48:09 -06007401
7402 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7403 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7404 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007405 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007406 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007407 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007408 }
7409
Jeremy Hayes99a96322015-06-26 12:48:09 -06007410
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007411
7412 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007413}
7414
7415VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7416 VkCmdBuffer cmdBuffer,
7417 VkImage srcImage,
7418 VkImageLayout srcImageLayout,
7419 VkBuffer destBuffer,
7420 uint32_t regionCount,
7421 const VkBufferImageCopy* pRegions)
7422{
7423 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007424
Jeremy Hayes99a96322015-06-26 12:48:09 -06007425 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7426
7427 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7428}
7429
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007430bool PreCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007431 VkCmdBuffer cmdBuffer,
7432 const uint32_t* pData)
7433{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007434 if(pData == nullptr)
7435 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007436 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007437 "vkCmdUpdateBuffer parameter, const uint32_t* pData, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007438 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007439 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007440
7441 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007442}
7443
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007444bool PostCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007445 VkCmdBuffer cmdBuffer,
7446 VkBuffer destBuffer,
7447 VkDeviceSize destOffset,
7448 VkDeviceSize dataSize)
7449{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007450
7451
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007452
7453
7454 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007455}
7456
7457VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7458 VkCmdBuffer cmdBuffer,
7459 VkBuffer destBuffer,
7460 VkDeviceSize destOffset,
7461 VkDeviceSize dataSize,
7462 const uint32_t* pData)
7463{
7464 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007465
Jeremy Hayes99a96322015-06-26 12:48:09 -06007466 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7467
7468 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7469}
7470
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007471bool PostCmdFillBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007472 VkCmdBuffer cmdBuffer,
7473 VkBuffer destBuffer,
7474 VkDeviceSize destOffset,
7475 VkDeviceSize fillSize,
7476 uint32_t data)
7477{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007478
7479
7480
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007481
7482
7483 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007484}
7485
7486VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7487 VkCmdBuffer cmdBuffer,
7488 VkBuffer destBuffer,
7489 VkDeviceSize destOffset,
7490 VkDeviceSize fillSize,
7491 uint32_t data)
7492{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007493 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7494
7495 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7496}
7497
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007498bool PreCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007499 VkCmdBuffer cmdBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12007500 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007501 const VkImageSubresourceRange* pRanges)
7502{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007503 if(pColor == nullptr)
7504 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007505 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7506 "vkCmdClearColorImage parameter, const VkClearColorValue* pColor, is null pointer");
7507 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007508 }
7509
7510 if(pRanges == nullptr)
7511 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007512 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007513 "vkCmdClearColorImage parameter, const VkImageSubresourceRange* pRanges, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007514 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007515 }
7516 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7517 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7518 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007519 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007520 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007521 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007522 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007523
7524 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007525}
7526
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007527bool PostCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007528 VkCmdBuffer cmdBuffer,
7529 VkImage image,
7530 VkImageLayout imageLayout,
7531 uint32_t rangeCount)
7532{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007533
Jeremy Hayes99a96322015-06-26 12:48:09 -06007534
7535 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7536 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7537 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007538 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007539 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007540 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007541 }
7542
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007543
7544 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007545}
7546
7547VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7548 VkCmdBuffer cmdBuffer,
7549 VkImage image,
7550 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12007551 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007552 uint32_t rangeCount,
7553 const VkImageSubresourceRange* pRanges)
7554{
7555 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007556
Jeremy Hayes99a96322015-06-26 12:48:09 -06007557 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7558
7559 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7560}
7561
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007562bool PreCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007563 VkCmdBuffer cmdBuffer,
7564 const VkImageSubresourceRange* pRanges)
7565{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007566 if(pRanges == nullptr)
7567 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007568 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7569 "vkCmdClearDepthStencilImage parameter, const VkImageSubresourceRange* pRanges, is null pointer");
7570 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007571 }
7572 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7573 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7574 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007575 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7576 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is unrecognized enumerator");
7577 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007578 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007579
7580 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007581}
7582
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007583bool PostCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007584 VkCmdBuffer cmdBuffer,
7585 VkImage image,
7586 VkImageLayout imageLayout,
7587 float depth,
7588 uint32_t stencil,
7589 uint32_t rangeCount)
7590{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007591
Jeremy Hayes99a96322015-06-26 12:48:09 -06007592
7593 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7594 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7595 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007596 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7597 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7598 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007599 }
7600
7601
7602
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007603
7604 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007605}
7606
Chris Forbesd9be82b2015-06-22 17:21:59 +12007607VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007608 VkCmdBuffer cmdBuffer,
7609 VkImage image,
7610 VkImageLayout imageLayout,
7611 float depth,
7612 uint32_t stencil,
7613 uint32_t rangeCount,
7614 const VkImageSubresourceRange* pRanges)
7615{
Chris Forbesd9be82b2015-06-22 17:21:59 +12007616 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007617
Chris Forbesd9be82b2015-06-22 17:21:59 +12007618 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007619
Chris Forbesd9be82b2015-06-22 17:21:59 +12007620 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007621}
7622
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007623bool PreCmdClearColorAttachment(
7624 VkCmdBuffer cmdBuffer,
7625 const VkClearColorValue* pColor,
7626 const VkRect3D* pRects)
7627{
7628 if(pColor == nullptr)
7629 {
7630 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7631 "vkCmdClearColorAttachment parameter, const VkClearColorValue* pColor, is null pointer");
7632 return false;
7633 }
7634
7635 if(pRects == nullptr)
7636 {
7637 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7638 "vkCmdClearColorAttachment parameter, const VkRect3D* pRects, is null pointer");
7639 return false;
7640 }
7641
7642 return true;
7643}
7644
7645bool PostCmdClearColorAttachment(
7646 VkCmdBuffer cmdBuffer,
7647 uint32_t colorAttachment,
7648 VkImageLayout imageLayout,
7649 uint32_t rectCount)
7650{
7651
7652
7653 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7654 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7655 {
7656 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7657 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7658 return false;
7659 }
7660
7661
7662 return true;
7663}
7664
7665VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7666 VkCmdBuffer cmdBuffer,
7667 uint32_t colorAttachment,
7668 VkImageLayout imageLayout,
7669 const VkClearColorValue* pColor,
7670 uint32_t rectCount,
7671 const VkRect3D* pRects)
7672{
7673 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7674
7675 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7676
7677 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7678}
7679
7680bool PreCmdClearDepthStencilAttachment(
7681 VkCmdBuffer cmdBuffer,
7682 const VkRect3D* pRects)
7683{
7684 if(pRects == nullptr)
7685 {
7686 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7687 "vkCmdClearDepthStencilAttachment parameter, const VkRect3D* pRects, is null pointer");
7688 return false;
7689 }
7690
7691 return true;
7692}
7693
7694bool PostCmdClearDepthStencilAttachment(
7695 VkCmdBuffer cmdBuffer,
7696 VkImageAspectFlags imageAspectMask,
7697 VkImageLayout imageLayout,
7698 float depth,
7699 uint32_t stencil,
7700 uint32_t rectCount)
7701{
7702
7703 if(!ValidateEnumerator((VkImageAspectFlagBits)imageAspectMask))
7704 {
7705 std::string reason = "vkCmdClearDepthStencilAttachment parameter, VkImageAspectFlags imageAspectMask, is " + EnumeratorString((VkImageAspectFlagBits)imageAspectMask);
7706 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
7707 return false;
7708 }
7709
7710 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7711 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7712 {
7713 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7714 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is unrecognized enumerator");
7715 return false;
7716 }
7717
7718
7719
7720
7721 return true;
7722}
7723
7724VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7725 VkCmdBuffer cmdBuffer,
7726 VkImageAspectFlags imageAspectMask,
7727 VkImageLayout imageLayout,
7728 float depth,
7729 uint32_t stencil,
7730 uint32_t rectCount,
7731 const VkRect3D* pRects)
7732{
7733 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7734
7735 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7736
7737 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7738}
7739
7740bool PreCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007741 VkCmdBuffer cmdBuffer,
7742 const VkImageResolve* pRegions)
7743{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007744 if(pRegions == nullptr)
7745 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007746 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007747 "vkCmdResolveImage parameter, const VkImageResolve* pRegions, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007748 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007749 }
7750 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7751 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7752 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007753 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007754 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007755 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007756 }
7757 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7758 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7759 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007760 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007761 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007762 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007763 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007764
7765 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007766}
7767
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007768bool PostCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007769 VkCmdBuffer cmdBuffer,
7770 VkImage srcImage,
7771 VkImageLayout srcImageLayout,
7772 VkImage destImage,
7773 VkImageLayout destImageLayout,
7774 uint32_t regionCount)
7775{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007776
Jeremy Hayes99a96322015-06-26 12:48:09 -06007777
7778 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7779 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7780 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007781 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007782 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007783 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007784 }
7785
Jeremy Hayes99a96322015-06-26 12:48:09 -06007786
7787 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7788 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7789 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007790 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007791 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007792 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007793 }
7794
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007795
7796 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007797}
7798
7799VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7800 VkCmdBuffer cmdBuffer,
7801 VkImage srcImage,
7802 VkImageLayout srcImageLayout,
7803 VkImage destImage,
7804 VkImageLayout destImageLayout,
7805 uint32_t regionCount,
7806 const VkImageResolve* pRegions)
7807{
7808 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007809
Jeremy Hayes99a96322015-06-26 12:48:09 -06007810 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7811
7812 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7813}
7814
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007815bool PostCmdSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007816 VkCmdBuffer cmdBuffer,
7817 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007818 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007819{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007820
Jeremy Hayes99a96322015-06-26 12:48:09 -06007821
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007822
7823 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007824}
7825
7826VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7827 VkCmdBuffer cmdBuffer,
7828 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007829 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007830{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007831 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007832
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007833 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007834}
7835
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007836bool PostCmdResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007837 VkCmdBuffer cmdBuffer,
7838 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007839 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007840{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007841
Jeremy Hayes99a96322015-06-26 12:48:09 -06007842
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007843
7844 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007845}
7846
7847VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7848 VkCmdBuffer cmdBuffer,
7849 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007850 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007851{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007852 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007853
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007854 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007855}
7856
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007857bool PreCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007858 VkCmdBuffer cmdBuffer,
7859 const VkEvent* pEvents,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06007860 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007861{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007862 if(pEvents == nullptr)
7863 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007864 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007865 "vkCmdWaitEvents parameter, const VkEvent* pEvents, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007866 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007867 }
7868
7869 if(ppMemBarriers == nullptr)
7870 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007871 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007872 "vkCmdWaitEvents parameter, const void** ppMemBarriers, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007873 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007874 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007875
7876 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007877}
7878
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007879bool PostCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007880 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007881 uint32_t eventCount,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007882 VkPipelineStageFlags sourceStageMask,
7883 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007884 uint32_t memBarrierCount)
7885{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007886
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007887
Jeremy Hayes99a96322015-06-26 12:48:09 -06007888
7889
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007890
7891 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007892}
7893
7894VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
7895 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007896 uint32_t eventCount,
7897 const VkEvent* pEvents,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007898 VkPipelineStageFlags sourceStageMask,
7899 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007900 uint32_t memBarrierCount,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06007901 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007902{
7903 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007904
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007905 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, sourceStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007906
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007907 PostCmdWaitEvents(cmdBuffer, eventCount, sourceStageMask, destStageMask, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007908}
7909
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007910bool PreCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007911 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007912 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007913{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007914 if(ppMemBarriers == nullptr)
7915 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007916 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06007917 "vkCmdPipelineBarrier parameter, const void** ppMemBarriers, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007918 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007919 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007920
7921 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007922}
7923
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007924bool PostCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007925 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007926 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007927 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06007928 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007929 uint32_t memBarrierCount)
7930{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007931
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007932
Jeremy Hayes99a96322015-06-26 12:48:09 -06007933
7934
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007935
7936 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007937}
7938
7939VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7940 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007941 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007942 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06007943 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007944 uint32_t memBarrierCount,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007945 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007946{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007947 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007948
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007949 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007950
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007951 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007952}
7953
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007954bool PostCmdBeginQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007955 VkCmdBuffer cmdBuffer,
7956 VkQueryPool queryPool,
7957 uint32_t slot,
7958 VkQueryControlFlags flags)
7959{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007960
Jeremy Hayes99a96322015-06-26 12:48:09 -06007961
7962
7963 if(!ValidateEnumerator((VkQueryControlFlagBits)flags))
7964 {
7965 std::string reason = "vkCmdBeginQuery parameter, VkQueryControlFlags flags, is " + EnumeratorString((VkQueryControlFlagBits)flags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007966 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
7967 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007968 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007969
7970 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007971}
7972
7973VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
7974 VkCmdBuffer cmdBuffer,
7975 VkQueryPool queryPool,
7976 uint32_t slot,
7977 VkQueryControlFlags flags)
7978{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007979 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7980
7981 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7982}
7983
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007984bool PostCmdEndQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007985 VkCmdBuffer cmdBuffer,
7986 VkQueryPool queryPool,
7987 uint32_t slot)
7988{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007989
Jeremy Hayes99a96322015-06-26 12:48:09 -06007990
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007991
7992 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007993}
7994
7995VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
7996 VkCmdBuffer cmdBuffer,
7997 VkQueryPool queryPool,
7998 uint32_t slot)
7999{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008000 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
8001
8002 PostCmdEndQuery(cmdBuffer, queryPool, slot);
8003}
8004
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008005bool PostCmdResetQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008006 VkCmdBuffer cmdBuffer,
8007 VkQueryPool queryPool,
8008 uint32_t startQuery,
8009 uint32_t queryCount)
8010{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008011
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008012
8013
8014
8015 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008016}
8017
8018VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8019 VkCmdBuffer cmdBuffer,
8020 VkQueryPool queryPool,
8021 uint32_t startQuery,
8022 uint32_t queryCount)
8023{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008024 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8025
8026 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8027}
8028
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008029bool PostCmdWriteTimestamp(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008030 VkCmdBuffer cmdBuffer,
8031 VkTimestampType timestampType,
8032 VkBuffer destBuffer,
8033 VkDeviceSize destOffset)
8034{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008035
8036 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8037 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8038 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008039 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06008040 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008041 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008042 }
8043
Jeremy Hayes99a96322015-06-26 12:48:09 -06008044
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008045
8046 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008047}
8048
8049VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8050 VkCmdBuffer cmdBuffer,
8051 VkTimestampType timestampType,
8052 VkBuffer destBuffer,
8053 VkDeviceSize destOffset)
8054{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008055 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8056
8057 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8058}
8059
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008060bool PostCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008061 VkCmdBuffer cmdBuffer,
8062 VkQueryPool queryPool,
8063 uint32_t startQuery,
8064 uint32_t queryCount,
8065 VkBuffer destBuffer,
8066 VkDeviceSize destOffset,
8067 VkDeviceSize destStride,
8068 VkQueryResultFlags flags)
8069{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008070
8071
8072
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008073
Jeremy Hayes99a96322015-06-26 12:48:09 -06008074
8075
8076
8077 if(!ValidateEnumerator((VkQueryResultFlagBits)flags))
8078 {
8079 std::string reason = "vkCmdCopyQueryPoolResults parameter, VkQueryResultFlags flags, is " + EnumeratorString((VkQueryResultFlagBits)flags);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008080 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8081 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008082 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008083
8084 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008085}
8086
Jeremy Hayesad367152015-04-17 10:36:53 -06008087VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008088 VkCmdBuffer cmdBuffer,
8089 VkQueryPool queryPool,
8090 uint32_t startQuery,
8091 uint32_t queryCount,
8092 VkBuffer destBuffer,
8093 VkDeviceSize destOffset,
8094 VkDeviceSize destStride,
8095 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06008096{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008097 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8098
8099 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06008100}
8101
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008102bool PreCreateFramebuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008103 VkDevice device,
8104 const VkFramebufferCreateInfo* pCreateInfo)
8105{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008106 if(pCreateInfo == nullptr)
8107 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008108 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06008109 "vkCreateFramebuffer parameter, const VkFramebufferCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008110 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008111 }
8112 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
8113 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
8114 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06008116 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008117 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008118 }
Chia-I Wu08accc62015-07-07 11:50:03 +08008119 if(pCreateInfo->pAttachments == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06008120 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008121 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008122 "vkCreateFramebuffer parameter, const VkAttachmentBindInfo* pCreateInfo->pAttachments, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008123 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008124 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008125 if(pCreateInfo->pAttachments->view.handle == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06008126 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008127 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008128 "vkCreateFramebuffer parameter, VkAttachmentView pCreateInfo->pAttachments->view, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008129 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008130 }
Chia-I Wu08accc62015-07-07 11:50:03 +08008131 if(pCreateInfo->pAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
8132 pCreateInfo->pAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06008133 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008134 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008135 "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pAttachments->layout, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008136 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008137 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008138
8139 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008140}
8141
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008142bool PostCreateFramebuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008143 VkDevice device,
8144 VkFramebuffer* pFramebuffer,
8145 VkResult result)
8146{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008147
8148 if(pFramebuffer == nullptr)
8149 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008150 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06008151 "vkCreateFramebuffer parameter, VkFramebuffer* pFramebuffer, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008152 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008153 }
8154
8155 if(result != VK_SUCCESS)
8156 {
8157 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008158 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8159 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008160 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008161
8162 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008163}
8164
8165VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
8166 VkDevice device,
8167 const VkFramebufferCreateInfo* pCreateInfo,
8168 VkFramebuffer* pFramebuffer)
8169{
8170 PreCreateFramebuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008171
Jeremy Hayes99a96322015-06-26 12:48:09 -06008172 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
8173
8174 PostCreateFramebuffer(device, pFramebuffer, result);
8175
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008176 return result;
8177}
8178
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008179bool PostDestroyFramebuffer(
8180 VkDevice device,
8181 VkFramebuffer framebuffer,
8182 VkResult result)
8183{
8184
8185 if(result != VK_SUCCESS)
8186 {
8187 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
8188 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8189 return false;
8190 }
8191
8192 return true;
8193}
8194
8195VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
8196 VkDevice device,
8197 VkFramebuffer framebuffer)
8198{
8199 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
8200
8201 PostDestroyFramebuffer(device, framebuffer, result);
8202
8203 return result;
8204}
8205
8206bool PreCreateRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008207 VkDevice device,
8208 const VkRenderPassCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008209{
8210 if(pCreateInfo == nullptr)
8211 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008212 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06008213 "vkCreateRenderPass parameter, const VkRenderPassCreateInfo* pCreateInfo, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008214 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008215 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06008216 if(pCreateInfo->sType < VK_STRUCTURE_TYPE_BEGIN_RANGE ||
8217 pCreateInfo->sType > VK_STRUCTURE_TYPE_END_RANGE)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008218 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008219 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06008220 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008221 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008222 }
Chia-I Wu08accc62015-07-07 11:50:03 +08008223
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008224 for (uint32_t i = 0; i < pCreateInfo->attachmentCount; i++)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008225 {
Chia-I Wu08accc62015-07-07 11:50:03 +08008226 const VkAttachmentDescription *att = &pCreateInfo->pAttachments[i];
8227
8228 if(att->format < VK_FORMAT_BEGIN_RANGE || att->format > VK_FORMAT_END_RANGE)
8229 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008230 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008231 "vkCreateRenderPass parameter, VkFormat in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008232 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08008233 }
8234 if(att->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || att->initialLayout > VK_IMAGE_LAYOUT_END_RANGE ||
8235 att->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE || att->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
8236 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008237 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008238 "vkCreateRenderPass parameter, VkImageLayout in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008239 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08008240 }
8241 if(att->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE || att->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
8242 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008243 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008244 "vkCreateRenderPass parameter, VkAttachmentLoadOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008245 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08008246 }
8247 if(att->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE || att->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
8248 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008249 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008250 "vkCreateRenderPass parameter, VkAttachmentStoreOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008251 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08008252 }
8253 if(att->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE || att->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
8254 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008255 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008256 "vkCreateRenderPass parameter, VkAttachmentLoadOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008257 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08008258 }
8259 if(att->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE || att->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
8260 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008261 log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008262 "vkCreateRenderPass parameter, VkAttachmentStoreOp in pCreateInfo->pAttachments, is unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008263 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08008264 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008265 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008266
8267 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008268}
8269
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008270bool PostCreateRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008271 VkDevice device,
8272 VkRenderPass* pRenderPass,
8273 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008274{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008275
8276 if(pRenderPass == nullptr)
8277 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008278 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06008279 "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008280 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008281 }
8282
8283 if(result != VK_SUCCESS)
8284 {
8285 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008286 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
8287 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008288 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008289
8290 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008291}
8292
Jeremy Hayes99a96322015-06-26 12:48:09 -06008293VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
8294 VkDevice device,
8295 const VkRenderPassCreateInfo* pCreateInfo,
8296 VkRenderPass* pRenderPass)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008297{
8298 PreCreateRenderPass(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008299
Jeremy Hayes99a96322015-06-26 12:48:09 -06008300 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
8301
8302 PostCreateRenderPass(device, pRenderPass, result);
8303
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008304 return result;
8305}
8306
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008307bool PreCmdBeginRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008308 VkCmdBuffer cmdBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08008309 const VkRenderPassBeginInfo* pRenderPassBegin,
8310 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008311{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008312 if(pRenderPassBegin == nullptr)
8313 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008314 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06008315 "vkCmdBeginRenderPass parameter, const VkRenderPassBegin* pRenderPassBegin, is null pointer");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008316 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06008317 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008318 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8319 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06008320 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008321 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8322 "vkCmdBeginRenderPass parameter, VkRenderPassContents pRenderPassBegin->contents, is unrecognized enumerator");
8323 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06008324 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008325
8326 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008327}
8328
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008329bool PostCmdBeginRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06008330 VkCmdBuffer cmdBuffer)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008331{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008332
8333 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008334}
8335
Jeremy Hayes99a96322015-06-26 12:48:09 -06008336VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8337 VkCmdBuffer cmdBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08008338 const VkRenderPassBeginInfo* pRenderPassBegin,
8339 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008340{
Chia-I Wu08accc62015-07-07 11:50:03 +08008341 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
8342 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06008343
8344 PostCmdBeginRenderPass(cmdBuffer);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008345}
8346
Chia-I Wu08accc62015-07-07 11:50:03 +08008347void PreCmdNextSubpass(
8348 VkCmdBuffer cmdBuffer,
8349 VkRenderPassContents contents)
8350{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008351
8352 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8353 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08008354 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008355 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8356 "vkCmdBeginRenderPass parameter, VkRenderPassContents pRenderPassBegin->contents, is unrecognized enumerator");
Chia-I Wu08accc62015-07-07 11:50:03 +08008357 return;
8358 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008359
8360 return;
Chia-I Wu08accc62015-07-07 11:50:03 +08008361}
8362
8363void PostCmdNextSubpass(
8364 VkCmdBuffer cmdBuffer)
8365{
8366 if(cmdBuffer == nullptr)
8367 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008368 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu08accc62015-07-07 11:50:03 +08008369 "vkCmdNextSubpass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8370 return;
8371 }
8372}
8373
8374VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8375 VkCmdBuffer cmdBuffer,
8376 VkRenderPassContents contents)
8377{
8378 PreCmdNextSubpass(cmdBuffer, contents);
8379 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8380
8381 PostCmdNextSubpass(cmdBuffer);
8382}
8383
Jeremy Hayes99a96322015-06-26 12:48:09 -06008384void PreCmdEndRenderPass(
8385 VkCmdBuffer cmdBuffer)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008386{
Jeremy Hayes99a96322015-06-26 12:48:09 -06008387 if(cmdBuffer == nullptr)
8388 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008389 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes99a96322015-06-26 12:48:09 -06008390 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8391 return;
8392 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008393}
8394
Jeremy Hayes99a96322015-06-26 12:48:09 -06008395void PostCmdEndRenderPass(
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008396 VkCmdBuffer cmdBuffer)
Chia-I Wuf8693382015-04-16 22:02:10 +08008397{
Chia-I Wu08accc62015-07-07 11:50:03 +08008398 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8399
8400 PostCmdEndRenderPass(cmdBuffer);
8401}
8402
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008403bool PreCmdExecuteCommands(
8404 VkCmdBuffer cmdBuffer,
8405 const VkCmdBuffer* pCmdBuffers)
8406{
8407 if(pCmdBuffers == nullptr)
8408 {
8409 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8410 "vkCmdEndRenderPass parameter, VkCmdBuffer cmdBuffer, is null pointer");
8411 return false;
8412 }
8413
8414 return true;
8415}
8416
8417bool PostCmdExecuteCommands(
8418 VkCmdBuffer cmdBuffer,
8419 uint32_t cmdBuffersCount)
8420{
8421
8422
8423 return true;
8424}
8425
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008426void PreCmdExecuteCommands(
8427 VkCmdBuffer cmdBuffer)
8428{
8429 if(cmdBuffer == nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06008430 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008431 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008432 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
8433 return;
8434 }
8435}
8436
8437void PostCmdExecuteCommands(
8438 VkCmdBuffer cmdBuffer)
8439{
8440 if(cmdBuffer == nullptr)
8441 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008442 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008443 "vkCmdExecuteCommands parameter, VkCmdBuffer cmdBuffer, is null pointer");
Jeremy Hayes99a96322015-06-26 12:48:09 -06008444 return;
8445 }
Chia-I Wuf8693382015-04-16 22:02:10 +08008446}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008447
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008448VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008449 VkCmdBuffer cmdBuffer,
8450 uint32_t cmdBuffersCount,
8451 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008452{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008453 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8454
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08008455 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8456
Jeremy Hayes359eeb92015-07-09 17:11:25 -06008457 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008458}
8459
Jon Ashburn8d1b0b52015-05-18 13:20:15 -06008460VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008461{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008462 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008463 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008464 }
8465
Jon Ashburn8fd08252015-05-28 16:25:02 -06008466 /* loader uses this to force layer initialization; device object is wrapped */
8467 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008468 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Jon Ashburn8fd08252015-05-28 16:25:02 -06008469 return (void*) vkGetDeviceProcAddr;
8470 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008471
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06008472 if (!strcmp(funcName, "vkCreateDevice"))
8473 return (void*) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008474 if (!strcmp(funcName, "vkDestroyDevice"))
8475 return (void*) vkDestroyDevice;
8476 if (!strcmp(funcName, "vkGetDeviceQueue"))
8477 return (void*) vkGetDeviceQueue;
8478 if (!strcmp(funcName, "vkQueueSubmit"))
8479 return (void*) vkQueueSubmit;
8480 if (!strcmp(funcName, "vkQueueWaitIdle"))
8481 return (void*) vkQueueWaitIdle;
8482 if (!strcmp(funcName, "vkDeviceWaitIdle"))
8483 return (void*) vkDeviceWaitIdle;
8484 if (!strcmp(funcName, "vkAllocMemory"))
8485 return (void*) vkAllocMemory;
8486 if (!strcmp(funcName, "vkFreeMemory"))
8487 return (void*) vkFreeMemory;
8488 if (!strcmp(funcName, "vkMapMemory"))
8489 return (void*) vkMapMemory;
8490 if (!strcmp(funcName, "vkUnmapMemory"))
8491 return (void*) vkUnmapMemory;
8492 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
8493 return (void*) vkFlushMappedMemoryRanges;
8494 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
8495 return (void*) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008496 if (!strcmp(funcName, "vkCreateFence"))
8497 return (void*) vkCreateFence;
8498 if (!strcmp(funcName, "vkResetFences"))
8499 return (void*) vkResetFences;
8500 if (!strcmp(funcName, "vkGetFenceStatus"))
8501 return (void*) vkGetFenceStatus;
8502 if (!strcmp(funcName, "vkWaitForFences"))
8503 return (void*) vkWaitForFences;
8504 if (!strcmp(funcName, "vkCreateSemaphore"))
8505 return (void*) vkCreateSemaphore;
8506 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
8507 return (void*) vkQueueSignalSemaphore;
8508 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
8509 return (void*) vkQueueWaitSemaphore;
8510 if (!strcmp(funcName, "vkCreateEvent"))
8511 return (void*) vkCreateEvent;
8512 if (!strcmp(funcName, "vkGetEventStatus"))
8513 return (void*) vkGetEventStatus;
8514 if (!strcmp(funcName, "vkSetEvent"))
8515 return (void*) vkSetEvent;
8516 if (!strcmp(funcName, "vkResetEvent"))
8517 return (void*) vkResetEvent;
8518 if (!strcmp(funcName, "vkCreateQueryPool"))
8519 return (void*) vkCreateQueryPool;
8520 if (!strcmp(funcName, "vkGetQueryPoolResults"))
8521 return (void*) vkGetQueryPoolResults;
8522 if (!strcmp(funcName, "vkCreateBuffer"))
8523 return (void*) vkCreateBuffer;
8524 if (!strcmp(funcName, "vkCreateBufferView"))
8525 return (void*) vkCreateBufferView;
8526 if (!strcmp(funcName, "vkCreateImage"))
8527 return (void*) vkCreateImage;
8528 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
8529 return (void*) vkGetImageSubresourceLayout;
8530 if (!strcmp(funcName, "vkCreateImageView"))
8531 return (void*) vkCreateImageView;
Chia-I Wu08accc62015-07-07 11:50:03 +08008532 if (!strcmp(funcName, "vkCreateAttachmentView"))
8533 return (void*) vkCreateAttachmentView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008534 if (!strcmp(funcName, "vkCreateShader"))
8535 return (void*) vkCreateShader;
Jon Ashburnc669cc62015-07-09 15:02:25 -06008536 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
8537 return (void*) vkCreateGraphicsPipelines;
8538 if (!strcmp(funcName, "vkCreateComputePipelines"))
8539 return (void*) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008540 if (!strcmp(funcName, "vkCreatePipelineLayout"))
8541 return (void*) vkCreatePipelineLayout;
8542 if (!strcmp(funcName, "vkCreateSampler"))
8543 return (void*) vkCreateSampler;
8544 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
8545 return (void*) vkCreateDescriptorSetLayout;
8546 if (!strcmp(funcName, "vkCreateDescriptorPool"))
8547 return (void*) vkCreateDescriptorPool;
8548 if (!strcmp(funcName, "vkResetDescriptorPool"))
8549 return (void*) vkResetDescriptorPool;
8550 if (!strcmp(funcName, "vkAllocDescriptorSets"))
8551 return (void*) vkAllocDescriptorSets;
8552 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
8553 return (void*) vkCreateDynamicViewportState;
8554 if (!strcmp(funcName, "vkCreateDynamicRasterState"))
8555 return (void*) vkCreateDynamicRasterState;
8556 if (!strcmp(funcName, "vkCreateDynamicColorBlendState"))
8557 return (void*) vkCreateDynamicColorBlendState;
8558 if (!strcmp(funcName, "vkCreateDynamicDepthStencilState"))
8559 return (void*) vkCreateDynamicDepthStencilState;
8560 if (!strcmp(funcName, "vkCreateCommandBuffer"))
8561 return (void*) vkCreateCommandBuffer;
8562 if (!strcmp(funcName, "vkBeginCommandBuffer"))
8563 return (void*) vkBeginCommandBuffer;
8564 if (!strcmp(funcName, "vkEndCommandBuffer"))
8565 return (void*) vkEndCommandBuffer;
8566 if (!strcmp(funcName, "vkResetCommandBuffer"))
8567 return (void*) vkResetCommandBuffer;
8568 if (!strcmp(funcName, "vkCmdBindPipeline"))
8569 return (void*) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008570 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
8571 return (void*) vkCmdBindDescriptorSets;
8572 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
8573 return (void*) vkCmdBindVertexBuffers;
8574 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
8575 return (void*) vkCmdBindIndexBuffer;
8576 if (!strcmp(funcName, "vkCmdDraw"))
8577 return (void*) vkCmdDraw;
8578 if (!strcmp(funcName, "vkCmdDrawIndexed"))
8579 return (void*) vkCmdDrawIndexed;
8580 if (!strcmp(funcName, "vkCmdDrawIndirect"))
8581 return (void*) vkCmdDrawIndirect;
8582 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
8583 return (void*) vkCmdDrawIndexedIndirect;
8584 if (!strcmp(funcName, "vkCmdDispatch"))
8585 return (void*) vkCmdDispatch;
8586 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
8587 return (void*) vkCmdDispatchIndirect;
8588 if (!strcmp(funcName, "vkCmdCopyBuffer"))
8589 return (void*) vkCmdCopyBuffer;
8590 if (!strcmp(funcName, "vkCmdCopyImage"))
8591 return (void*) vkCmdCopyImage;
8592 if (!strcmp(funcName, "vkCmdBlitImage"))
8593 return (void*) vkCmdBlitImage;
8594 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
8595 return (void*) vkCmdCopyBufferToImage;
8596 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
8597 return (void*) vkCmdCopyImageToBuffer;
8598 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
8599 return (void*) vkCmdUpdateBuffer;
8600 if (!strcmp(funcName, "vkCmdFillBuffer"))
8601 return (void*) vkCmdFillBuffer;
8602 if (!strcmp(funcName, "vkCmdClearColorImage"))
8603 return (void*) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008604 if (!strcmp(funcName, "vkCmdResolveImage"))
8605 return (void*) vkCmdResolveImage;
8606 if (!strcmp(funcName, "vkCmdSetEvent"))
8607 return (void*) vkCmdSetEvent;
8608 if (!strcmp(funcName, "vkCmdResetEvent"))
8609 return (void*) vkCmdResetEvent;
8610 if (!strcmp(funcName, "vkCmdWaitEvents"))
8611 return (void*) vkCmdWaitEvents;
8612 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
8613 return (void*) vkCmdPipelineBarrier;
8614 if (!strcmp(funcName, "vkCmdBeginQuery"))
8615 return (void*) vkCmdBeginQuery;
8616 if (!strcmp(funcName, "vkCmdEndQuery"))
8617 return (void*) vkCmdEndQuery;
8618 if (!strcmp(funcName, "vkCmdResetQueryPool"))
8619 return (void*) vkCmdResetQueryPool;
8620 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
8621 return (void*) vkCmdWriteTimestamp;
8622 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
8623 return (void*) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008624 if (!strcmp(funcName, "vkCreateFramebuffer"))
8625 return (void*) vkCreateFramebuffer;
8626 if (!strcmp(funcName, "vkCreateRenderPass"))
8627 return (void*) vkCreateRenderPass;
8628 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
8629 return (void*) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08008630 if (!strcmp(funcName, "vkCmdNextSubpass"))
8631 return (void*) vkCmdNextSubpass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008632 if (!strcmp(funcName, "vkCmdEndRenderPass"))
8633 return (void*) vkCmdEndRenderPass;
Jon Ashburneab34492015-06-01 09:37:38 -06008634
Jon Ashburneab34492015-06-01 09:37:38 -06008635 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008636 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008637 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008638 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06008639 }
8640}
8641
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008642VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008643{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008644 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008645 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05008646 }
8647
Jon Ashburn8fd08252015-05-28 16:25:02 -06008648 /* loader uses this to force layer initialization; instance object is wrapped */
8649 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06008650 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
8651 return (void *) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06008652 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008653
Jeremy Hayes99a96322015-06-26 12:48:09 -06008654 if (!strcmp(funcName, "vkCreateInstance"))
8655 return (void*) vkCreateInstance;
8656 if (!strcmp(funcName, "vkDestroyInstance"))
8657 return (void*) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008658 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
8659 return (void*) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008660 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
8661 return (void*) vkGetPhysicalDeviceProperties;
8662 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
8663 return (void*) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06008664 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
8665 return (void*) vkGetPhysicalDeviceFormatProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06008666 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
8667 return (void*) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06008668 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
8669 return (void*) vkGetGlobalLayerProperties;
8670 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
8671 return (void*) vkGetGlobalExtensionProperties;
8672 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
8673 return (void*) vkGetPhysicalDeviceLayerProperties;
8674 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
8675 return (void*) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06008676
Jeremy Hayes99a96322015-06-26 12:48:09 -06008677 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
8678 void* fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
8679 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06008680 return fptr;
8681
Jeremy Hayes99a96322015-06-26 12:48:09 -06008682 {
8683 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8684 return NULL;
8685 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8686 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06008687}