blob: fd9b56f022cd016a41b21951e8bebef86afe4e46 [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <iostream>
30#include <string>
31#include <sstream>
Mark Lobodzinski3723c512015-05-26 10:58:40 -050032#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060033#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060034
Tobin Ehlis7a51d902015-07-03 10:34:49 -060035#include "vk_loader_platform.h"
Tobin Ehlis2d1d9702015-07-03 09:42:57 -060036#include "vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060037#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060038#include "vk_enum_validate_helper.h"
39#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060040//The following is #included again to catch certain OS-specific functions being used:
Tobin Ehlis7a51d902015-07-03 10:34:49 -060041#include "vk_loader_platform.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060042
Tobin Ehlis56d204a2015-07-03 10:15:26 -060043#include "vk_layer_table.h"
44#include "vk_layer_data.h"
45#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060046#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060047
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060048typedef struct _layer_data {
49 debug_report_data *report_data;
50 VkDbgMsgCallback logging_callback;
51} layer_data;
Mark Lobodzinski3723c512015-05-26 10:58:40 -050052
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060053static std::unordered_map<void*, layer_data*> layer_data_map;
54static device_table_map pc_device_table_map;
55static instance_table_map pc_instance_table_map;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060056
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060057// "my instance data"
58debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060059{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060060 dispatch_key key = get_dispatch_key(object);
61 layer_data *data = get_my_data_ptr(get_dispatch_key(object), layer_data_map);
62#if DISPATCH_MAP_DEBUG
63 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
64#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060065 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060066
67 return data->report_data;
68}
69
70// "my device data"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060071debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060072{
73 dispatch_key key = get_dispatch_key(object);
74 layer_data *data = get_my_data_ptr(key, layer_data_map);
75#if DISPATCH_MAP_DEBUG
76 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
77#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060078 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060079 return data->report_data;
80}
81
82static void InitParamChecker(layer_data *data)
83{
84 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
85
86 uint32_t debug_action = 0;
87 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
88 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
89 {
90 FILE *log_output = NULL;
91 const char* option_str = getLayerOption("ParamCheckerLogFilename");
92 if(option_str)
93 {
94 log_output = fopen(option_str, "w");
95 }
96 if(log_output == NULL)
97 {
98 log_output = stdout;
99 }
100
101 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void*)log_output, &data->logging_callback);
102 }
103}
104
105VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
106 VkInstance instance,
107 VkFlags msgFlags,
108 const PFN_vkDbgMsgCallback pfnMsgCallback,
109 void* pUserData,
110 VkDbgMsgCallback* pMsgCallback)
111{
112 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
113 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
114
115 if (result == VK_SUCCESS)
116 {
117 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
118 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
119 }
120
121 return result;
122}
123
124VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
125 VkInstance instance,
126 VkDbgMsgCallback msgCallback)
127{
128 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
129 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
130
131 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
132 layer_destroy_msg_callback(data->report_data, msgCallback);
133
134 return result;
135}
136
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600137static const VkLayerProperties pc_global_layers[] = {
138 {
139 "ParamChecker",
140 VK_API_VERSION,
141 VK_MAKE_VERSION(0, 1, 0),
142 "Validation layer: ParamChecker",
143 }
144};
Tony Barbour426b9052015-06-24 16:06:58 -0600145
146VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600147 const char *pLayerName,
148 uint32_t *pCount,
149 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600150{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600151 /* ParamChecker does not have any global extensions */
152 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600153}
154
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600155VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties(
156 uint32_t *pCount,
157 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600158{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600159 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
160 pc_global_layers,
161 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600162}
163
164VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600165 VkPhysicalDevice physicalDevice,
166 const char* pLayerName,
167 uint32_t* pCount,
168 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600169{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600170 /* ParamChecker does not have any physical device extensions */
171 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayescf469132015-04-17 10:36:53 -0600172}
173
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600174VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
175 VkPhysicalDevice physicalDevice,
176 uint32_t* pCount,
177 VkLayerProperties* pProperties)
178{
179 /* ParamChecker's physical device layers are the same as global */
180 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
181 pCount, pProperties);
182}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600183
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600184// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600185
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600186static
187std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600188{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600189 switch(enumerator)
190 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600191 case VK_RESULT_MAX_ENUM:
192 {
193 return "VK_RESULT_MAX_ENUM";
194 break;
195 }
196 case VK_ERROR_INVALID_LAYER:
197 {
198 return "VK_ERROR_INVALID_LAYER";
199 break;
200 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600201 case VK_ERROR_MEMORY_NOT_BOUND:
202 {
203 return "VK_ERROR_MEMORY_NOT_BOUND";
204 break;
205 }
206 case VK_ERROR_BUILDING_COMMAND_BUFFER:
207 {
208 return "VK_ERROR_BUILDING_COMMAND_BUFFER";
209 break;
210 }
211 case VK_ERROR_INCOMPATIBLE_DRIVER:
212 {
213 return "VK_ERROR_INCOMPATIBLE_DRIVER";
214 break;
215 }
216 case VK_ERROR_MEMORY_UNMAP_FAILED:
217 {
218 return "VK_ERROR_MEMORY_UNMAP_FAILED";
219 break;
220 }
221 case VK_ERROR_MEMORY_MAP_FAILED:
222 {
223 return "VK_ERROR_MEMORY_MAP_FAILED";
224 break;
225 }
226 case VK_ERROR_BAD_PIPELINE_DATA:
227 {
228 return "VK_ERROR_BAD_PIPELINE_DATA";
229 break;
230 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600231 case VK_ERROR_INVALID_QUEUE_TYPE:
232 {
233 return "VK_ERROR_INVALID_QUEUE_TYPE";
234 break;
235 }
236 case VK_ERROR_BAD_SHADER_CODE:
237 {
238 return "VK_ERROR_BAD_SHADER_CODE";
239 break;
240 }
241 case VK_ERROR_INVALID_IMAGE:
242 {
243 return "VK_ERROR_INVALID_IMAGE";
244 break;
245 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600246 case VK_ERROR_INVALID_FORMAT:
247 {
248 return "VK_ERROR_INVALID_FORMAT";
249 break;
250 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600251 case VK_ERROR_UNAVAILABLE:
252 {
253 return "VK_ERROR_UNAVAILABLE";
254 break;
255 }
256 case VK_INCOMPLETE:
257 {
258 return "VK_INCOMPLETE";
259 break;
260 }
261 case VK_ERROR_OUT_OF_HOST_MEMORY:
262 {
263 return "VK_ERROR_OUT_OF_HOST_MEMORY";
264 break;
265 }
266 case VK_ERROR_UNKNOWN:
267 {
268 return "VK_ERROR_UNKNOWN";
269 break;
270 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600271 case VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION:
272 {
273 return "VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION";
274 break;
275 }
276 case VK_ERROR_INITIALIZATION_FAILED:
277 {
278 return "VK_ERROR_INITIALIZATION_FAILED";
279 break;
280 }
281 case VK_NOT_READY:
282 {
283 return "VK_NOT_READY";
284 break;
285 }
286 case VK_ERROR_INVALID_POINTER:
287 {
288 return "VK_ERROR_INVALID_POINTER";
289 break;
290 }
291 case VK_ERROR_INVALID_VALUE:
292 {
293 return "VK_ERROR_INVALID_VALUE";
294 break;
295 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600296 case VK_ERROR_NOT_MAPPABLE:
297 {
298 return "VK_ERROR_NOT_MAPPABLE";
299 break;
300 }
301 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
302 {
303 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
304 break;
305 }
306 case VK_EVENT_SET:
307 {
308 return "VK_EVENT_SET";
309 break;
310 }
311 case VK_TIMEOUT:
312 {
313 return "VK_TIMEOUT";
314 break;
315 }
316 case VK_ERROR_INVALID_FLAGS:
317 {
318 return "VK_ERROR_INVALID_FLAGS";
319 break;
320 }
321 case VK_EVENT_RESET:
322 {
323 return "VK_EVENT_RESET";
324 break;
325 }
326 case VK_ERROR_INVALID_DESCRIPTOR_SET_DATA:
327 {
328 return "VK_ERROR_INVALID_DESCRIPTOR_SET_DATA";
329 break;
330 }
331 case VK_UNSUPPORTED:
332 {
333 return "VK_UNSUPPORTED";
334 break;
335 }
336 case VK_ERROR_INVALID_HANDLE:
337 {
338 return "VK_ERROR_INVALID_HANDLE";
339 break;
340 }
341 case VK_ERROR_INCOMPATIBLE_DEVICE:
342 {
343 return "VK_ERROR_INCOMPATIBLE_DEVICE";
344 break;
345 }
346 case VK_SUCCESS:
347 {
348 return "VK_SUCCESS";
349 break;
350 }
351 case VK_ERROR_INCOMPATIBLE_QUEUE:
352 {
353 return "VK_ERROR_INCOMPATIBLE_QUEUE";
354 break;
355 }
356 case VK_ERROR_INVALID_EXTENSION:
357 {
358 return "VK_ERROR_INVALID_EXTENSION";
359 break;
360 }
361 case VK_ERROR_DEVICE_ALREADY_CREATED:
362 {
363 return "VK_ERROR_DEVICE_ALREADY_CREATED";
364 break;
365 }
366 case VK_ERROR_DEVICE_LOST:
367 {
368 return "VK_ERROR_DEVICE_LOST";
369 break;
370 }
371 case VK_ERROR_INVALID_ORDINAL:
372 {
373 return "VK_ERROR_INVALID_ORDINAL";
374 break;
375 }
376 case VK_ERROR_INVALID_MEMORY_SIZE:
377 {
378 return "VK_ERROR_INVALID_MEMORY_SIZE";
379 break;
380 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600381 case VK_ERROR_INCOMPLETE_COMMAND_BUFFER:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600382 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600383 return "VK_ERROR_INCOMPLETE_COMMAND_BUFFER";
384 break;
385 }
386 case VK_ERROR_INVALID_ALIGNMENT:
387 {
388 return "VK_ERROR_INVALID_ALIGNMENT";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600389 break;
390 }
391 default:
392 {
393 return "unrecognized enumerator";
394 break;
395 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600396 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600397}
398
399static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600400bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
401{
402 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(VK_FORMAT_FEATURE_CONVERSION_BIT |
403 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
404 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
405 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
406 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
407 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
408 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
409 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
410 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
411 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
412 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT);
413 if(enumerator & (~allFlags))
414 {
415 return false;
416 }
417
418 return true;
419}
420
421static
422std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
423{
424 if(!ValidateEnumerator(enumerator))
425 {
426 return "unrecognized enumerator";
427 }
428
429 std::vector<std::string> strings;
430 if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT)
431 {
432 strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT");
433 }
434 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
435 {
436 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
437 }
438 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
439 {
440 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
441 }
442 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
443 {
444 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
445 }
446 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
447 {
448 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
449 }
450 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
451 {
452 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
453 }
454 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
455 {
456 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
457 }
458 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
459 {
460 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
461 }
462 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
463 {
464 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
465 }
466 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
467 {
468 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
469 }
470 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
471 {
472 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
473 }
474
475 std::string enumeratorString;
476 for(auto const& string : strings)
477 {
478 enumeratorString += string;
479
480 if(string != strings.back())
481 {
482 enumeratorString += '|';
483 }
484 }
485
486 return enumeratorString;
487}
488
489static
490bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
491{
492 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
493 VK_IMAGE_USAGE_DEPTH_STENCIL_BIT |
494 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
495 VK_IMAGE_USAGE_STORAGE_BIT |
496 VK_IMAGE_USAGE_SAMPLED_BIT |
497 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
498 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
499 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT |
500 VK_IMAGE_USAGE_GENERAL);
501 if(enumerator & (~allFlags))
502 {
503 return false;
504 }
505
506 return true;
507}
508
509static
510std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
511{
512 if(!ValidateEnumerator(enumerator))
513 {
514 return "unrecognized enumerator";
515 }
516
517 std::vector<std::string> strings;
518 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
519 {
520 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
521 }
522 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
523 {
524 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
525 }
526 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
527 {
528 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
529 }
530 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
531 {
532 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
533 }
534 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
535 {
536 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
537 }
538 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
539 {
540 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
541 }
542 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
543 {
544 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
545 }
546 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
547 {
548 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
549 }
550 if(enumerator & VK_IMAGE_USAGE_GENERAL)
551 {
552 strings.push_back("VK_IMAGE_USAGE_GENERAL");
553 }
554
555 std::string enumeratorString;
556 for(auto const& string : strings)
557 {
558 enumeratorString += string;
559
560 if(string != strings.back())
561 {
562 enumeratorString += '|';
563 }
564 }
565
566 return enumeratorString;
567}
568
569static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600570bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
571{
572 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
573 VK_QUEUE_DMA_BIT |
574 VK_QUEUE_COMPUTE_BIT |
575 VK_QUEUE_SPARSE_MEMMGR_BIT |
576 VK_QUEUE_GRAPHICS_BIT);
577 if(enumerator & (~allFlags))
578 {
579 return false;
580 }
581
582 return true;
583}
584
585static
586std::string EnumeratorString(VkQueueFlagBits const& enumerator)
587{
588 if(!ValidateEnumerator(enumerator))
589 {
590 return "unrecognized enumerator";
591 }
592
593 std::vector<std::string> strings;
594 if(enumerator & VK_QUEUE_EXTENDED_BIT)
595 {
596 strings.push_back("VK_QUEUE_EXTENDED_BIT");
597 }
598 if(enumerator & VK_QUEUE_DMA_BIT)
599 {
600 strings.push_back("VK_QUEUE_DMA_BIT");
601 }
602 if(enumerator & VK_QUEUE_COMPUTE_BIT)
603 {
604 strings.push_back("VK_QUEUE_COMPUTE_BIT");
605 }
606 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
607 {
608 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
609 }
610 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
611 {
612 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
613 }
614
615 std::string enumeratorString;
616 for(auto const& string : strings)
617 {
618 enumeratorString += string;
619
620 if(string != strings.back())
621 {
622 enumeratorString += '|';
623 }
624 }
625
626 return enumeratorString;
627}
628
629static
630bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
631{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600632 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
633 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600634 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
635 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
636 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
637 VK_MEMORY_PROPERTY_DEVICE_ONLY);
638 if(enumerator & (~allFlags))
639 {
640 return false;
641 }
642
643 return true;
644}
645
646static
647std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
648{
649 if(!ValidateEnumerator(enumerator))
650 {
651 return "unrecognized enumerator";
652 }
653
654 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600655 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
656 {
657 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
658 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600659 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
660 {
661 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
662 }
663 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
664 {
665 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
666 }
667 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
668 {
669 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
670 }
671 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
672 {
673 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
674 }
675 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
676 {
677 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
678 }
679
680 std::string enumeratorString;
681 for(auto const& string : strings)
682 {
683 enumeratorString += string;
684
685 if(string != strings.back())
686 {
687 enumeratorString += '|';
688 }
689 }
690
691 return enumeratorString;
692}
693
694static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600695bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600696{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600697 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600698 if(enumerator & (~allFlags))
699 {
700 return false;
701 }
702
703 return true;
704}
705
706static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600707std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600708{
709 if(!ValidateEnumerator(enumerator))
710 {
711 return "unrecognized enumerator";
712 }
713
714 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600715 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600716 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600717 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600718 }
719
720 std::string enumeratorString;
721 for(auto const& string : strings)
722 {
723 enumeratorString += string;
724
725 if(string != strings.back())
726 {
727 enumeratorString += '|';
728 }
729 }
730
731 return enumeratorString;
732}
733
734static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600735bool ValidateEnumerator(VkDeviceCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600736{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600737 VkDeviceCreateFlagBits allFlags = (VkDeviceCreateFlagBits)(VK_DEVICE_CREATE_VALIDATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600738 if(enumerator & (~allFlags))
739 {
740 return false;
741 }
742
743 return true;
744}
745
746static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600747std::string EnumeratorString(VkDeviceCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600748{
749 if(!ValidateEnumerator(enumerator))
750 {
751 return "unrecognized enumerator";
752 }
753
754 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600755 if(enumerator & VK_DEVICE_CREATE_VALIDATION_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600756 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600757 strings.push_back("VK_DEVICE_CREATE_VALIDATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600758 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600759
760 std::string enumeratorString;
761 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600762 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600763 enumeratorString += string;
764
765 if(string != strings.back())
766 {
767 enumeratorString += '|';
768 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600769 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600770
771 return enumeratorString;
772}
773
774static
775bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
776{
777 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
778 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
779 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
780 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600781 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600782 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600783 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600784
785 return true;
786}
787
788static
789std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
790{
791 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600792 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600793 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600794 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600795
796 std::vector<std::string> strings;
797 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600798 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600799 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600800 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600801 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600802 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600803 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600804 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600805 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600806 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600807 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600808 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600809
810 std::string enumeratorString;
811 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600812 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600813 enumeratorString += string;
814
815 if(string != strings.back())
816 {
817 enumeratorString += '|';
818 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600819 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600820
821 return enumeratorString;
822}
823
824static
825bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
826{
827 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
828 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600829 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600830 return false;
831 }
832
833 return true;
834}
835
836static
837std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
838{
839 if(!ValidateEnumerator(enumerator))
840 {
841 return "unrecognized enumerator";
842 }
843
844 std::vector<std::string> strings;
845 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
846 {
847 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_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(VkFenceCreateFlagBits const& enumerator)
866{
867 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
868 if(enumerator & (~allFlags))
869 {
870 return false;
871 }
872
873 return true;
874}
875
876static
877std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
878{
879 if(!ValidateEnumerator(enumerator))
880 {
881 return "unrecognized enumerator";
882 }
883
884 std::vector<std::string> strings;
885 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
886 {
887 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
888 }
889
890 std::string enumeratorString;
891 for(auto const& string : strings)
892 {
893 enumeratorString += string;
894
895 if(string != strings.back())
896 {
897 enumeratorString += '|';
898 }
899 }
900
901 return enumeratorString;
902}
903
904static
905bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
906{
907 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
908 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
909 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
910 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
911 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
912 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
913 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
914 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
915 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
916 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
917 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
918 if(enumerator & (~allFlags))
919 {
920 return false;
921 }
922
923 return true;
924}
925
926static
927std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
928{
929 if(!ValidateEnumerator(enumerator))
930 {
931 return "unrecognized enumerator";
932 }
933
934 std::vector<std::string> strings;
935 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
936 {
937 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
938 }
939 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
940 {
941 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
942 }
943 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
944 {
945 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
946 }
947 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
948 {
949 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
950 }
951 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
952 {
953 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
954 }
955 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
956 {
957 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
958 }
959 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
960 {
961 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
962 }
963 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
964 {
965 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
966 }
967 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
968 {
969 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
970 }
971 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
972 {
973 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
974 }
975 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
976 {
977 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
978 }
979
980 std::string enumeratorString;
981 for(auto const& string : strings)
982 {
983 enumeratorString += string;
984
985 if(string != strings.back())
986 {
987 enumeratorString += '|';
988 }
989 }
990
991 return enumeratorString;
992}
993
994static
995bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
996{
997 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
998 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
999 VK_QUERY_RESULT_WAIT_BIT |
1000 VK_QUERY_RESULT_64_BIT |
1001 VK_QUERY_RESULT_DEFAULT);
1002 if(enumerator & (~allFlags))
1003 {
1004 return false;
1005 }
1006
1007 return true;
1008}
1009
1010static
1011std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
1012{
1013 if(!ValidateEnumerator(enumerator))
1014 {
1015 return "unrecognized enumerator";
1016 }
1017
1018 std::vector<std::string> strings;
1019 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
1020 {
1021 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
1022 }
1023 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
1024 {
1025 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
1026 }
1027 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
1028 {
1029 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
1030 }
1031 if(enumerator & VK_QUERY_RESULT_64_BIT)
1032 {
1033 strings.push_back("VK_QUERY_RESULT_64_BIT");
1034 }
1035 if(enumerator & VK_QUERY_RESULT_DEFAULT)
1036 {
1037 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001038 }
1039
1040 std::string enumeratorString;
1041 for(auto const& string : strings)
1042 {
1043 enumeratorString += string;
1044
1045 if(string != strings.back())
1046 {
1047 enumeratorString += '|';
1048 }
1049 }
1050
1051 return enumeratorString;
1052}
1053
1054static
1055bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
1056{
1057 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
1058 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
1059 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
1060 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
1061 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
1062 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
1063 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
1064 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
1065 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
1066 VK_BUFFER_USAGE_GENERAL);
1067 if(enumerator & (~allFlags))
1068 {
1069 return false;
1070 }
1071
1072 return true;
1073}
1074
1075static
1076std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
1077{
1078 if(!ValidateEnumerator(enumerator))
1079 {
1080 return "unrecognized enumerator";
1081 }
1082
1083 std::vector<std::string> strings;
1084 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
1085 {
1086 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
1087 }
1088 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
1089 {
1090 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
1091 }
1092 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
1093 {
1094 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
1095 }
1096 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
1097 {
1098 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
1099 }
1100 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
1101 {
1102 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
1103 }
1104 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
1105 {
1106 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
1107 }
1108 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
1109 {
1110 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
1111 }
1112 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
1113 {
1114 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
1115 }
1116 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
1117 {
1118 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
1119 }
1120 if(enumerator & VK_BUFFER_USAGE_GENERAL)
1121 {
1122 strings.push_back("VK_BUFFER_USAGE_GENERAL");
1123 }
1124
1125 std::string enumeratorString;
1126 for(auto const& string : strings)
1127 {
1128 enumeratorString += string;
1129
1130 if(string != strings.back())
1131 {
1132 enumeratorString += '|';
1133 }
1134 }
1135
1136 return enumeratorString;
1137}
1138
1139static
1140bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
1141{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001142 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
1143 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
1144 VK_BUFFER_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001145 if(enumerator & (~allFlags))
1146 {
1147 return false;
1148 }
1149
1150 return true;
1151}
1152
1153static
1154std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
1155{
1156 if(!ValidateEnumerator(enumerator))
1157 {
1158 return "unrecognized enumerator";
1159 }
1160
1161 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001162 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1163 {
1164 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1165 }
1166 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1167 {
1168 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1169 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001170 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
1171 {
1172 strings.push_back("VK_BUFFER_CREATE_SPARSE_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 Hayesea53d6f2015-06-26 12:48:09 -06001190bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1191{
1192 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001193 VK_IMAGE_CREATE_INVARIANT_DATA_BIT |
1194 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1195 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001196 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001197 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001198 if(enumerator & (~allFlags))
1199 {
1200 return false;
1201 }
1202
1203 return true;
1204}
1205
1206static
1207std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1208{
1209 if(!ValidateEnumerator(enumerator))
1210 {
1211 return "unrecognized enumerator";
1212 }
1213
1214 std::vector<std::string> strings;
1215 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1216 {
1217 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1218 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001219 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
1220 {
1221 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
1222 }
1223 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1224 {
1225 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1226 }
1227 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1228 {
1229 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1230 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001231 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1232 {
1233 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1234 }
1235 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
1236 {
1237 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
1238 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001239
1240 std::string enumeratorString;
1241 for(auto const& string : strings)
1242 {
1243 enumeratorString += string;
1244
1245 if(string != strings.back())
1246 {
1247 enumeratorString += '|';
1248 }
1249 }
1250
1251 return enumeratorString;
1252}
1253
1254static
Chia-I Wuc278df82015-07-07 11:50:03 +08001255bool ValidateEnumerator(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001256{
Chia-I Wuc278df82015-07-07 11:50:03 +08001257 VkAttachmentViewCreateFlagBits allFlags = (VkAttachmentViewCreateFlagBits)(VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT |
1258 VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001259 if(enumerator & (~allFlags))
1260 {
1261 return false;
1262 }
1263
1264 return true;
1265}
1266
1267static
Chia-I Wuc278df82015-07-07 11:50:03 +08001268std::string EnumeratorString(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001269{
1270 if(!ValidateEnumerator(enumerator))
1271 {
1272 return "unrecognized enumerator";
1273 }
1274
1275 std::vector<std::string> strings;
Chia-I Wuc278df82015-07-07 11:50:03 +08001276 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001277 {
Chia-I Wuc278df82015-07-07 11:50:03 +08001278 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001279 }
Chia-I Wuc278df82015-07-07 11:50:03 +08001280 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001281 {
Chia-I Wuc278df82015-07-07 11:50:03 +08001282 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001283 }
1284
1285 std::string enumeratorString;
1286 for(auto const& string : strings)
1287 {
1288 enumeratorString += string;
1289
1290 if(string != strings.back())
1291 {
1292 enumeratorString += '|';
1293 }
1294 }
1295
1296 return enumeratorString;
1297}
1298
1299static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001300bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1301{
1302 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1303 VK_CHANNEL_B_BIT |
1304 VK_CHANNEL_G_BIT |
1305 VK_CHANNEL_R_BIT);
1306 if(enumerator & (~allFlags))
1307 {
1308 return false;
1309 }
1310
1311 return true;
1312}
1313
1314static
1315std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1316{
1317 if(!ValidateEnumerator(enumerator))
1318 {
1319 return "unrecognized enumerator";
1320 }
1321
1322 std::vector<std::string> strings;
1323 if(enumerator & VK_CHANNEL_A_BIT)
1324 {
1325 strings.push_back("VK_CHANNEL_A_BIT");
1326 }
1327 if(enumerator & VK_CHANNEL_B_BIT)
1328 {
1329 strings.push_back("VK_CHANNEL_B_BIT");
1330 }
1331 if(enumerator & VK_CHANNEL_G_BIT)
1332 {
1333 strings.push_back("VK_CHANNEL_G_BIT");
1334 }
1335 if(enumerator & VK_CHANNEL_R_BIT)
1336 {
1337 strings.push_back("VK_CHANNEL_R_BIT");
1338 }
1339
1340 std::string enumeratorString;
1341 for(auto const& string : strings)
1342 {
1343 enumeratorString += string;
1344
1345 if(string != strings.back())
1346 {
1347 enumeratorString += '|';
1348 }
1349 }
1350
1351 return enumeratorString;
1352}
1353
1354static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001355bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001356{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001357 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1358 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1359 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001360 if(enumerator & (~allFlags))
1361 {
1362 return false;
1363 }
1364
1365 return true;
1366}
1367
1368static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001369std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001370{
1371 if(!ValidateEnumerator(enumerator))
1372 {
1373 return "unrecognized enumerator";
1374 }
1375
1376 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001377 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001378 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001379 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1380 }
1381 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1382 {
1383 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1384 }
1385 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1386 {
1387 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001388 }
1389
1390 std::string enumeratorString;
1391 for(auto const& string : strings)
1392 {
1393 enumeratorString += string;
1394
1395 if(string != strings.back())
1396 {
1397 enumeratorString += '|';
1398 }
1399 }
1400
1401 return enumeratorString;
1402}
1403
1404static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001405bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001406{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001407 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1408 VK_SHADER_STAGE_FRAGMENT_BIT |
1409 VK_SHADER_STAGE_GEOMETRY_BIT |
1410 VK_SHADER_STAGE_COMPUTE_BIT |
1411 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1412 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1413 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001414 if(enumerator & (~allFlags))
1415 {
1416 return false;
1417 }
1418
1419 return true;
1420}
1421
1422static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001423std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001424{
1425 if(!ValidateEnumerator(enumerator))
1426 {
1427 return "unrecognized enumerator";
1428 }
1429
1430 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001431 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001432 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001433 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001434 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001435 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001436 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001438 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001440 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001441 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1442 }
1443 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1444 {
1445 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1446 }
1447 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1448 {
1449 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1450 }
1451 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1452 {
1453 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1454 }
1455 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1456 {
1457 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001458 }
1459
1460 std::string enumeratorString;
1461 for(auto const& string : strings)
1462 {
1463 enumeratorString += string;
1464
1465 if(string != strings.back())
1466 {
1467 enumeratorString += '|';
1468 }
1469 }
1470
1471 return enumeratorString;
1472}
1473
1474static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001475bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001476{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001477 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001478 if(enumerator & (~allFlags))
1479 {
1480 return false;
1481 }
1482
1483 return true;
1484}
1485
1486static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001487std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001488{
1489 if(!ValidateEnumerator(enumerator))
1490 {
1491 return "unrecognized enumerator";
1492 }
1493
1494 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001495 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001496 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001497 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001498 }
1499
1500 std::string enumeratorString;
1501 for(auto const& string : strings)
1502 {
1503 enumeratorString += string;
1504
1505 if(string != strings.back())
1506 {
1507 enumeratorString += '|';
1508 }
1509 }
1510
1511 return enumeratorString;
1512}
1513
1514static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001515bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001516{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001517 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1518 VK_PIPELINE_STAGE_HOST_BIT |
1519 VK_PIPELINE_STAGE_TRANSFER_BIT |
1520 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1521 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1522 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1523 VK_PIPELINE_STAGE_TRANSITION_BIT |
1524 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1525 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1526 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1527 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1528 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1529 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1530 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1531 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1532 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1533 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001534 if(enumerator & (~allFlags))
1535 {
1536 return false;
1537 }
1538
1539 return true;
1540}
1541
1542static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001543std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001544{
1545 if(!ValidateEnumerator(enumerator))
1546 {
1547 return "unrecognized enumerator";
1548 }
1549
1550 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001551 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001552 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001553 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001554 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001555 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001556 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001557 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001558 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001559 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001560 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001561 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001562 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001563 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001564 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001565 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001566 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001567 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001568 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001569 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001570 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001571 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001572 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001573 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001574 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001575 if(enumerator & VK_PIPELINE_STAGE_TRANSITION_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001576 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001577 strings.push_back("VK_PIPELINE_STAGE_TRANSITION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001578 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001579 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001580 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001581 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001582 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001583 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001584 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001585 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001586 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001587 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001588 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001589 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001590 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001591 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001592 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001593 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1594 }
1595 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1596 {
1597 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1598 }
1599 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1600 {
1601 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1602 }
1603 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1604 {
1605 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1606 }
1607 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1608 {
1609 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1610 }
1611 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1612 {
1613 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1614 }
1615 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1616 {
1617 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001618 }
1619
1620 std::string enumeratorString;
1621 for(auto const& string : strings)
1622 {
1623 enumeratorString += string;
1624
1625 if(string != strings.back())
1626 {
1627 enumeratorString += '|';
1628 }
1629 }
1630
1631 return enumeratorString;
1632}
1633
1634static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001635bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001636{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001637 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1638 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1639 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1640 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1641 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001642 if(enumerator & (~allFlags))
1643 {
1644 return false;
1645 }
1646
1647 return true;
1648}
1649
1650static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001651std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001652{
1653 if(!ValidateEnumerator(enumerator))
1654 {
1655 return "unrecognized enumerator";
1656 }
1657
1658 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001659 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001660 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001661 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001662 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001663 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001664 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001665 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001666 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001667 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001668 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001669 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1670 }
1671 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1672 {
1673 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1674 }
1675 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1676 {
1677 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001678 }
1679
1680 std::string enumeratorString;
1681 for(auto const& string : strings)
1682 {
1683 enumeratorString += string;
1684
1685 if(string != strings.back())
1686 {
1687 enumeratorString += '|';
1688 }
1689 }
1690
1691 return enumeratorString;
1692}
1693
1694static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001695bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001696{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001697 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1698 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1699 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1700 VK_MEMORY_INPUT_SHADER_READ_BIT |
1701 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1702 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1703 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1704 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1705 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1706 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001707 if(enumerator & (~allFlags))
1708 {
1709 return false;
1710 }
1711
1712 return true;
1713}
1714
1715static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001716std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001717{
1718 if(!ValidateEnumerator(enumerator))
1719 {
1720 return "unrecognized enumerator";
1721 }
1722
1723 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001724 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001725 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001726 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1727 }
1728 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1729 {
1730 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1731 }
1732 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1733 {
1734 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1735 }
1736 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1737 {
1738 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1739 }
1740 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1741 {
1742 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1743 }
1744 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1745 {
1746 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1747 }
1748 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1749 {
1750 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1751 }
1752 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1753 {
1754 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1755 }
1756 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1757 {
1758 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1759 }
1760 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1761 {
1762 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001763 }
1764
1765 std::string enumeratorString;
1766 for(auto const& string : strings)
1767 {
1768 enumeratorString += string;
1769
1770 if(string != strings.back())
1771 {
1772 enumeratorString += '|';
1773 }
1774 }
1775
1776 return enumeratorString;
1777}
1778
1779static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001780bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001781{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001782 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1783 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001784 if(enumerator & (~allFlags))
1785 {
1786 return false;
1787 }
1788
1789 return true;
1790}
1791
1792static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001793std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001794{
1795 if(!ValidateEnumerator(enumerator))
1796 {
1797 return "unrecognized enumerator";
1798 }
1799
1800 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001801 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001802 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001803 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001804 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001805 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001806 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001807 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001808 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001809
1810 std::string enumeratorString;
1811 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001812 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001813 enumeratorString += string;
1814
1815 if(string != strings.back())
1816 {
1817 enumeratorString += '|';
1818 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001819 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001820
1821 return enumeratorString;
1822}
1823
1824static
1825bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1826{
1827 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES);
1828 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001829 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001830 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001831 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001832
1833 return true;
1834}
1835
1836static
1837std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1838{
1839 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001840 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001841 return "unrecognized enumerator";
1842 }
1843
1844 std::vector<std::string> strings;
1845 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES)
1846 {
1847 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001848 }
1849
1850 std::string enumeratorString;
1851 for(auto const& string : strings)
1852 {
1853 enumeratorString += string;
1854
1855 if(string != strings.back())
1856 {
1857 enumeratorString += '|';
1858 }
1859 }
1860
1861 return enumeratorString;
1862}
1863
1864static
1865bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1866{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001867 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1868 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001869 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1870 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1871 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1872 if(enumerator & (~allFlags))
1873 {
1874 return false;
1875 }
1876
1877 return true;
1878}
1879
1880static
1881std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1882{
1883 if(!ValidateEnumerator(enumerator))
1884 {
1885 return "unrecognized enumerator";
1886 }
1887
1888 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001889 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1890 {
1891 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1892 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001893 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1894 {
1895 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1896 }
1897 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1898 {
1899 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1900 }
1901 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1902 {
1903 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1904 }
1905 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1906 {
1907 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1908 }
1909
1910 std::string enumeratorString;
1911 for(auto const& string : strings)
1912 {
1913 enumeratorString += string;
1914
1915 if(string != strings.back())
1916 {
1917 enumeratorString += '|';
1918 }
1919 }
1920
1921 return enumeratorString;
1922}
1923
1924static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001925bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001926{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001927 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001928 if(enumerator & (~allFlags))
1929 {
1930 return false;
1931 }
1932
1933 return true;
1934}
1935
1936static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001937std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001938{
1939 if(!ValidateEnumerator(enumerator))
1940 {
1941 return "unrecognized enumerator";
1942 }
1943
1944 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001945 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001946 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001947 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001948 }
1949
1950 std::string enumeratorString;
1951 for(auto const& string : strings)
1952 {
1953 enumeratorString += string;
1954
1955 if(string != strings.back())
1956 {
1957 enumeratorString += '|';
1958 }
1959 }
1960
1961 return enumeratorString;
1962}
1963
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001964static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001965bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001966{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001967 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1968 VK_IMAGE_ASPECT_STENCIL_BIT |
1969 VK_IMAGE_ASPECT_DEPTH_BIT |
1970 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001971 if(enumerator & (~allFlags))
1972 {
1973 return false;
1974 }
1975
1976 return true;
1977}
1978
1979static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001980std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001981{
1982 if(!ValidateEnumerator(enumerator))
1983 {
1984 return "unrecognized enumerator";
1985 }
1986
1987 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001988 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001989 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001990 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1991 }
1992 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1993 {
1994 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1995 }
1996 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1997 {
1998 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1999 }
2000 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
2001 {
2002 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
2003 }
2004
2005 std::string enumeratorString;
2006 for(auto const& string : strings)
2007 {
2008 enumeratorString += string;
2009
2010 if(string != strings.back())
2011 {
2012 enumeratorString += '|';
2013 }
2014 }
2015
2016 return enumeratorString;
2017}
2018
2019static
2020bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
2021{
2022 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
2023 if(enumerator & (~allFlags))
2024 {
2025 return false;
2026 }
2027
2028 return true;
2029}
2030
2031static
2032std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
2033{
2034 if(!ValidateEnumerator(enumerator))
2035 {
2036 return "unrecognized enumerator";
2037 }
2038
2039 std::vector<std::string> strings;
2040 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
2041 {
2042 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002043 }
2044
2045 std::string enumeratorString;
2046 for(auto const& string : strings)
2047 {
2048 enumeratorString += string;
2049
2050 if(string != strings.back())
2051 {
2052 enumeratorString += '|';
2053 }
2054 }
2055
2056 return enumeratorString;
2057}
2058
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002059VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
2060 const VkInstanceCreateInfo* pCreateInfo,
2061 VkInstance* pInstance)
2062{
2063 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
2064 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
2065
2066 if (result == VK_SUCCESS) {
2067 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
2068 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06002069 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002070
2071 InitParamChecker(data);
2072 }
2073
2074 return result;
2075}
2076
2077VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(
2078 VkInstance instance)
2079{
2080 // Grab the key before the instance is destroyed.
2081 dispatch_key key = get_dispatch_key(instance);
2082 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
2083 VkResult result = pTable->DestroyInstance(instance);
2084
2085 // Clean up logging callback, if any
2086 layer_data *data = get_my_data_ptr(key, layer_data_map);
2087 if(data->logging_callback)
2088 {
2089 layer_destroy_msg_callback(data->report_data, data->logging_callback);
2090 }
2091
2092 layer_debug_report_destroy_instance(mid(instance));
2093 layer_data_map.erase(pTable);
2094
2095 pc_instance_table_map.erase(key);
2096 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2097
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002098 return result;
2099}
2100
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002101bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002102 VkInstance instance,
2103 uint32_t* pPhysicalDeviceCount,
2104 VkPhysicalDevice* pPhysicalDevices,
2105 VkResult result)
2106{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002107
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002108 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002109 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002110 }
2111
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002112 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002113 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002114 }
2115
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002116 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002117 {
2118 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002119 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2120 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002121 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002122
2123 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002124}
2125
2126VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
2127 VkInstance instance,
2128 uint32_t* pPhysicalDeviceCount,
2129 VkPhysicalDevice* pPhysicalDevices)
2130{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002131 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
2132
2133 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
2134
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002135 return result;
2136}
2137
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002138bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002139 VkPhysicalDevice physicalDevice,
2140 VkPhysicalDeviceFeatures* pFeatures,
2141 VkResult result)
2142{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002143
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002144 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002145 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002146 }
2147
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002148 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002149 {
2150 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002151 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2152 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002153 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002154
2155 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002156}
2157
2158VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
2159 VkPhysicalDevice physicalDevice,
2160 VkPhysicalDeviceFeatures* pFeatures)
2161{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002162 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
2163
2164 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
2165
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002166 return result;
2167}
2168
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002169bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002170 VkPhysicalDevice physicalDevice,
2171 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002172 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002173 VkResult result)
2174{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002175
2176 if(format < VK_FORMAT_BEGIN_RANGE ||
2177 format > VK_FORMAT_END_RANGE)
2178 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002179 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002180 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002181 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002182 }
2183
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002184 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002185 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002186 }
2187
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002188 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002189 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002190 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002191 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2192 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002193 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002194
2195 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002196}
2197
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002198VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002199 VkPhysicalDevice physicalDevice,
2200 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002201 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002202{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002203 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002204
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002205 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2206
2207 return result;
2208}
2209
2210bool PostGetPhysicalDeviceImageFormatProperties(
2211 VkPhysicalDevice physicalDevice,
2212 VkFormat format,
2213 VkImageType type,
2214 VkImageTiling tiling,
2215 VkImageUsageFlags usage,
2216 VkImageFormatProperties* pImageFormatProperties,
2217 VkResult result)
2218{
2219
2220 if(format < VK_FORMAT_BEGIN_RANGE ||
2221 format > VK_FORMAT_END_RANGE)
2222 {
2223 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2224 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2225 return false;
2226 }
2227
2228 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2229 type > VK_IMAGE_TYPE_END_RANGE)
2230 {
2231 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2232 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2233 return false;
2234 }
2235
2236 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2237 tiling > VK_IMAGE_TILING_END_RANGE)
2238 {
2239 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2240 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2241 return false;
2242 }
2243
2244
2245 if(pImageFormatProperties != nullptr)
2246 {
2247 }
2248
2249 if(result < VK_SUCCESS)
2250 {
2251 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2252 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2253 return false;
2254 }
2255
2256 return true;
2257}
2258
2259VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2260 VkPhysicalDevice physicalDevice,
2261 VkFormat format,
2262 VkImageType type,
2263 VkImageTiling tiling,
2264 VkImageUsageFlags usage,
2265 VkImageFormatProperties* pImageFormatProperties)
2266{
2267 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
2268
2269 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002270
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002271 return result;
2272}
2273
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002274bool PostGetPhysicalDeviceLimits(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002275 VkPhysicalDevice physicalDevice,
2276 VkPhysicalDeviceLimits* pLimits,
2277 VkResult result)
2278{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002279
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002280 if(pLimits != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002281 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002282 }
2283
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002284 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002285 {
2286 std::string reason = "vkGetPhysicalDeviceLimits parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002287 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2288 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002289 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002290
2291 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002292}
2293
2294VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
2295 VkPhysicalDevice physicalDevice,
2296 VkPhysicalDeviceLimits* pLimits)
2297{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002298 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceLimits(physicalDevice, pLimits);
2299
2300 PostGetPhysicalDeviceLimits(physicalDevice, pLimits, result);
2301
2302 return result;
2303}
2304
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002305bool PostGetPhysicalDeviceProperties(
2306 VkPhysicalDevice physicalDevice,
2307 VkPhysicalDeviceProperties* pProperties,
2308 VkResult result)
2309{
2310
2311 if(pProperties != nullptr)
2312 {
2313 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2314 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2315 {
2316 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2317 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2318 return false;
2319 }
2320 }
2321
2322 if(result < VK_SUCCESS)
2323 {
2324 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2325 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2326 return false;
2327 }
2328
2329 return true;
2330}
2331
2332VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2333 VkPhysicalDevice physicalDevice,
2334 VkPhysicalDeviceProperties* pProperties)
2335{
2336 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2337
2338 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2339
2340 return result;
2341}
2342
2343bool PostGetPhysicalDeviceQueueCount(
2344 VkPhysicalDevice physicalDevice,
2345 uint32_t* pCount,
2346 VkResult result)
2347{
2348
2349 if(pCount != nullptr)
2350 {
2351 }
2352
2353 if(result < VK_SUCCESS)
2354 {
2355 std::string reason = "vkGetPhysicalDeviceQueueCount parameter, VkResult result, is " + EnumeratorString(result);
2356 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2357 return false;
2358 }
2359
2360 return true;
2361}
2362
2363VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueCount(
2364 VkPhysicalDevice physicalDevice,
2365 uint32_t* pCount)
2366{
2367 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueCount(physicalDevice, pCount);
2368
2369 PostGetPhysicalDeviceQueueCount(physicalDevice, pCount, result);
2370
2371 return result;
2372}
2373
2374bool PostGetPhysicalDeviceQueueProperties(
2375 VkPhysicalDevice physicalDevice,
2376 uint32_t count,
2377 VkPhysicalDeviceQueueProperties* pQueueProperties,
2378 VkResult result)
2379{
2380
2381
2382 if(pQueueProperties != nullptr)
2383 {
2384 }
2385
2386 if(result < VK_SUCCESS)
2387 {
2388 std::string reason = "vkGetPhysicalDeviceQueueProperties parameter, VkResult result, is " + EnumeratorString(result);
2389 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2390 return false;
2391 }
2392
2393 return true;
2394}
2395
2396VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2397 VkPhysicalDevice physicalDevice,
2398 uint32_t count,
2399 VkPhysicalDeviceQueueProperties* pQueueProperties)
2400{
2401 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties);
2402
2403 PostGetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties, result);
2404
2405 return result;
2406}
2407
2408bool PostGetPhysicalDeviceMemoryProperties(
2409 VkPhysicalDevice physicalDevice,
2410 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2411 VkResult result)
2412{
2413
2414 if(pMemoryProperties != nullptr)
2415 {
2416 }
2417
2418 if(result < VK_SUCCESS)
2419 {
2420 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2421 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2422 return false;
2423 }
2424
2425 return true;
2426}
2427
2428VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2429 VkPhysicalDevice physicalDevice,
2430 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2431{
2432 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2433
2434 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2435
2436 return result;
2437}
2438
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002439VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2440 VkPhysicalDevice physicalDevice,
2441 const VkDeviceCreateInfo* pCreateInfo,
2442 VkDevice* pDevice)
2443{
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002444 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002445 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2446 if(result == VK_SUCCESS)
2447 {
2448 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2449 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2450 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2451 }
2452
2453 return result;
2454}
2455
2456VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
2457 VkDevice device)
2458{
2459 layer_debug_report_destroy_device(device);
2460
2461 dispatch_key key = get_dispatch_key(device);
2462#if DISPATCH_MAP_DEBUG
2463 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2464#endif
2465
2466 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
2467 pc_device_table_map.erase(key);
2468 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2469
2470 return result;
2471}
2472
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002473bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002474 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002475 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002476 uint32_t queueIndex,
2477 VkQueue* pQueue,
2478 VkResult result)
2479{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002480
2481
2482
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002483 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002484 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002485 }
2486
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002487 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002488 {
2489 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2491 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002492 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002493
2494 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002495}
2496
2497VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2498 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002499 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002500 uint32_t queueIndex,
2501 VkQueue* pQueue)
2502{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002503 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002504
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002505 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002506
2507 return result;
2508}
2509
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002510bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002511 VkQueue queue,
2512 const VkCmdBuffer* pCmdBuffers)
2513{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002514 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002515 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002516 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002517
2518 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002519}
2520
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002521bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002522 VkQueue queue,
2523 uint32_t cmdBufferCount,
2524 VkFence fence,
2525 VkResult result)
2526{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002527
2528
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002529
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002530 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002531 {
2532 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002533 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2534 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002535 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002536
2537 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002538}
2539
2540VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2541 VkQueue queue,
2542 uint32_t cmdBufferCount,
2543 const VkCmdBuffer* pCmdBuffers,
2544 VkFence fence)
2545{
2546 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002547
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002548 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2549
2550 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2551
2552 return result;
2553}
2554
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002555bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002556 VkQueue queue,
2557 VkResult result)
2558{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002559
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002560 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002561 {
2562 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002563 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2564 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002565 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002566
2567 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002568}
2569
2570VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2571 VkQueue queue)
2572{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002573 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2574
2575 PostQueueWaitIdle(queue, result);
2576
2577 return result;
2578}
2579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002581 VkDevice device,
2582 VkResult result)
2583{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002584
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002585 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002586 {
2587 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002588 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2589 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002590 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002591
2592 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002593}
2594
2595VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2596 VkDevice device)
2597{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002598 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2599
2600 PostDeviceWaitIdle(device, result);
2601
2602 return result;
2603}
2604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002605bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002606 VkDevice device,
2607 const VkMemoryAllocInfo* pAllocInfo)
2608{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002609 if(pAllocInfo != nullptr)
2610 {
2611 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002612 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002613 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002614 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002615 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002616 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002617 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002618
2619 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002620}
2621
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002622bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002623 VkDevice device,
2624 VkDeviceMemory* pMem,
2625 VkResult result)
2626{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002627
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002628 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002629 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002630 }
2631
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002632 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002633 {
2634 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002635 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2636 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002637 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002638
2639 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002640}
2641
2642VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2643 VkDevice device,
2644 const VkMemoryAllocInfo* pAllocInfo,
2645 VkDeviceMemory* pMem)
2646{
2647 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002648
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002649 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2650
2651 PostAllocMemory(device, pMem, result);
2652
2653 return result;
2654}
2655
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002656bool PostFreeMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002657 VkDevice device,
2658 VkDeviceMemory mem,
2659 VkResult result)
2660{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002661
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002662
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002663 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002664 {
2665 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002666 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2667 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002668 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002669
2670 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002671}
2672
2673VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2674 VkDevice device,
2675 VkDeviceMemory mem)
2676{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002677 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2678
2679 PostFreeMemory(device, mem, result);
2680
2681 return result;
2682}
2683
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002684bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002685 VkDevice device,
2686 VkDeviceMemory mem,
2687 VkDeviceSize offset,
2688 VkDeviceSize size,
2689 VkMemoryMapFlags flags,
2690 void** ppData,
2691 VkResult result)
2692{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002693
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002694
2695
2696
2697
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002698 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002699 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002700 }
2701
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002702 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002703 {
2704 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002705 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2706 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002707 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002708
2709 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002710}
2711
2712VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2713 VkDevice device,
2714 VkDeviceMemory mem,
2715 VkDeviceSize offset,
2716 VkDeviceSize size,
2717 VkMemoryMapFlags flags,
2718 void** ppData)
2719{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002720 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2721
2722 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2723
2724 return result;
2725}
2726
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002727bool PostUnmapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002728 VkDevice device,
2729 VkDeviceMemory mem,
2730 VkResult result)
2731{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002732
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002733
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002734 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002735 {
2736 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002737 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2738 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002739 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002740
2741 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002742}
2743
2744VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2745 VkDevice device,
2746 VkDeviceMemory mem)
2747{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002748 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2749
2750 PostUnmapMemory(device, mem, result);
2751
2752 return result;
2753}
2754
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002755bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002756 VkDevice device,
2757 const VkMappedMemoryRange* pMemRanges)
2758{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002759 if(pMemRanges != nullptr)
2760 {
2761 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002762 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002763 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002764 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002765 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002766 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002767 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002768
2769 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002770}
2771
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002772bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002773 VkDevice device,
2774 uint32_t memRangeCount,
2775 VkResult result)
2776{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002777
2778
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002779 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002780 {
2781 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002782 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2783 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002784 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002785
2786 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002787}
2788
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002789VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002790 VkDevice device,
2791 uint32_t memRangeCount,
2792 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002793{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002794 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002795
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002796 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002797
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002798 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2799
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002800 return result;
2801}
2802
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002803bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002804 VkDevice device,
2805 const VkMappedMemoryRange* pMemRanges)
2806{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002807 if(pMemRanges != nullptr)
2808 {
2809 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002810 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002811 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002812 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002813 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002814 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002815 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002816
2817 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002818}
2819
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002820bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002821 VkDevice device,
2822 uint32_t memRangeCount,
2823 VkResult result)
2824{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002825
2826
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002827 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002828 {
2829 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002830 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2831 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002832 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002833
2834 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002835}
2836
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002837VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002838 VkDevice device,
2839 uint32_t memRangeCount,
2840 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002841{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002842 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002843
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002844 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002845
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002846 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2847
Tony Barbour859ceab2015-04-16 19:23:13 -06002848 return result;
2849}
2850
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002851bool PostGetDeviceMemoryCommitment(
2852 VkDevice device,
2853 VkDeviceMemory memory,
2854 VkDeviceSize* pCommittedMemoryInBytes,
2855 VkResult result)
2856{
2857
2858
2859 if(pCommittedMemoryInBytes != nullptr)
2860 {
2861 }
2862
2863 if(result < VK_SUCCESS)
2864 {
2865 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2866 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2867 return false;
2868 }
2869
2870 return true;
2871}
2872
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002873VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002874 VkDevice device,
2875 VkDeviceMemory memory,
2876 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002877{
2878 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2879
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002880 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2881
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002882 return result;
2883}
2884
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002885bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002886 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002887 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002888 VkDeviceMemory mem,
2889 VkDeviceSize memOffset,
2890 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002891{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002892
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002893
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002894
2895
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002896 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002897 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002898 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2899 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2900 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002901 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002902
2903 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002904}
2905
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002906VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002907 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002908 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002909 VkDeviceMemory mem,
2910 VkDeviceSize memOffset)
2911{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002912 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002913
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002914 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002915
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002916 return result;
2917}
2918
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002919bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002920 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002921 VkImage image,
2922 VkDeviceMemory mem,
2923 VkDeviceSize memOffset,
2924 VkResult result)
2925{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002926
2927
2928
2929
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002930 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002931 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002932 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2933 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2934 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002935 }
2936
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002937 return true;
2938}
2939
2940VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2941 VkDevice device,
2942 VkImage image,
2943 VkDeviceMemory mem,
2944 VkDeviceSize memOffset)
2945{
2946 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2947
2948 PostBindImageMemory(device, image, mem, memOffset, result);
2949
2950 return result;
2951}
2952
2953bool PostGetBufferMemoryRequirements(
2954 VkDevice device,
2955 VkBuffer buffer,
2956 VkMemoryRequirements* pMemoryRequirements,
2957 VkResult result)
2958{
2959
2960
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002961 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002962 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002963 }
2964
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002965 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002966 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002967 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2968 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2969 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002970 }
2971
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002972 return true;
2973}
2974
2975VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2976 VkDevice device,
2977 VkBuffer buffer,
2978 VkMemoryRequirements* pMemoryRequirements)
2979{
2980 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2981
2982 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2983
2984 return result;
2985}
2986
2987bool PostGetImageMemoryRequirements(
2988 VkDevice device,
2989 VkImage image,
2990 VkMemoryRequirements* pMemoryRequirements,
2991 VkResult result)
2992{
2993
2994
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002995 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002996 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002997 }
2998
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002999 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003000 {
3001 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
3002 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3003 return false;
3004 }
3005
3006 return true;
3007}
3008
3009VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
3010 VkDevice device,
3011 VkImage image,
3012 VkMemoryRequirements* pMemoryRequirements)
3013{
3014 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
3015
3016 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
3017
3018 return result;
3019}
3020
3021bool PostGetImageSparseMemoryRequirements(
3022 VkDevice device,
3023 VkImage image,
3024 uint32_t* pNumRequirements,
3025 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
3026 VkResult result)
3027{
3028
3029
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003030 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003031 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003032 }
3033
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003034 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003035 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003036 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3037 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
3038 {
3039 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003040 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003041 return false;
3042 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003043 }
3044
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003045 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003046 {
3047 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
3048 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3049 return false;
3050 }
3051
3052 return true;
3053}
3054
3055VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
3056 VkDevice device,
3057 VkImage image,
3058 uint32_t* pNumRequirements,
3059 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
3060{
3061 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
3062
3063 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
3064
3065 return result;
3066}
3067
3068bool PostGetPhysicalDeviceSparseImageFormatProperties(
3069 VkPhysicalDevice physicalDevice,
3070 VkFormat format,
3071 VkImageType type,
3072 uint32_t samples,
3073 VkImageUsageFlags usage,
3074 VkImageTiling tiling,
3075 uint32_t* pNumProperties,
3076 VkSparseImageFormatProperties* pProperties,
3077 VkResult result)
3078{
3079
3080 if(format < VK_FORMAT_BEGIN_RANGE ||
3081 format > VK_FORMAT_END_RANGE)
3082 {
3083 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003084 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003085 return false;
3086 }
3087
3088 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
3089 type > VK_IMAGE_TYPE_END_RANGE)
3090 {
3091 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003092 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003093 return false;
3094 }
3095
3096
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003097
3098 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3099 tiling > VK_IMAGE_TILING_END_RANGE)
3100 {
3101 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003102 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003103 return false;
3104 }
3105
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003106 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003107 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003108 }
3109
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003110 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003111 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003112 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3113 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
3114 {
3115 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003116 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003117 return false;
3118 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003119 }
3120
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003121 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003122 {
3123 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
3124 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3125 return false;
3126 }
3127
3128 return true;
3129}
3130
3131VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
3132 VkPhysicalDevice physicalDevice,
3133 VkFormat format,
3134 VkImageType type,
3135 uint32_t samples,
3136 VkImageUsageFlags usage,
3137 VkImageTiling tiling,
3138 uint32_t* pNumProperties,
3139 VkSparseImageFormatProperties* pProperties)
3140{
3141 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
3142
3143 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
3144
3145 return result;
3146}
3147
3148bool PreQueueBindSparseBufferMemory(
3149 VkQueue queue,
3150 const VkSparseMemoryBindInfo* pBindInfo)
3151{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003152 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003153 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003154 }
3155
3156 return true;
3157}
3158
3159bool PostQueueBindSparseBufferMemory(
3160 VkQueue queue,
3161 VkBuffer buffer,
3162 uint32_t numBindings,
3163 VkResult result)
3164{
3165
3166
3167
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003168 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003169 {
3170 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
3171 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3172 return false;
3173 }
3174
3175 return true;
3176}
3177
3178VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
3179 VkQueue queue,
3180 VkBuffer buffer,
3181 uint32_t numBindings,
3182 const VkSparseMemoryBindInfo* pBindInfo)
3183{
3184 PreQueueBindSparseBufferMemory(queue, pBindInfo);
3185
3186 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
3187
3188 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
3189
3190 return result;
3191}
3192
3193bool PreQueueBindSparseImageOpaqueMemory(
3194 VkQueue queue,
3195 const VkSparseMemoryBindInfo* pBindInfo)
3196{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003197 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003198 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003199 }
3200
3201 return true;
3202}
3203
3204bool PostQueueBindSparseImageOpaqueMemory(
3205 VkQueue queue,
3206 VkImage image,
3207 uint32_t numBindings,
3208 VkResult result)
3209{
3210
3211
3212
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003213 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003214 {
3215 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
3216 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3217 return false;
3218 }
3219
3220 return true;
3221}
3222
3223VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
3224 VkQueue queue,
3225 VkImage image,
3226 uint32_t numBindings,
3227 const VkSparseMemoryBindInfo* pBindInfo)
3228{
3229 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
3230
3231 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
3232
3233 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
3234
3235 return result;
3236}
3237
3238bool PreQueueBindSparseImageMemory(
3239 VkQueue queue,
3240 const VkSparseImageMemoryBindInfo* pBindInfo)
3241{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003242 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003243 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003244 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3245 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
3246 {
3247 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003248 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003249 return false;
3250 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003251 }
3252
3253 return true;
3254}
3255
3256bool PostQueueBindSparseImageMemory(
3257 VkQueue queue,
3258 VkImage image,
3259 uint32_t numBindings,
3260 VkResult result)
3261{
3262
3263
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003264
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003265 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003266 {
3267 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003268 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3269 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003270 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003271
3272 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003273}
3274
3275VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003276 VkQueue queue,
3277 VkImage image,
3278 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003279 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003280{
3281 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003282
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003283 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003284
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003285 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003286
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003287 return result;
3288}
3289
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003290bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003291 VkDevice device,
3292 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003293{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003294 if(pCreateInfo != nullptr)
3295 {
3296 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003297 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003298 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003299 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003300 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003301 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003302 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003303
3304 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003305}
3306
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003307bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003308 VkDevice device,
3309 VkFence* pFence,
3310 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003311{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003312
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003313 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003314 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003315 }
3316
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003317 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003318 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003319 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003320 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3321 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003322 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003323
3324 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003325}
3326
3327VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3328 VkDevice device,
3329 const VkFenceCreateInfo* pCreateInfo,
3330 VkFence* pFence)
3331{
3332 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003333
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003334 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3335
3336 PostCreateFence(device, pFence, result);
3337
3338 return result;
3339}
3340
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003341bool PostDestroyFence(
3342 VkDevice device,
3343 VkFence fence,
3344 VkResult result)
3345{
3346
3347
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003348 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003349 {
3350 std::string reason = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3351 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3352 return false;
3353 }
3354
3355 return true;
3356}
3357
3358VK_LAYER_EXPORT VkResult VKAPI vkDestroyFence(
3359 VkDevice device,
3360 VkFence fence)
3361{
3362 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3363
3364 PostDestroyFence(device, fence, result);
3365
3366 return result;
3367}
3368
3369bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003370 VkDevice device,
3371 const VkFence* pFences)
3372{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003373 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003374 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003375 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003376
3377 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003378}
3379
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003380bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003381 VkDevice device,
3382 uint32_t fenceCount,
3383 VkResult result)
3384{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003385
3386
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003387 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003388 {
3389 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003390 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3391 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003392 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003393
3394 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003395}
3396
3397VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3398 VkDevice device,
3399 uint32_t fenceCount,
3400 const VkFence* pFences)
3401{
3402 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003403
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003404 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3405
3406 PostResetFences(device, fenceCount, result);
3407
3408 return result;
3409}
3410
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003411bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003412 VkDevice device,
3413 VkFence fence,
3414 VkResult result)
3415{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003416
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003417
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003418 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003419 {
3420 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3422 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003423 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003424
3425 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003426}
3427
3428VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3429 VkDevice device,
3430 VkFence fence)
3431{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003432 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3433
3434 PostGetFenceStatus(device, fence, result);
3435
3436 return result;
3437}
3438
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003439bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003440 VkDevice device,
3441 const VkFence* pFences)
3442{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003443 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003444 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003445 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003446
3447 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003448}
3449
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003450bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003451 VkDevice device,
3452 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003453 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003454 uint64_t timeout,
3455 VkResult result)
3456{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003457
3458
3459
3460
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003461 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003462 {
3463 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003464 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3465 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003466 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003467
3468 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003469}
3470
3471VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3472 VkDevice device,
3473 uint32_t fenceCount,
3474 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003475 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003476 uint64_t timeout)
3477{
3478 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003479
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003480 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3481
3482 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3483
3484 return result;
3485}
3486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003487bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003488 VkDevice device,
3489 const VkSemaphoreCreateInfo* pCreateInfo)
3490{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003491 if(pCreateInfo != nullptr)
3492 {
3493 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003494 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003495 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003496 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003497 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003498 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003499 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003500
3501 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003502}
3503
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003504bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003505 VkDevice device,
3506 VkSemaphore* pSemaphore,
3507 VkResult result)
3508{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003509
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003510 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003511 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003512 }
3513
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003514 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003515 {
3516 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003517 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3518 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003519 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003520
3521 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003522}
3523
3524VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3525 VkDevice device,
3526 const VkSemaphoreCreateInfo* pCreateInfo,
3527 VkSemaphore* pSemaphore)
3528{
3529 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003530
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003531 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3532
3533 PostCreateSemaphore(device, pSemaphore, result);
3534
3535 return result;
3536}
3537
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003538bool PostDestroySemaphore(
3539 VkDevice device,
3540 VkSemaphore semaphore,
3541 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003542{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003543
3544
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003545 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003546 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003547 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3548 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3549 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003550 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003551
3552 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003553}
3554
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003555VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3556 VkDevice device,
3557 VkSemaphore semaphore)
3558{
3559 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3560
3561 PostDestroySemaphore(device, semaphore, result);
3562
3563 return result;
3564}
3565
3566bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003567 VkQueue queue,
3568 VkSemaphore semaphore,
3569 VkResult result)
3570{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003571
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003573 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003574 {
3575 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003576 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3577 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003578 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003579
3580 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003581}
3582
3583VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3584 VkQueue queue,
3585 VkSemaphore semaphore)
3586{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003587 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3588
3589 PostQueueSignalSemaphore(queue, semaphore, result);
3590
3591 return result;
3592}
3593
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003594bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003595 VkQueue queue,
3596 VkSemaphore semaphore,
3597 VkResult result)
3598{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003599
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003600
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003601 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003602 {
3603 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003604 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3605 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003606 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003607
3608 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003609}
3610
3611VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3612 VkQueue queue,
3613 VkSemaphore semaphore)
3614{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003615 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3616
3617 PostQueueWaitSemaphore(queue, semaphore, result);
3618
3619 return result;
3620}
3621
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003622bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003623 VkDevice device,
3624 const VkEventCreateInfo* pCreateInfo)
3625{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003626 if(pCreateInfo != nullptr)
3627 {
3628 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003629 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003631 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003632 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003633 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003634 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003635
3636 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003637}
3638
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003639bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003640 VkDevice device,
3641 VkEvent* pEvent,
3642 VkResult result)
3643{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003644
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003645 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003646 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003647 }
3648
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003649 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003650 {
3651 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003652 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3653 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003654 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003655
3656 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003657}
3658
3659VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3660 VkDevice device,
3661 const VkEventCreateInfo* pCreateInfo,
3662 VkEvent* pEvent)
3663{
3664 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003665
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003666 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3667
3668 PostCreateEvent(device, pEvent, result);
3669
3670 return result;
3671}
3672
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003673bool PostDestroyEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003674 VkDevice device,
3675 VkEvent event,
3676 VkResult result)
3677{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003678
3679
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003680 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003681 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003682 std::string reason = "vkDestroyEvent parameter, VkResult result, is " + EnumeratorString(result);
3683 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3684 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003685 }
3686
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003687 return true;
3688}
3689
3690VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3691 VkDevice device,
3692 VkEvent event)
3693{
3694 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3695
3696 PostDestroyEvent(device, event, result);
3697
3698 return result;
3699}
3700
3701bool PostGetEventStatus(
3702 VkDevice device,
3703 VkEvent event,
3704 VkResult result)
3705{
3706
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003707
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003708 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003709 {
3710 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003711 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3712 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003713 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003714
3715 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003716}
3717
3718VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3719 VkDevice device,
3720 VkEvent event)
3721{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003722 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3723
3724 PostGetEventStatus(device, event, result);
3725
3726 return result;
3727}
3728
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003729bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003730 VkDevice device,
3731 VkEvent event,
3732 VkResult result)
3733{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003734
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003735
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003736 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003737 {
3738 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003739 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3740 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003741 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003742
3743 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003744}
3745
3746VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3747 VkDevice device,
3748 VkEvent event)
3749{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003750 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3751
3752 PostSetEvent(device, event, result);
3753
3754 return result;
3755}
3756
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003757bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003758 VkDevice device,
3759 VkEvent event,
3760 VkResult result)
3761{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003762
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003763
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003764 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003765 {
3766 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3768 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003769 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003770
3771 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003772}
3773
3774VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3775 VkDevice device,
3776 VkEvent event)
3777{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003778 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3779
3780 PostResetEvent(device, event, result);
3781
3782 return result;
3783}
3784
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003785bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003786 VkDevice device,
3787 const VkQueryPoolCreateInfo* pCreateInfo)
3788{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003789 if(pCreateInfo != nullptr)
3790 {
3791 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003792 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003793 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003794 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003795 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003796 }
3797 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3798 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3799 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003800 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003801 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003802 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003803 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003804 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003805
3806 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003807}
3808
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003809bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003810 VkDevice device,
3811 VkQueryPool* pQueryPool,
3812 VkResult result)
3813{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003814
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003815 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003816 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003817 }
3818
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003819 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003820 {
3821 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3823 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003824 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003825
3826 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003827}
3828
3829VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3830 VkDevice device,
3831 const VkQueryPoolCreateInfo* pCreateInfo,
3832 VkQueryPool* pQueryPool)
3833{
3834 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003835
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003836 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3837
3838 PostCreateQueryPool(device, pQueryPool, result);
3839
3840 return result;
3841}
3842
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003843bool PostDestroyQueryPool(
3844 VkDevice device,
3845 VkQueryPool queryPool,
3846 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003847{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003848
3849
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003850 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003851 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003852 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3853 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3854 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003855 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003856
3857 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003858}
3859
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003860VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3861 VkDevice device,
3862 VkQueryPool queryPool)
3863{
3864 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3865
3866 PostDestroyQueryPool(device, queryPool, result);
3867
3868 return result;
3869}
3870
3871bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003872 VkDevice device,
3873 VkQueryPool queryPool,
3874 uint32_t startQuery,
3875 uint32_t queryCount,
3876 size_t* pDataSize,
3877 void* pData,
3878 VkQueryResultFlags flags,
3879 VkResult result)
3880{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003881
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003882
3883
3884
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003885 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003886 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003887 }
3888
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003889 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003890 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003891 }
3892
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003893
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003894 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003895 {
3896 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003897 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3898 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003899 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003900
3901 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003902}
3903
3904VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3905 VkDevice device,
3906 VkQueryPool queryPool,
3907 uint32_t startQuery,
3908 uint32_t queryCount,
3909 size_t* pDataSize,
3910 void* pData,
3911 VkQueryResultFlags flags)
3912{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003913 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3914
3915 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3916
3917 return result;
3918}
3919
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003920bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003921 VkDevice device,
3922 const VkBufferCreateInfo* pCreateInfo)
3923{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003924 if(pCreateInfo != nullptr)
3925 {
3926 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003927 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003928 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003929 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003930 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003931 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003932 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3933 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003934 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003936 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003937 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003938 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003939 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003940 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003941 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003942 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003943
3944 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003945}
3946
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003947bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003948 VkDevice device,
3949 VkBuffer* pBuffer,
3950 VkResult result)
3951{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003952
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003953 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003954 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003955 }
3956
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003957 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003958 {
3959 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003960 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3961 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003962 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003963
3964 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003965}
3966
3967VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3968 VkDevice device,
3969 const VkBufferCreateInfo* pCreateInfo,
3970 VkBuffer* pBuffer)
3971{
3972 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003973
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003974 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3975
3976 PostCreateBuffer(device, pBuffer, result);
3977
3978 return result;
3979}
3980
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003981bool PostDestroyBuffer(
3982 VkDevice device,
3983 VkBuffer buffer,
3984 VkResult result)
3985{
3986
3987
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003988 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003989 {
3990 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3991 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3992 return false;
3993 }
3994
3995 return true;
3996}
3997
3998VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3999 VkDevice device,
4000 VkBuffer buffer)
4001{
4002 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
4003
4004 PostDestroyBuffer(device, buffer, result);
4005
4006 return result;
4007}
4008
4009bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004010 VkDevice device,
4011 const VkBufferViewCreateInfo* pCreateInfo)
4012{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004013 if(pCreateInfo != nullptr)
4014 {
4015 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004016 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004017 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004018 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004019 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004020 }
4021 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
4022 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
4023 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004024 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004025 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004026 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004027 }
4028 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4029 pCreateInfo->format > VK_FORMAT_END_RANGE)
4030 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004031 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004032 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004033 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004034 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004035 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004036
4037 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004038}
4039
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004040bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004041 VkDevice device,
4042 VkBufferView* pView,
4043 VkResult result)
4044{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004045
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004046 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004047 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004048 }
4049
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004050 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004051 {
4052 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004053 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4054 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004055 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004056
4057 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004058}
4059
4060VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
4061 VkDevice device,
4062 const VkBufferViewCreateInfo* pCreateInfo,
4063 VkBufferView* pView)
4064{
4065 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004066
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004067 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
4068
4069 PostCreateBufferView(device, pView, result);
4070
4071 return result;
4072}
4073
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004074bool PostDestroyBufferView(
4075 VkDevice device,
4076 VkBufferView bufferView,
4077 VkResult result)
4078{
4079
4080
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004081 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004082 {
4083 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
4084 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4085 return false;
4086 }
4087
4088 return true;
4089}
4090
4091VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
4092 VkDevice device,
4093 VkBufferView bufferView)
4094{
4095 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
4096
4097 PostDestroyBufferView(device, bufferView, result);
4098
4099 return result;
4100}
4101
4102bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004103 VkDevice device,
4104 const VkImageCreateInfo* pCreateInfo)
4105{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004106 if(pCreateInfo != nullptr)
4107 {
4108 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004109 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004110 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004111 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004112 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004113 }
4114 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
4115 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
4116 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004117 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004118 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004119 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004120 }
4121 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4122 pCreateInfo->format > VK_FORMAT_END_RANGE)
4123 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004124 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004125 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004126 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004127 }
4128 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
4129 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
4130 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004131 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004132 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004133 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004134 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004135 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
4136 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004137 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004138 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4139 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004140 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004141 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004142 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004143 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004144 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004145 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004146
4147 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004148}
4149
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004150bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004151 VkDevice device,
4152 VkImage* pImage,
4153 VkResult result)
4154{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004155
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004156 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004157 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004158 }
4159
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004160 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004161 {
4162 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004163 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4164 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004165 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004166
4167 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004168}
4169
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004170VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
4171 VkDevice device,
4172 const VkImageCreateInfo* pCreateInfo,
4173 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004174{
4175 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004176
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004177 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
4178
4179 PostCreateImage(device, pImage, result);
4180
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004181 return result;
4182}
4183
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004184bool PostDestroyImage(
4185 VkDevice device,
4186 VkImage image,
4187 VkResult result)
4188{
4189
4190
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004191 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004192 {
4193 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
4194 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4195 return false;
4196 }
4197
4198 return true;
4199}
4200
4201VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
4202 VkDevice device,
4203 VkImage image)
4204{
4205 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
4206
4207 PostDestroyImage(device, image, result);
4208
4209 return result;
4210}
4211
4212bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004213 VkDevice device,
4214 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004215{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004216 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004217 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004218 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4219 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4220 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004222 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004223 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004224 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004225 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004226
4227 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004228}
4229
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004230bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004231 VkDevice device,
4232 VkImage image,
4233 VkSubresourceLayout* pLayout,
4234 VkResult result)
4235{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004236
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004237
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004238 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004239 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004240 }
4241
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004242 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004243 {
4244 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004245 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4246 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004247 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004248
4249 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004250}
4251
4252VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4253 VkDevice device,
4254 VkImage image,
4255 const VkImageSubresource* pSubresource,
4256 VkSubresourceLayout* pLayout)
4257{
4258 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004259
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004260 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4261
4262 PostGetImageSubresourceLayout(device, image, pLayout, result);
4263
4264 return result;
4265}
4266
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004267bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004268 VkDevice device,
4269 const VkImageViewCreateInfo* pCreateInfo)
4270{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004271 if(pCreateInfo != nullptr)
4272 {
4273 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004274 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004275 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004276 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004277 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004278 }
4279 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4280 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4281 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004283 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004284 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004285 }
4286 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4287 pCreateInfo->format > VK_FORMAT_END_RANGE)
4288 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004289 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004290 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004291 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004292 }
4293 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4294 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4295 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004296 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004297 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004298 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004299 }
4300 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4301 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4302 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004303 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004304 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004305 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004306 }
4307 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4308 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4309 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004310 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004311 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004312 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004313 }
4314 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4315 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4316 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004317 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004318 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004319 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004320 }
4321 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4322 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4323 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004325 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004326 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004327 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004328 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004329
4330 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004331}
4332
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004333bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004334 VkDevice device,
4335 VkImageView* pView,
4336 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004337{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004338
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004339 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004340 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004341 }
4342
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004343 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004344 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004345 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004346 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4347 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004348 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004349
4350 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004351}
4352
4353VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4354 VkDevice device,
4355 const VkImageViewCreateInfo* pCreateInfo,
4356 VkImageView* pView)
4357{
4358 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004359
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004360 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4361
4362 PostCreateImageView(device, pView, result);
4363
4364 return result;
4365}
4366
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004367bool PostDestroyImageView(
4368 VkDevice device,
4369 VkImageView imageView,
4370 VkResult result)
4371{
4372
4373
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004374 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004375 {
4376 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4377 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4378 return false;
4379 }
4380
4381 return true;
4382}
4383
4384VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4385 VkDevice device,
4386 VkImageView imageView)
4387{
4388 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4389
4390 PostDestroyImageView(device, imageView, result);
4391
4392 return result;
4393}
4394
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004395bool PreCreateAttachmentView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004396 VkDevice device,
Chia-I Wuc278df82015-07-07 11:50:03 +08004397 const VkAttachmentViewCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004398{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004399 if(pCreateInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004400 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004401 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_ATTACHMENT_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004402 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004403 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4404 "vkCreateAttachmentView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4405 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004406 }
4407 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4408 pCreateInfo->format > VK_FORMAT_END_RANGE)
4409 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004410 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4411 "vkCreateAttachmentView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
4412 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004413 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004414 }
4415
4416 return true;
4417}
4418
4419bool PostCreateAttachmentView(
4420 VkDevice device,
4421 VkAttachmentView* pView,
4422 VkResult result)
4423{
4424
4425 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004426 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004427 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004428
4429 if(result < VK_SUCCESS)
4430 {
4431 std::string reason = "vkCreateAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4432 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4433 return false;
4434 }
4435
4436 return true;
4437}
4438
4439VK_LAYER_EXPORT VkResult VKAPI vkCreateAttachmentView(
4440 VkDevice device,
4441 const VkAttachmentViewCreateInfo* pCreateInfo,
4442 VkAttachmentView* pView)
4443{
4444 PreCreateAttachmentView(device, pCreateInfo);
4445
4446 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateAttachmentView(device, pCreateInfo, pView);
4447
4448 PostCreateAttachmentView(device, pView, result);
4449
4450 return result;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004451}
4452
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004453bool PostDestroyAttachmentView(
4454 VkDevice device,
4455 VkAttachmentView attachmentView,
4456 VkResult result)
4457{
4458
4459
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004460 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004461 {
4462 std::string reason = "vkDestroyAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4463 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4464 return false;
4465 }
4466
4467 return true;
4468}
4469
4470VK_LAYER_EXPORT VkResult VKAPI vkDestroyAttachmentView(
4471 VkDevice device,
4472 VkAttachmentView attachmentView)
4473{
4474 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyAttachmentView(device, attachmentView);
4475
4476 PostDestroyAttachmentView(device, attachmentView, result);
4477
4478 return result;
4479}
4480
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004481bool PostDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004482 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004483 VkShaderModule shaderModule,
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004484 VkResult result)
4485{
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004486
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004487
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004488 if(result < VK_SUCCESS)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004489 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004490 std::string reason = "vkDestroyShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4491 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4492 return false;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004493 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004494
4495 return true;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004496}
4497
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004498VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004499 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004500 VkShaderModule shaderModule)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004501{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004502 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004503
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004504 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004505
4506 return result;
4507}
4508
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004509bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004510 VkDevice device,
4511 const VkShaderCreateInfo* pCreateInfo)
4512{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004513 if(pCreateInfo != nullptr)
4514 {
4515 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004516 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004517 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004518 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004519 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004520 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004521 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004522 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004523 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004524 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004525
4526 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004527}
4528
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004529bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004530 VkDevice device,
4531 VkShader* pShader,
4532 VkResult result)
4533{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004534
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004535 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004536 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004537 }
4538
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004539 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004540 {
4541 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004542 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4543 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004544 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004545
4546 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004547}
4548
4549VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4550 VkDevice device,
4551 const VkShaderCreateInfo* pCreateInfo,
4552 VkShader* pShader)
4553{
4554 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004555
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004556 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4557
4558 PostCreateShader(device, pShader, result);
4559
4560 return result;
4561}
4562
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004563bool PostDestroyShader(
4564 VkDevice device,
4565 VkShader shader,
4566 VkResult result)
4567{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004568
4569
4570 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004571 {
4572 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4574 return false;
4575 }
4576
4577 return true;
4578}
4579
4580VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4581 VkDevice device,
4582 VkShader shader)
4583{
4584 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4585
4586 PostDestroyShader(device, shader, result);
4587
4588 return result;
4589}
4590
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004591bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004592 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004593 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004594{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004595 if(pCreateInfo != nullptr)
4596 {
4597 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004598 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004599 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004600 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004601 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004602 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004603 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004604 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004605 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004606 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004607
4608 return true;
4609}
4610
4611bool PostCreatePipelineCache(
4612 VkDevice device,
4613 VkPipelineCache* pPipelineCache,
4614 VkResult result)
4615{
4616
4617 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004618 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004619 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004620
4621 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004622 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004623 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004624 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4625 return false;
4626 }
4627
4628 return true;
4629}
4630
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004631VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06004632 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004633 const VkPipelineCacheCreateInfo* pCreateInfo,
4634 VkPipelineCache* pPipelineCache)
4635{
4636 PreCreatePipelineCache(device, pCreateInfo);
4637
4638 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4639
4640 PostCreatePipelineCache(device, pPipelineCache, result);
4641
4642 return result;
4643}
4644
4645bool PostDestroyPipelineCache(
4646 VkDevice device,
4647 VkPipelineCache pipelineCache,
Tony Barboure307f582015-07-10 15:29:03 -06004648 VkResult result)
4649{
4650
Tony Barboure307f582015-07-10 15:29:03 -06004651
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004652 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004653 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004654 std::string reason = "vkDestroyPipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004655 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4656 return false;
4657 }
4658
4659 return true;
4660}
4661
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004662VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineCache(
4663 VkDevice device,
4664 VkPipelineCache pipelineCache)
4665{
4666 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache);
4667
4668 PostDestroyPipelineCache(device, pipelineCache, result);
4669
4670 return result;
4671}
4672
4673bool PostGetPipelineCacheSize(
4674 VkDevice device,
4675 VkPipelineCache pipelineCache)
4676{
4677
4678
4679 return true;
4680}
4681
4682VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4683 VkDevice device,
4684 VkPipelineCache pipelineCache)
4685{
4686 get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
4687
4688 PostGetPipelineCacheSize(device, pipelineCache);
4689}
4690
4691bool PostGetPipelineCacheData(
4692 VkDevice device,
4693 VkPipelineCache pipelineCache,
4694 void* pData,
4695 VkResult result)
4696{
4697
4698
4699 if(pData != nullptr)
4700 {
4701 }
4702
4703 if(result < VK_SUCCESS)
4704 {
4705 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4706 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4707 return false;
4708 }
4709
4710 return true;
4711}
4712
4713VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4714 VkDevice device,
4715 VkPipelineCache pipelineCache,
4716 void* pData)
4717{
4718 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4719
4720 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4721
4722 return result;
4723}
4724
4725bool PreMergePipelineCaches(
4726 VkDevice device,
4727 const VkPipelineCache* pSrcCaches)
4728{
4729 if(pSrcCaches != nullptr)
4730 {
4731 }
4732
4733 return true;
4734}
4735
4736bool PostMergePipelineCaches(
4737 VkDevice device,
4738 VkPipelineCache destCache,
4739 uint32_t srcCacheCount,
4740 VkResult result)
4741{
4742
4743
4744
4745 if(result < VK_SUCCESS)
4746 {
4747 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4748 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4749 return false;
4750 }
4751
4752 return true;
4753}
4754
4755VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4756 VkDevice device,
4757 VkPipelineCache destCache,
4758 uint32_t srcCacheCount,
4759 const VkPipelineCache* pSrcCaches)
4760{
4761 PreMergePipelineCaches(device, pSrcCaches);
4762
4763 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4764
4765 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4766
4767 return result;
4768}
4769
4770bool PreCreateGraphicsPipelines(
4771 VkDevice device,
4772 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4773{
4774 if(pCreateInfos != nullptr)
4775 {
4776 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4777 {
4778 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4779 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4780 return false;
4781 }
4782 if(pCreateInfos->pStages != nullptr)
4783 {
4784 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4785 {
4786 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4787 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4788 return false;
4789 }
4790 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4791 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4792 {
4793 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4794 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4795 return false;
4796 }
4797 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4798 {
4799 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4800 {
4801 }
4802 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4803 {
4804 }
4805 }
4806 }
4807 if(pCreateInfos->pVertexInputState != nullptr)
4808 {
4809 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4810 {
4811 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4812 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4813 return false;
4814 }
4815 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4816 {
4817 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4818 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4819 {
4820 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4821 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4822 return false;
4823 }
4824 }
4825 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4826 {
4827 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4828 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4829 {
4830 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4831 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4832 return false;
4833 }
4834 }
4835 }
4836 if(pCreateInfos->pInputAssemblyState != nullptr)
4837 {
4838 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4839 {
4840 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4841 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4842 return false;
4843 }
4844 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4845 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4846 {
4847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4848 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4849 return false;
4850 }
4851 }
4852 if(pCreateInfos->pTessellationState != nullptr)
4853 {
4854 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4855 {
4856 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4857 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4858 return false;
4859 }
4860 }
4861 if(pCreateInfos->pViewportState != nullptr)
4862 {
4863 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4864 {
4865 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4866 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4867 return false;
4868 }
4869 }
4870 if(pCreateInfos->pRasterState != nullptr)
4871 {
4872 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4873 {
4874 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4875 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4876 return false;
4877 }
4878 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4879 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4880 {
4881 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4882 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4883 return false;
4884 }
4885 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4886 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4887 {
4888 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4889 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4890 return false;
4891 }
4892 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4893 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4894 {
4895 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4896 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4897 return false;
4898 }
4899 }
4900 if(pCreateInfos->pMultisampleState != nullptr)
4901 {
4902 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4903 {
4904 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4905 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4906 return false;
4907 }
4908 }
4909 if(pCreateInfos->pDepthStencilState != nullptr)
4910 {
4911 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4912 {
4913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4914 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4915 return false;
4916 }
4917 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4918 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4919 {
4920 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4921 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4922 return false;
4923 }
4924 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4925 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4926 {
4927 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4928 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4929 return false;
4930 }
4931 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4932 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4933 {
4934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4935 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4936 return false;
4937 }
4938 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4939 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4940 {
4941 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4942 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4943 return false;
4944 }
4945 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4946 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4947 {
4948 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4949 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4950 return false;
4951 }
4952 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4953 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4954 {
4955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4956 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4957 return false;
4958 }
4959 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4960 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4961 {
4962 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4963 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4964 return false;
4965 }
4966 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4967 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4968 {
4969 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4970 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4971 return false;
4972 }
4973 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4974 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4975 {
4976 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4977 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4978 return false;
4979 }
4980 }
4981 if(pCreateInfos->pColorBlendState != nullptr)
4982 {
4983 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4984 {
4985 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4986 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4987 return false;
4988 }
4989 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4990 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4991 {
4992 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4993 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4994 return false;
4995 }
4996 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4997 {
4998 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4999 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
5000 {
5001 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5002 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
5003 return false;
5004 }
5005 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
5006 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
5007 {
5008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5009 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
5010 return false;
5011 }
5012 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
5013 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
5014 {
5015 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5016 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
5017 return false;
5018 }
5019 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5020 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
5021 {
5022 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5023 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
5024 return false;
5025 }
5026 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5027 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
5028 {
5029 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5030 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
5031 return false;
5032 }
5033 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
5034 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
5035 {
5036 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5037 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
5038 return false;
5039 }
5040 }
5041 }
5042 }
5043
5044 return true;
5045}
5046
5047bool PostCreateGraphicsPipelines(
5048 VkDevice device,
5049 VkPipelineCache pipelineCache,
5050 uint32_t count,
5051 VkPipeline* pPipelines,
5052 VkResult result)
5053{
5054
5055
5056
5057 if(pPipelines != nullptr)
5058 {
5059 }
5060
5061 if(result < VK_SUCCESS)
5062 {
5063 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
5064 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5065 return false;
5066 }
5067
5068 return true;
5069}
5070
5071VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
5072 VkDevice device,
5073 VkPipelineCache pipelineCache,
5074 uint32_t count,
5075 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5076 VkPipeline* pPipelines)
5077{
5078 PreCreateGraphicsPipelines(device, pCreateInfos);
5079
5080 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5081
5082 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
5083
5084 return result;
5085}
5086
5087bool PreCreateComputePipelines(
5088 VkDevice device,
5089 const VkComputePipelineCreateInfo* pCreateInfos)
5090{
5091 if(pCreateInfos != nullptr)
5092 {
5093 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
5094 {
5095 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5096 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
5097 return false;
5098 }
5099 if(pCreateInfos->cs.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
5100 {
5101 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5102 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
5103 return false;
5104 }
5105 if(pCreateInfos->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5106 pCreateInfos->cs.stage > VK_SHADER_STAGE_END_RANGE)
5107 {
5108 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5109 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
5110 return false;
5111 }
5112 if(pCreateInfos->cs.pSpecializationInfo != nullptr)
5113 {
5114 if(pCreateInfos->cs.pSpecializationInfo->pMap != nullptr)
5115 {
5116 }
5117 if(pCreateInfos->cs.pSpecializationInfo->pData != nullptr)
5118 {
5119 }
5120 }
5121 }
5122
5123 return true;
5124}
5125
5126bool PostCreateComputePipelines(
5127 VkDevice device,
5128 VkPipelineCache pipelineCache,
5129 uint32_t count,
5130 VkPipeline* pPipelines,
5131 VkResult result)
5132{
5133
5134
5135
5136 if(pPipelines != nullptr)
5137 {
5138 }
5139
5140 if(result < VK_SUCCESS)
5141 {
5142 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
5143 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5144 return false;
5145 }
5146
5147 return true;
5148}
5149
5150VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
5151 VkDevice device,
5152 VkPipelineCache pipelineCache,
5153 uint32_t count,
5154 const VkComputePipelineCreateInfo* pCreateInfos,
5155 VkPipeline* pPipelines)
5156{
5157 PreCreateComputePipelines(device, pCreateInfos);
5158
5159 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5160
5161 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
5162
5163 return result;
5164}
5165
Tony Barboure307f582015-07-10 15:29:03 -06005166bool PostDestroyPipeline(
5167 VkDevice device,
5168 VkPipeline pipeline,
5169 VkResult result)
5170{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005171
5172
5173 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06005174 {
5175 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
5176 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5177 return false;
5178 }
5179
5180 return true;
5181}
5182
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005183VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5184 VkDevice device,
5185 VkPipeline pipeline)
5186{
5187 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5188
5189 PostDestroyPipeline(device, pipeline, result);
5190
5191 return result;
5192}
5193
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005194bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005195 VkDevice device,
5196 const VkPipelineLayoutCreateInfo* pCreateInfo)
5197{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005198 if(pCreateInfo != nullptr)
5199 {
5200 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005201 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005202 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005203 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5204 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005205 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005206 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005207 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005208 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005209 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005210 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005211 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005212 }
5213
5214 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005215}
5216
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005217bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005218 VkDevice device,
5219 VkPipelineLayout* pPipelineLayout,
5220 VkResult result)
5221{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005222
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005223 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005224 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005225 }
5226
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005227 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005228 {
5229 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005230 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5231 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005232 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005233
5234 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005235}
5236
5237VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5238 VkDevice device,
5239 const VkPipelineLayoutCreateInfo* pCreateInfo,
5240 VkPipelineLayout* pPipelineLayout)
5241{
5242 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005243
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005244 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5245
5246 PostCreatePipelineLayout(device, pPipelineLayout, result);
5247
5248 return result;
5249}
5250
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005251bool PostDestroyPipelineLayout(
5252 VkDevice device,
5253 VkPipelineLayout pipelineLayout,
5254 VkResult result)
5255{
5256
5257
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005258 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005259 {
5260 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5262 return false;
5263 }
5264
5265 return true;
5266}
5267
5268VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5269 VkDevice device,
5270 VkPipelineLayout pipelineLayout)
5271{
5272 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5273
5274 PostDestroyPipelineLayout(device, pipelineLayout, result);
5275
5276 return result;
5277}
5278
5279bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005280 VkDevice device,
5281 const VkSamplerCreateInfo* pCreateInfo)
5282{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005283 if(pCreateInfo != nullptr)
5284 {
5285 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005286 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005287 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005288 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005289 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005290 }
5291 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5292 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5293 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005295 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005296 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005297 }
5298 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5299 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5300 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005301 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005302 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005303 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005304 }
5305 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5306 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5307 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005308 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005309 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005310 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005311 }
5312 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5313 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5314 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005315 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005316 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005317 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005318 }
5319 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5320 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5321 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005322 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005323 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005324 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005325 }
5326 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5327 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5328 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005329 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005330 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005331 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005332 }
5333 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5334 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5335 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005336 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005337 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005338 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005339 }
5340 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5341 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5342 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005343 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005344 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005345 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005346 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005347 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005348
5349 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005350}
5351
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005352bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005353 VkDevice device,
5354 VkSampler* pSampler,
5355 VkResult result)
5356{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005357
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005358 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005359 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005360 }
5361
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005362 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005363 {
5364 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005365 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5366 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005367 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005368
5369 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005370}
5371
5372VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5373 VkDevice device,
5374 const VkSamplerCreateInfo* pCreateInfo,
5375 VkSampler* pSampler)
5376{
5377 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005378
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005379 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5380
5381 PostCreateSampler(device, pSampler, result);
5382
5383 return result;
5384}
5385
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005386bool PostDestroySampler(
5387 VkDevice device,
5388 VkSampler sampler,
5389 VkResult result)
5390{
5391
5392
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005393 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005394 {
5395 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5396 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5397 return false;
5398 }
5399
5400 return true;
5401}
5402
5403VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5404 VkDevice device,
5405 VkSampler sampler)
5406{
5407 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5408
5409 PostDestroySampler(device, sampler, result);
5410
5411 return result;
5412}
5413
5414bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005415 VkDevice device,
5416 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5417{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005418 if(pCreateInfo != nullptr)
5419 {
5420 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005421 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005422 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005423 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005424 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005425 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005426 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005427 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005428 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5429 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5430 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005431 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005432 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005433 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005434 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005435 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005436 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005437 }
5438 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005439 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005440
5441 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005442}
5443
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005444bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005445 VkDevice device,
5446 VkDescriptorSetLayout* pSetLayout,
5447 VkResult result)
5448{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005449
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005450 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005451 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005452 }
5453
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005454 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005455 {
5456 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005457 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5458 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005459 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005460
5461 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005462}
5463
5464VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5465 VkDevice device,
5466 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5467 VkDescriptorSetLayout* pSetLayout)
5468{
5469 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005470
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005471 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5472
5473 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5474
5475 return result;
5476}
5477
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005478bool PostDestroyDescriptorSetLayout(
5479 VkDevice device,
5480 VkDescriptorSetLayout descriptorSetLayout,
5481 VkResult result)
5482{
5483
5484
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005485 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005486 {
5487 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5488 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5489 return false;
5490 }
5491
5492 return true;
5493}
5494
5495VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5496 VkDevice device,
5497 VkDescriptorSetLayout descriptorSetLayout)
5498{
5499 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5500
5501 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5502
5503 return result;
5504}
5505
5506bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005507 VkDevice device,
5508 const VkDescriptorPoolCreateInfo* pCreateInfo)
5509{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005510 if(pCreateInfo != nullptr)
5511 {
5512 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005513 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005514 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005515 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005516 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005517 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005518 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005520 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5521 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5522 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005523 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005524 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005525 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005526 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005527 }
5528 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005529
5530 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005531}
5532
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005533bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005534 VkDevice device,
5535 VkDescriptorPoolUsage poolUsage,
5536 uint32_t maxSets,
5537 VkDescriptorPool* pDescriptorPool,
5538 VkResult result)
5539{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005540
5541 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5542 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5543 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005544 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005545 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005546 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005547 }
5548
5549
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005550 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005551 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005552 }
5553
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005554 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005555 {
5556 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005557 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5558 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005559 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005560
5561 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005562}
5563
5564VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5565 VkDevice device,
5566 VkDescriptorPoolUsage poolUsage,
5567 uint32_t maxSets,
5568 const VkDescriptorPoolCreateInfo* pCreateInfo,
5569 VkDescriptorPool* pDescriptorPool)
5570{
5571 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005572
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005573 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5574
5575 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5576
5577 return result;
5578}
5579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005580bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005581 VkDevice device,
5582 VkDescriptorPool descriptorPool,
5583 VkResult result)
5584{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005585
5586
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005587 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005588 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005589 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5590 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5591 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005592 }
5593
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005594 return true;
5595}
5596
5597VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5598 VkDevice device,
5599 VkDescriptorPool descriptorPool)
5600{
5601 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5602
5603 PostDestroyDescriptorPool(device, descriptorPool, result);
5604
5605 return result;
5606}
5607
5608bool PostResetDescriptorPool(
5609 VkDevice device,
5610 VkDescriptorPool descriptorPool,
5611 VkResult result)
5612{
5613
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005614
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005615 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005616 {
5617 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005618 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5619 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005620 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005621
5622 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005623}
5624
5625VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5626 VkDevice device,
5627 VkDescriptorPool descriptorPool)
5628{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005629 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5630
5631 PostResetDescriptorPool(device, descriptorPool, result);
5632
5633 return result;
5634}
5635
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005636bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005637 VkDevice device,
5638 const VkDescriptorSetLayout* pSetLayouts)
5639{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005640 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005641 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005642 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005643
5644 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005645}
5646
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005647bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005648 VkDevice device,
5649 VkDescriptorPool descriptorPool,
5650 VkDescriptorSetUsage setUsage,
5651 uint32_t count,
5652 VkDescriptorSet* pDescriptorSets,
5653 uint32_t* pCount,
5654 VkResult result)
5655{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005656
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005657
5658 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5659 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5660 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005661 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005662 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005663 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005664 }
5665
5666
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005667 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005668 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005669 }
5670
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005671 if(pCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005672 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005673 }
5674
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005675 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005676 {
5677 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005678 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5679 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005680 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005681
5682 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005683}
5684
5685VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5686 VkDevice device,
5687 VkDescriptorPool descriptorPool,
5688 VkDescriptorSetUsage setUsage,
5689 uint32_t count,
5690 const VkDescriptorSetLayout* pSetLayouts,
5691 VkDescriptorSet* pDescriptorSets,
5692 uint32_t* pCount)
5693{
5694 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005695
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005696 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
5697
5698 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, pCount, result);
5699
5700 return result;
5701}
5702
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005703bool PreFreeDescriptorSets(
5704 VkDevice device,
5705 const VkDescriptorSet* pDescriptorSets)
5706{
5707 if(pDescriptorSets != nullptr)
5708 {
5709 }
5710
5711 return true;
5712}
5713
5714bool PostFreeDescriptorSets(
5715 VkDevice device,
5716 VkDescriptorPool descriptorPool,
5717 uint32_t count,
5718 VkResult result)
5719{
5720
5721
5722
5723 if(result < VK_SUCCESS)
5724 {
5725 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5726 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5727 return false;
5728 }
5729
5730 return true;
5731}
5732
5733VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
5734 VkDevice device,
5735 VkDescriptorPool descriptorPool,
5736 uint32_t count,
5737 const VkDescriptorSet* pDescriptorSets)
5738{
5739 PreFreeDescriptorSets(device, pDescriptorSets);
5740
5741 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
5742
5743 PostFreeDescriptorSets(device, descriptorPool, count, result);
5744
5745 return result;
5746}
5747
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005748bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005749 VkDevice device,
5750 const VkWriteDescriptorSet* pDescriptorWrites,
5751 const VkCopyDescriptorSet* pDescriptorCopies)
5752{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005753 if(pDescriptorWrites != nullptr)
5754 {
5755 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005756 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005757 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005758 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005759 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005760 }
5761 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5762 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5763 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005764 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005765 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005766 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005767 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005768 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005769 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005770 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5771 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5772 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005773 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005774 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005775 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005776 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005777 }
5778 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005779
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005780 if(pDescriptorCopies != nullptr)
5781 {
5782 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005783 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005784 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005785 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005786 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005787 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005788 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005789
5790 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005791}
5792
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005793bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005794 VkDevice device,
5795 uint32_t writeCount,
5796 uint32_t copyCount,
5797 VkResult result)
5798{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005799
5800
5801
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005802 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005803 {
5804 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005805 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5806 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005808
5809 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005810}
5811
5812VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
5813 VkDevice device,
5814 uint32_t writeCount,
5815 const VkWriteDescriptorSet* pDescriptorWrites,
5816 uint32_t copyCount,
5817 const VkCopyDescriptorSet* pDescriptorCopies)
5818{
5819 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005820
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005821 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
5822
5823 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
5824
5825 return result;
5826}
5827
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005828bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005829 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005830 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005831{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005832 if(pCreateInfo != nullptr)
5833 {
5834 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005835 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005836 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005837 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005838 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005839 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005840 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005841 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005842 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005843 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005844 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005845 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005846 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005847
5848 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005849}
5850
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005851bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005852 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005853 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005854 VkResult result)
5855{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005856
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005857 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005858 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005859 }
5860
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005861 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005862 {
5863 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005864 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5865 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005866 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005867
5868 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005869}
5870
5871VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5872 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005873 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5874 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005875{
5876 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005877
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005878 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5879
5880 PostCreateDynamicViewportState(device, pState, result);
5881
5882 return result;
5883}
5884
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005885bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005886 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005887 VkDynamicViewportState dynamicViewportState,
5888 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005889{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005890
5891
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005892 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005893 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005894 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
5895 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5896 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005897 }
5898
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005899 return true;
5900}
5901
5902VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
5903 VkDevice device,
5904 VkDynamicViewportState dynamicViewportState)
5905{
5906 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
5907
5908 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
5909
5910 return result;
5911}
5912
5913bool PreCreateDynamicRasterState(
5914 VkDevice device,
5915 const VkDynamicRasterStateCreateInfo* pCreateInfo)
5916{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005917 if(pCreateInfo != nullptr)
5918 {
5919 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_RASTER_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005920 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005921 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005922 "vkCreateDynamicRasterState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005923 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005924 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005925 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005926
5927 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005928}
5929
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005930bool PostCreateDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005931 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005932 VkDynamicRasterState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005933 VkResult result)
5934{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005935
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005936 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005937 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005938 }
5939
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005940 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005941 {
5942 std::string reason = "vkCreateDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005943 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5944 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005945 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005946
5947 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005948}
5949
5950VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(
5951 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005952 const VkDynamicRasterStateCreateInfo* pCreateInfo,
5953 VkDynamicRasterState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005954{
5955 PreCreateDynamicRasterState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005956
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005957 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterState(device, pCreateInfo, pState);
5958
5959 PostCreateDynamicRasterState(device, pState, result);
5960
5961 return result;
5962}
5963
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005964bool PostDestroyDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005965 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005966 VkDynamicRasterState dynamicRasterState,
5967 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005968{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005969
5970
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005971 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005972 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005973 std::string reason = "vkDestroyDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
5974 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5975 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005976 }
5977
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005978 return true;
5979}
5980
5981VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicRasterState(
5982 VkDevice device,
5983 VkDynamicRasterState dynamicRasterState)
5984{
5985 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicRasterState(device, dynamicRasterState);
5986
5987 PostDestroyDynamicRasterState(device, dynamicRasterState, result);
5988
5989 return result;
5990}
5991
5992bool PreCreateDynamicColorBlendState(
5993 VkDevice device,
5994 const VkDynamicColorBlendStateCreateInfo* pCreateInfo)
5995{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005996 if(pCreateInfo != nullptr)
5997 {
5998 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_COLOR_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005999 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006000 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006001 "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006002 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006003 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006004 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006005
6006 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006007}
6008
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006009bool PostCreateDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006010 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006011 VkDynamicColorBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006012 VkResult result)
6013{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006014
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006015 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006016 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006017 }
6018
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006019 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006020 {
6021 std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006022 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6023 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006024 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006025
6026 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006027}
6028
6029VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
6030 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006031 const VkDynamicColorBlendStateCreateInfo* pCreateInfo,
6032 VkDynamicColorBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006033{
6034 PreCreateDynamicColorBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006035
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006036 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState);
6037
6038 PostCreateDynamicColorBlendState(device, pState, result);
6039
6040 return result;
6041}
6042
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006043bool PostDestroyDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006044 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006045 VkDynamicColorBlendState dynamicColorBlendState,
6046 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006047{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006048
6049
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006050 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006051 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006052 std::string reason = "vkDestroyDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
6053 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6054 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006055 }
6056
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006057 return true;
6058}
6059
6060VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicColorBlendState(
6061 VkDevice device,
6062 VkDynamicColorBlendState dynamicColorBlendState)
6063{
6064 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicColorBlendState(device, dynamicColorBlendState);
6065
6066 PostDestroyDynamicColorBlendState(device, dynamicColorBlendState, result);
6067
6068 return result;
6069}
6070
6071bool PreCreateDynamicDepthStencilState(
6072 VkDevice device,
6073 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo)
6074{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006075 if(pCreateInfo != nullptr)
6076 {
6077 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_STENCIL_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006078 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006079 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006080 "vkCreateDynamicDepthStencilState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006081 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006082 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006083 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006084
6085 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006086}
6087
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006088bool PostCreateDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006089 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006090 VkDynamicDepthStencilState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006091 VkResult result)
6092{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006093
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006094 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006095 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006096 }
6097
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006098 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006099 {
6100 std::string reason = "vkCreateDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006101 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6102 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006103 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006104
6105 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006106}
6107
6108VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(
6109 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006110 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo,
6111 VkDynamicDepthStencilState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006112{
6113 PreCreateDynamicDepthStencilState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006114
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006115 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
6116
6117 PostCreateDynamicDepthStencilState(device, pState, result);
6118
6119 return result;
6120}
6121
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006122bool PostDestroyDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006123 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006124 VkDynamicDepthStencilState dynamicDepthStencilState,
6125 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006126{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006127
6128
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006129 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006130 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006131 std::string reason = "vkDestroyDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
6132 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6133 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006134 }
6135
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006136 return true;
6137}
6138
6139VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthStencilState(
6140 VkDevice device,
6141 VkDynamicDepthStencilState dynamicDepthStencilState)
6142{
6143 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthStencilState(device, dynamicDepthStencilState);
6144
6145 PostDestroyDynamicDepthStencilState(device, dynamicDepthStencilState, result);
6146
6147 return result;
6148}
6149
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006150bool PreCreateFramebuffer(
6151 VkDevice device,
6152 const VkFramebufferCreateInfo* pCreateInfo)
6153{
6154 if(pCreateInfo != nullptr)
6155 {
6156 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
6157 {
6158 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6159 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6160 return false;
6161 }
6162 if(pCreateInfo->pAttachments != nullptr)
6163 {
6164 if(pCreateInfo->pAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6165 pCreateInfo->pAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6166 {
6167 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6168 "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pAttachments->layout, is an unrecognized enumerator");
6169 return false;
6170 }
6171 }
6172 }
6173
6174 return true;
6175}
6176
6177bool PostCreateFramebuffer(
6178 VkDevice device,
6179 VkFramebuffer* pFramebuffer,
6180 VkResult result)
6181{
6182
6183 if(pFramebuffer != nullptr)
6184 {
6185 }
6186
6187 if(result < VK_SUCCESS)
6188 {
6189 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6190 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6191 return false;
6192 }
6193
6194 return true;
6195}
6196
6197VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
6198 VkDevice device,
6199 const VkFramebufferCreateInfo* pCreateInfo,
6200 VkFramebuffer* pFramebuffer)
6201{
6202 PreCreateFramebuffer(device, pCreateInfo);
6203
6204 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
6205
6206 PostCreateFramebuffer(device, pFramebuffer, result);
6207
6208 return result;
6209}
6210
6211bool PostDestroyFramebuffer(
6212 VkDevice device,
6213 VkFramebuffer framebuffer,
6214 VkResult result)
6215{
6216
6217
6218 if(result < VK_SUCCESS)
6219 {
6220 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6222 return false;
6223 }
6224
6225 return true;
6226}
6227
6228VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
6229 VkDevice device,
6230 VkFramebuffer framebuffer)
6231{
6232 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
6233
6234 PostDestroyFramebuffer(device, framebuffer, result);
6235
6236 return result;
6237}
6238
6239bool PreCreateRenderPass(
6240 VkDevice device,
6241 const VkRenderPassCreateInfo* pCreateInfo)
6242{
6243 if(pCreateInfo != nullptr)
6244 {
6245 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
6246 {
6247 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6248 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6249 return false;
6250 }
6251 if(pCreateInfo->pAttachments != nullptr)
6252 {
6253 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
6254 {
6255 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6256 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
6257 return false;
6258 }
6259 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
6260 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
6261 {
6262 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6263 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
6264 return false;
6265 }
6266 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6267 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6268 {
6269 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6270 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
6271 return false;
6272 }
6273 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6274 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6275 {
6276 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6277 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
6278 return false;
6279 }
6280 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6281 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6282 {
6283 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6284 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
6285 return false;
6286 }
6287 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6288 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6289 {
6290 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6291 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
6292 return false;
6293 }
6294 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6295 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
6296 {
6297 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6298 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
6299 return false;
6300 }
6301 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6302 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
6303 {
6304 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6305 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
6306 return false;
6307 }
6308 }
6309 if(pCreateInfo->pSubpasses != nullptr)
6310 {
6311 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
6312 {
6313 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6314 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
6315 return false;
6316 }
6317 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6318 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6319 {
6320 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6321 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
6322 return false;
6323 }
6324 if(pCreateInfo->pSubpasses->inputAttachments != nullptr)
6325 {
6326 if(pCreateInfo->pSubpasses->inputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6327 pCreateInfo->pSubpasses->inputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6328 {
6329 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6330 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->inputAttachments->layout, is an unrecognized enumerator");
6331 return false;
6332 }
6333 }
6334 if(pCreateInfo->pSubpasses->colorAttachments != nullptr)
6335 {
6336 if(pCreateInfo->pSubpasses->colorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6337 pCreateInfo->pSubpasses->colorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6338 {
6339 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6340 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->colorAttachments->layout, is an unrecognized enumerator");
6341 return false;
6342 }
6343 }
6344 if(pCreateInfo->pSubpasses->resolveAttachments != nullptr)
6345 {
6346 if(pCreateInfo->pSubpasses->resolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6347 pCreateInfo->pSubpasses->resolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6348 {
6349 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6350 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->resolveAttachments->layout, is an unrecognized enumerator");
6351 return false;
6352 }
6353 }
6354 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6355 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
6356 {
6357 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6358 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
6359 return false;
6360 }
6361 if(pCreateInfo->pSubpasses->preserveAttachments != nullptr)
6362 {
6363 if(pCreateInfo->pSubpasses->preserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6364 pCreateInfo->pSubpasses->preserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6365 {
6366 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6367 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->preserveAttachments->layout, is an unrecognized enumerator");
6368 return false;
6369 }
6370 }
6371 }
6372 if(pCreateInfo->pDependencies != nullptr)
6373 {
6374 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
6375 {
6376 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6377 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
6378 return false;
6379 }
6380 }
6381 }
6382
6383 return true;
6384}
6385
6386bool PostCreateRenderPass(
6387 VkDevice device,
6388 VkRenderPass* pRenderPass,
6389 VkResult result)
6390{
6391
6392 if(pRenderPass != nullptr)
6393 {
6394 }
6395
6396 if(result < VK_SUCCESS)
6397 {
6398 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6399 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6400 return false;
6401 }
6402
6403 return true;
6404}
6405
6406VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
6407 VkDevice device,
6408 const VkRenderPassCreateInfo* pCreateInfo,
6409 VkRenderPass* pRenderPass)
6410{
6411 PreCreateRenderPass(device, pCreateInfo);
6412
6413 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
6414
6415 PostCreateRenderPass(device, pRenderPass, result);
6416
6417 return result;
6418}
6419
6420bool PostDestroyRenderPass(
6421 VkDevice device,
6422 VkRenderPass renderPass,
6423 VkResult result)
6424{
6425
6426
6427 if(result < VK_SUCCESS)
6428 {
6429 std::string reason = "vkDestroyRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6430 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6431 return false;
6432 }
6433
6434 return true;
6435}
6436
6437VK_LAYER_EXPORT VkResult VKAPI vkDestroyRenderPass(
6438 VkDevice device,
6439 VkRenderPass renderPass)
6440{
6441 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass);
6442
6443 PostDestroyRenderPass(device, renderPass, result);
6444
6445 return result;
6446}
6447
6448bool PostGetRenderAreaGranularity(
6449 VkDevice device,
6450 VkRenderPass renderPass,
6451 VkExtent2D* pGranularity,
6452 VkResult result)
6453{
6454
6455
6456 if(pGranularity != nullptr)
6457 {
6458 }
6459
6460 if(result < VK_SUCCESS)
6461 {
6462 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
6463 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6464 return false;
6465 }
6466
6467 return true;
6468}
6469
6470VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
6471 VkDevice device,
6472 VkRenderPass renderPass,
6473 VkExtent2D* pGranularity)
6474{
6475 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
6476
6477 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
6478
6479 return result;
6480}
6481
6482bool PreCreateCommandPool(
6483 VkDevice device,
6484 const VkCmdPoolCreateInfo* pCreateInfo)
6485{
6486 if(pCreateInfo != nullptr)
6487 {
6488 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
6489 {
6490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6491 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6492 return false;
6493 }
6494 }
6495
6496 return true;
6497}
6498
6499bool PostCreateCommandPool(
6500 VkDevice device,
6501 VkCmdPool* pCmdPool,
6502 VkResult result)
6503{
6504
6505 if(pCmdPool != nullptr)
6506 {
6507 }
6508
6509 if(result < VK_SUCCESS)
6510 {
6511 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6512 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6513 return false;
6514 }
6515
6516 return true;
6517}
6518
6519VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
6520 VkDevice device,
6521 const VkCmdPoolCreateInfo* pCreateInfo,
6522 VkCmdPool* pCmdPool)
6523{
6524 PreCreateCommandPool(device, pCreateInfo);
6525
6526 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
6527
6528 PostCreateCommandPool(device, pCmdPool, result);
6529
6530 return result;
6531}
6532
6533bool PostDestroyCommandPool(
6534 VkDevice device,
6535 VkCmdPool cmdPool,
6536 VkResult result)
6537{
6538
6539
6540 if(result < VK_SUCCESS)
6541 {
6542 std::string reason = "vkDestroyCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6543 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6544 return false;
6545 }
6546
6547 return true;
6548}
6549
6550VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandPool(
6551 VkDevice device,
6552 VkCmdPool cmdPool)
6553{
6554 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, cmdPool);
6555
6556 PostDestroyCommandPool(device, cmdPool, result);
6557
6558 return result;
6559}
6560
6561bool PostResetCommandPool(
6562 VkDevice device,
6563 VkCmdPool cmdPool,
6564 VkCmdPoolResetFlags flags,
6565 VkResult result)
6566{
6567
6568
6569
6570 if(result < VK_SUCCESS)
6571 {
6572 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6574 return false;
6575 }
6576
6577 return true;
6578}
6579
6580VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
6581 VkDevice device,
6582 VkCmdPool cmdPool,
6583 VkCmdPoolResetFlags flags)
6584{
6585 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
6586
6587 PostResetCommandPool(device, cmdPool, flags, result);
6588
6589 return result;
6590}
6591
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006592bool PreCreateCommandBuffer(
6593 VkDevice device,
6594 const VkCmdBufferCreateInfo* pCreateInfo)
6595{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006596 if(pCreateInfo != nullptr)
6597 {
6598 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006599 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006600 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006601 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006602 return false;
6603 }
6604 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6605 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6606 {
6607 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006608 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006609 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006610 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006611 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006612
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006613 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006614}
6615
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006616bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006617 VkDevice device,
6618 VkCmdBuffer* pCmdBuffer,
6619 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006620{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006621
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006622 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006623 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006624 }
6625
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006626 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006627 {
6628 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006629 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6630 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006631 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006632
6633 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006634}
6635
6636VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6637 VkDevice device,
6638 const VkCmdBufferCreateInfo* pCreateInfo,
6639 VkCmdBuffer* pCmdBuffer)
6640{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006641 PreCreateCommandBuffer(device, pCreateInfo);
6642
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006643 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6644
6645 PostCreateCommandBuffer(device, pCmdBuffer, result);
6646
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006647 return result;
6648}
6649
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006650bool PostDestroyCommandBuffer(
6651 VkDevice device,
6652 VkCmdBuffer commandBuffer,
6653 VkResult result)
6654{
6655
6656
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006657 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006658 {
6659 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6660 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6661 return false;
6662 }
6663
6664 return true;
6665}
6666
6667VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6668 VkDevice device,
6669 VkCmdBuffer commandBuffer)
6670{
6671 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6672
6673 PostDestroyCommandBuffer(device, commandBuffer, result);
6674
6675 return result;
6676}
6677
6678bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006679 VkCmdBuffer cmdBuffer,
6680 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006681{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006682 if(pBeginInfo != nullptr)
6683 {
6684 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006685 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006686 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006687 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006688 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006689 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006690 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006691
6692 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006693}
6694
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006695bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006696 VkCmdBuffer cmdBuffer,
6697 VkResult result)
6698{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006699
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006700 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006701 {
6702 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006703 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6704 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006705 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006706
6707 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006708}
6709
6710VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6711 VkCmdBuffer cmdBuffer,
6712 const VkCmdBufferBeginInfo* pBeginInfo)
6713{
6714 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006715
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006716 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6717
6718 PostBeginCommandBuffer(cmdBuffer, result);
6719
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006720 return result;
6721}
6722
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006723bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006724 VkCmdBuffer cmdBuffer,
6725 VkResult result)
6726{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006727
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006728 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729 {
6730 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006731 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6732 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006733 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006734
6735 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006736}
6737
6738VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6739 VkCmdBuffer cmdBuffer)
6740{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006741 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6742
6743 PostEndCommandBuffer(cmdBuffer, result);
6744
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006745 return result;
6746}
6747
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006748bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006749 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006750 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006751 VkResult result)
6752{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006753
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006754
6755 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006756 {
6757 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006758 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6759 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006760 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006761
6762 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006763}
6764
6765VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006766 VkCmdBuffer cmdBuffer,
6767 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006768{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006769 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006770
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006771 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006772
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006773 return result;
6774}
6775
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006776bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006777 VkCmdBuffer cmdBuffer,
6778 VkPipelineBindPoint pipelineBindPoint,
6779 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006780{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006781
6782 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6783 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6784 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006785 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006786 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006787 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006788 }
6789
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006790
6791 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006792}
6793
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006794VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6795 VkCmdBuffer cmdBuffer,
6796 VkPipelineBindPoint pipelineBindPoint,
6797 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006798{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006799 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6800
6801 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6802}
6803
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006804bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006805 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006806 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006807{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006808
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006809
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006810 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006811}
6812
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006813VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006814 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006815 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006816{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006817 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006818
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006819 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006820}
6821
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006822bool PostCmdBindDynamicRasterState(
6823 VkCmdBuffer cmdBuffer,
6824 VkDynamicRasterState dynamicRasterState)
6825{
6826
6827
6828 return true;
6829}
6830
6831VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicRasterState(
6832 VkCmdBuffer cmdBuffer,
6833 VkDynamicRasterState dynamicRasterState)
6834{
6835 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6836
6837 PostCmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6838}
6839
6840bool PostCmdBindDynamicColorBlendState(
6841 VkCmdBuffer cmdBuffer,
6842 VkDynamicColorBlendState dynamicColorBlendState)
6843{
6844
6845
6846 return true;
6847}
6848
6849VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicColorBlendState(
6850 VkCmdBuffer cmdBuffer,
6851 VkDynamicColorBlendState dynamicColorBlendState)
6852{
6853 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6854
6855 PostCmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6856}
6857
6858bool PostCmdBindDynamicDepthStencilState(
6859 VkCmdBuffer cmdBuffer,
6860 VkDynamicDepthStencilState dynamicDepthStencilState)
6861{
6862
6863
6864 return true;
6865}
6866
6867VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthStencilState(
6868 VkCmdBuffer cmdBuffer,
6869 VkDynamicDepthStencilState dynamicDepthStencilState)
6870{
6871 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6872
6873 PostCmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6874}
6875
6876bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006877 VkCmdBuffer cmdBuffer,
6878 const VkDescriptorSet* pDescriptorSets,
6879 const uint32_t* pDynamicOffsets)
6880{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006881 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006882 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006883 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006884
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006885 if(pDynamicOffsets != nullptr)
6886 {
6887 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006888
6889 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006890}
6891
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006892bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006893 VkCmdBuffer cmdBuffer,
6894 VkPipelineBindPoint pipelineBindPoint,
6895 VkPipelineLayout layout,
6896 uint32_t firstSet,
6897 uint32_t setCount,
6898 uint32_t dynamicOffsetCount)
6899{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006900
6901 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6902 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6903 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006904 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006905 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006906 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006907 }
6908
6909
6910
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006911
6912
6913 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006914}
6915
6916VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6917 VkCmdBuffer cmdBuffer,
6918 VkPipelineBindPoint pipelineBindPoint,
6919 VkPipelineLayout layout,
6920 uint32_t firstSet,
6921 uint32_t setCount,
6922 const VkDescriptorSet* pDescriptorSets,
6923 uint32_t dynamicOffsetCount,
6924 const uint32_t* pDynamicOffsets)
6925{
6926 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006927
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006928 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6929
6930 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6931}
6932
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006933bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006934 VkCmdBuffer cmdBuffer,
6935 VkBuffer buffer,
6936 VkDeviceSize offset,
6937 VkIndexType indexType)
6938{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006939
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006940
6941
6942 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6943 indexType > VK_INDEX_TYPE_END_RANGE)
6944 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006945 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006946 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006947 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006948 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006949
6950 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006951}
6952
6953VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6954 VkCmdBuffer cmdBuffer,
6955 VkBuffer buffer,
6956 VkDeviceSize offset,
6957 VkIndexType indexType)
6958{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006959 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6960
6961 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6962}
6963
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006964bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006965 VkCmdBuffer cmdBuffer,
6966 const VkBuffer* pBuffers,
6967 const VkDeviceSize* pOffsets)
6968{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006969 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006970 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006971 }
6972
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006973 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006974 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006975 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006976
6977 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006978}
6979
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006980bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006981 VkCmdBuffer cmdBuffer,
6982 uint32_t startBinding,
6983 uint32_t bindingCount)
6984{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006985
6986
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006987
6988 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006989}
6990
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06006991VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006992 VkCmdBuffer cmdBuffer,
6993 uint32_t startBinding,
6994 uint32_t bindingCount,
6995 const VkBuffer* pBuffers,
6996 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006997{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006998 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006999
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007000 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
7001
7002 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007003}
7004
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007005bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007006 VkCmdBuffer cmdBuffer,
7007 uint32_t firstVertex,
7008 uint32_t vertexCount,
7009 uint32_t firstInstance,
7010 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007011{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007012
7013
7014
7015
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007016
7017 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007018}
7019
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007020VK_LAYER_EXPORT void VKAPI vkCmdDraw(
7021 VkCmdBuffer cmdBuffer,
7022 uint32_t firstVertex,
7023 uint32_t vertexCount,
7024 uint32_t firstInstance,
7025 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007026{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007027 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
7028
7029 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007030}
7031
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007032bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007033 VkCmdBuffer cmdBuffer,
7034 uint32_t firstIndex,
7035 uint32_t indexCount,
7036 int32_t vertexOffset,
7037 uint32_t firstInstance,
7038 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007039{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007040
7041
7042
7043
7044
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007045
7046 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007047}
7048
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007049VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7050 VkCmdBuffer cmdBuffer,
7051 uint32_t firstIndex,
7052 uint32_t indexCount,
7053 int32_t vertexOffset,
7054 uint32_t firstInstance,
7055 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007056{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007057 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7058
7059 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7060}
7061
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007062bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007063 VkCmdBuffer cmdBuffer,
7064 VkBuffer buffer,
7065 VkDeviceSize offset,
7066 uint32_t count,
7067 uint32_t stride)
7068{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007069
7070
7071
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007072
7073
7074 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007075}
7076
7077VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7078 VkCmdBuffer cmdBuffer,
7079 VkBuffer buffer,
7080 VkDeviceSize offset,
7081 uint32_t count,
7082 uint32_t stride)
7083{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007084 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7085
7086 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7087}
7088
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007089bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007090 VkCmdBuffer cmdBuffer,
7091 VkBuffer buffer,
7092 VkDeviceSize offset,
7093 uint32_t count,
7094 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007095{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007096
7097
7098
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007099
7100
7101 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007102}
7103
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007104VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7105 VkCmdBuffer cmdBuffer,
7106 VkBuffer buffer,
7107 VkDeviceSize offset,
7108 uint32_t count,
7109 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007110{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007111 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7112
7113 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7114}
7115
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007116bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007117 VkCmdBuffer cmdBuffer,
7118 uint32_t x,
7119 uint32_t y,
7120 uint32_t z)
7121{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007122
7123
7124
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007125
7126 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007127}
7128
7129VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7130 VkCmdBuffer cmdBuffer,
7131 uint32_t x,
7132 uint32_t y,
7133 uint32_t z)
7134{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007135 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7136
7137 PostCmdDispatch(cmdBuffer, x, y, z);
7138}
7139
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007140bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007141 VkCmdBuffer cmdBuffer,
7142 VkBuffer buffer,
7143 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007144{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007145
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007146
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007147
7148 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007149}
7150
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007151VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7152 VkCmdBuffer cmdBuffer,
7153 VkBuffer buffer,
7154 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007155{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007156 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7157
7158 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007159}
7160
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007161bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007162 VkCmdBuffer cmdBuffer,
7163 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007164{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007165 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007166 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007167 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007168
7169 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007170}
7171
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007172bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007173 VkCmdBuffer cmdBuffer,
7174 VkBuffer srcBuffer,
7175 VkBuffer destBuffer,
7176 uint32_t regionCount)
7177{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007178
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007179
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007180
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007181
7182 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007183}
7184
7185VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7186 VkCmdBuffer cmdBuffer,
7187 VkBuffer srcBuffer,
7188 VkBuffer destBuffer,
7189 uint32_t regionCount,
7190 const VkBufferCopy* pRegions)
7191{
7192 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007193
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007194 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7195
7196 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7197}
7198
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007199bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007200 VkCmdBuffer cmdBuffer,
7201 const VkImageCopy* pRegions)
7202{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007203 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007204 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007205 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7206 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7207 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007208 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007209 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007210 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007211 }
7212 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7213 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7214 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007215 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007216 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007217 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007218 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007219 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007220
7221 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007222}
7223
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007224bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007225 VkCmdBuffer cmdBuffer,
7226 VkImage srcImage,
7227 VkImageLayout srcImageLayout,
7228 VkImage destImage,
7229 VkImageLayout destImageLayout,
7230 uint32_t regionCount)
7231{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007232
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007233
7234 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7235 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7236 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007237 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007238 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007239 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007240 }
7241
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007242
7243 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7244 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7245 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007246 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007247 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007248 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007249 }
7250
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007251
7252 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007253}
7254
7255VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7256 VkCmdBuffer cmdBuffer,
7257 VkImage srcImage,
7258 VkImageLayout srcImageLayout,
7259 VkImage destImage,
7260 VkImageLayout destImageLayout,
7261 uint32_t regionCount,
7262 const VkImageCopy* pRegions)
7263{
7264 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007265
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007266 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7267
7268 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7269}
7270
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007271bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007272 VkCmdBuffer cmdBuffer,
7273 const VkImageBlit* pRegions)
7274{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007275 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007276 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007277 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7278 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7279 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007280 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007281 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007282 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007283 }
7284 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7285 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7286 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007287 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007288 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007289 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007290 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007291 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007292
7293 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007294}
7295
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007296bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007297 VkCmdBuffer cmdBuffer,
7298 VkImage srcImage,
7299 VkImageLayout srcImageLayout,
7300 VkImage destImage,
7301 VkImageLayout destImageLayout,
7302 uint32_t regionCount,
7303 VkTexFilter filter)
7304{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007305
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007306
7307 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7308 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7309 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007310 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007311 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007312 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007313 }
7314
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007315
7316 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7317 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7318 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007319 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007320 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007321 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007322 }
7323
7324
7325 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7326 filter > VK_TEX_FILTER_END_RANGE)
7327 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007328 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007329 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007330 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007331 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007332
7333 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007334}
7335
7336VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7337 VkCmdBuffer cmdBuffer,
7338 VkImage srcImage,
7339 VkImageLayout srcImageLayout,
7340 VkImage destImage,
7341 VkImageLayout destImageLayout,
7342 uint32_t regionCount,
7343 const VkImageBlit* pRegions,
7344 VkTexFilter filter)
7345{
7346 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007347
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007348 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7349
7350 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7351}
7352
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007353bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007354 VkCmdBuffer cmdBuffer,
7355 const VkBufferImageCopy* pRegions)
7356{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007357 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007358 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007359 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7360 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7361 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007362 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007363 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007364 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007365 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007366 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007367
7368 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007369}
7370
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007371bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007372 VkCmdBuffer cmdBuffer,
7373 VkBuffer srcBuffer,
7374 VkImage destImage,
7375 VkImageLayout destImageLayout,
7376 uint32_t regionCount)
7377{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007378
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007379
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007380
7381 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7382 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7383 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007384 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007385 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007386 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007387 }
7388
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007389
7390 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007391}
7392
7393VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7394 VkCmdBuffer cmdBuffer,
7395 VkBuffer srcBuffer,
7396 VkImage destImage,
7397 VkImageLayout destImageLayout,
7398 uint32_t regionCount,
7399 const VkBufferImageCopy* pRegions)
7400{
7401 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007402
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007403 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7404
7405 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7406}
7407
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007408bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007409 VkCmdBuffer cmdBuffer,
7410 const VkBufferImageCopy* pRegions)
7411{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007412 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007413 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007414 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7415 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7416 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007417 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007418 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007419 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007420 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007421 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007422
7423 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007424}
7425
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007426bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007427 VkCmdBuffer cmdBuffer,
7428 VkImage srcImage,
7429 VkImageLayout srcImageLayout,
7430 VkBuffer destBuffer,
7431 uint32_t regionCount)
7432{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007433
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007434
7435 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7436 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7437 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007438 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007439 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007440 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007441 }
7442
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007443
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007444
7445 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007446}
7447
7448VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7449 VkCmdBuffer cmdBuffer,
7450 VkImage srcImage,
7451 VkImageLayout srcImageLayout,
7452 VkBuffer destBuffer,
7453 uint32_t regionCount,
7454 const VkBufferImageCopy* pRegions)
7455{
7456 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007457
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007458 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7459
7460 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7461}
7462
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007463bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007464 VkCmdBuffer cmdBuffer,
7465 const uint32_t* pData)
7466{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007467 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007468 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007469 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007470
7471 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007472}
7473
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007474bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007475 VkCmdBuffer cmdBuffer,
7476 VkBuffer destBuffer,
7477 VkDeviceSize destOffset,
7478 VkDeviceSize dataSize)
7479{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007480
7481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007482
7483
7484 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007485}
7486
7487VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7488 VkCmdBuffer cmdBuffer,
7489 VkBuffer destBuffer,
7490 VkDeviceSize destOffset,
7491 VkDeviceSize dataSize,
7492 const uint32_t* pData)
7493{
7494 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007495
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007496 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7497
7498 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7499}
7500
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007501bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007502 VkCmdBuffer cmdBuffer,
7503 VkBuffer destBuffer,
7504 VkDeviceSize destOffset,
7505 VkDeviceSize fillSize,
7506 uint32_t data)
7507{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007508
7509
7510
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007511
7512
7513 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007514}
7515
7516VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7517 VkCmdBuffer cmdBuffer,
7518 VkBuffer destBuffer,
7519 VkDeviceSize destOffset,
7520 VkDeviceSize fillSize,
7521 uint32_t data)
7522{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007523 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7524
7525 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7526}
7527
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007528bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007529 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007530 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007531 const VkImageSubresourceRange* pRanges)
7532{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007533 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007534 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007535 }
7536
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007537 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007538 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007539 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7540 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7541 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007542 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007543 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007544 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007545 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007546 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007547
7548 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007549}
7550
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007551bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007552 VkCmdBuffer cmdBuffer,
7553 VkImage image,
7554 VkImageLayout imageLayout,
7555 uint32_t rangeCount)
7556{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007557
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007558
7559 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7560 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7561 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007562 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007563 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007564 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007565 }
7566
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007567
7568 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007569}
7570
7571VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7572 VkCmdBuffer cmdBuffer,
7573 VkImage image,
7574 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007575 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007576 uint32_t rangeCount,
7577 const VkImageSubresourceRange* pRanges)
7578{
7579 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007580
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007581 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7582
7583 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7584}
7585
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007586bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007587 VkCmdBuffer cmdBuffer,
7588 const VkImageSubresourceRange* pRanges)
7589{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007590 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007591 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007592 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7593 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7594 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007595 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007596 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007597 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007598 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007599 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007600
7601 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007602}
7603
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007604bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007605 VkCmdBuffer cmdBuffer,
7606 VkImage image,
7607 VkImageLayout imageLayout,
7608 float depth,
7609 uint32_t stencil,
7610 uint32_t rangeCount)
7611{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007612
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007613
7614 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7615 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7616 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007617 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007618 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007619 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007620 }
7621
7622
7623
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007624
7625 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007626}
7627
Chris Forbes2951d7d2015-06-22 17:21:59 +12007628VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007629 VkCmdBuffer cmdBuffer,
7630 VkImage image,
7631 VkImageLayout imageLayout,
7632 float depth,
7633 uint32_t stencil,
7634 uint32_t rangeCount,
7635 const VkImageSubresourceRange* pRanges)
7636{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007637 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007638
Chris Forbes2951d7d2015-06-22 17:21:59 +12007639 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007640
Chris Forbes2951d7d2015-06-22 17:21:59 +12007641 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007642}
7643
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007644bool PreCmdClearColorAttachment(
7645 VkCmdBuffer cmdBuffer,
7646 const VkClearColorValue* pColor,
7647 const VkRect3D* pRects)
7648{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007649 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007650 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007651 }
7652
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007653 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007654 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007655 }
7656
7657 return true;
7658}
7659
7660bool PostCmdClearColorAttachment(
7661 VkCmdBuffer cmdBuffer,
7662 uint32_t colorAttachment,
7663 VkImageLayout imageLayout,
7664 uint32_t rectCount)
7665{
7666
7667
7668 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7669 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7670 {
7671 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007672 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007673 return false;
7674 }
7675
7676
7677 return true;
7678}
7679
7680VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7681 VkCmdBuffer cmdBuffer,
7682 uint32_t colorAttachment,
7683 VkImageLayout imageLayout,
7684 const VkClearColorValue* pColor,
7685 uint32_t rectCount,
7686 const VkRect3D* pRects)
7687{
7688 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7689
7690 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7691
7692 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7693}
7694
7695bool PreCmdClearDepthStencilAttachment(
7696 VkCmdBuffer cmdBuffer,
7697 const VkRect3D* pRects)
7698{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007699 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007700 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007701 }
7702
7703 return true;
7704}
7705
7706bool PostCmdClearDepthStencilAttachment(
7707 VkCmdBuffer cmdBuffer,
7708 VkImageAspectFlags imageAspectMask,
7709 VkImageLayout imageLayout,
7710 float depth,
7711 uint32_t stencil,
7712 uint32_t rectCount)
7713{
7714
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007715
7716 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7717 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7718 {
7719 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007720 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007721 return false;
7722 }
7723
7724
7725
7726
7727 return true;
7728}
7729
7730VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7731 VkCmdBuffer cmdBuffer,
7732 VkImageAspectFlags imageAspectMask,
7733 VkImageLayout imageLayout,
7734 float depth,
7735 uint32_t stencil,
7736 uint32_t rectCount,
7737 const VkRect3D* pRects)
7738{
7739 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7740
7741 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7742
7743 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7744}
7745
7746bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007747 VkCmdBuffer cmdBuffer,
7748 const VkImageResolve* pRegions)
7749{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007750 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007751 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007752 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7753 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7754 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007755 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007756 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007757 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007758 }
7759 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7760 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7761 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007762 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007763 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007764 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007765 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007766 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007767
7768 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007769}
7770
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007771bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007772 VkCmdBuffer cmdBuffer,
7773 VkImage srcImage,
7774 VkImageLayout srcImageLayout,
7775 VkImage destImage,
7776 VkImageLayout destImageLayout,
7777 uint32_t regionCount)
7778{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007779
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007780
7781 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7782 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7783 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007784 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007785 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007786 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007787 }
7788
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007789
7790 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7791 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7792 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007793 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007794 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007795 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007796 }
7797
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007798
7799 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007800}
7801
7802VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7803 VkCmdBuffer cmdBuffer,
7804 VkImage srcImage,
7805 VkImageLayout srcImageLayout,
7806 VkImage destImage,
7807 VkImageLayout destImageLayout,
7808 uint32_t regionCount,
7809 const VkImageResolve* pRegions)
7810{
7811 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007812
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007813 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7814
7815 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7816}
7817
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007818bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007819 VkCmdBuffer cmdBuffer,
7820 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007821 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007822{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007823
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007824
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007825
7826 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007827}
7828
7829VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7830 VkCmdBuffer cmdBuffer,
7831 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007832 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007833{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007834 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007835
Tony Barbourc2e987e2015-06-29 16:20:35 -06007836 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007837}
7838
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007839bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007840 VkCmdBuffer cmdBuffer,
7841 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007842 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007843{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007844
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007845
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007846
7847 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007848}
7849
7850VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7851 VkCmdBuffer cmdBuffer,
7852 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007853 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007854{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007855 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007856
Tony Barbourc2e987e2015-06-29 16:20:35 -06007857 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007858}
7859
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007860bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007861 VkCmdBuffer cmdBuffer,
7862 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007863 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007864{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007865 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007866 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007867 }
7868
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007869 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007870 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007871 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007872
7873 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007874}
7875
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007876bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007877 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007878 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007879 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007880 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007881 uint32_t memBarrierCount)
7882{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007883
Tony Barbourc2e987e2015-06-29 16:20:35 -06007884
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007885
7886
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007887
7888 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007889}
7890
7891VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
7892 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007893 uint32_t eventCount,
7894 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007895 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007896 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007897 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007898 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007899{
7900 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007901
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007902 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007903
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007904 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007905}
7906
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007907bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007908 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007909 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007910{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007911 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007912 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007913 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007914
7915 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007916}
7917
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007918bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007919 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007920 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007921 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007922 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007923 uint32_t memBarrierCount)
7924{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007925
Tony Barbourc2e987e2015-06-29 16:20:35 -06007926
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007927
7928
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007929
7930 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007931}
7932
7933VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7934 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007935 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007936 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007937 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007938 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007939 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007940{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007941 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007942
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007943 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007944
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007945 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007946}
7947
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007948bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007949 VkCmdBuffer cmdBuffer,
7950 VkQueryPool queryPool,
7951 uint32_t slot,
7952 VkQueryControlFlags flags)
7953{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007954
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007955
7956
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007957
7958 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007959}
7960
7961VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
7962 VkCmdBuffer cmdBuffer,
7963 VkQueryPool queryPool,
7964 uint32_t slot,
7965 VkQueryControlFlags flags)
7966{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007967 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7968
7969 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7970}
7971
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007972bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007973 VkCmdBuffer cmdBuffer,
7974 VkQueryPool queryPool,
7975 uint32_t slot)
7976{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007977
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007978
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007979
7980 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007981}
7982
7983VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
7984 VkCmdBuffer cmdBuffer,
7985 VkQueryPool queryPool,
7986 uint32_t slot)
7987{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007988 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
7989
7990 PostCmdEndQuery(cmdBuffer, queryPool, slot);
7991}
7992
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007993bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007994 VkCmdBuffer cmdBuffer,
7995 VkQueryPool queryPool,
7996 uint32_t startQuery,
7997 uint32_t queryCount)
7998{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007999
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008000
8001
8002
8003 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008004}
8005
8006VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8007 VkCmdBuffer cmdBuffer,
8008 VkQueryPool queryPool,
8009 uint32_t startQuery,
8010 uint32_t queryCount)
8011{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008012 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8013
8014 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8015}
8016
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008017bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008018 VkCmdBuffer cmdBuffer,
8019 VkTimestampType timestampType,
8020 VkBuffer destBuffer,
8021 VkDeviceSize destOffset)
8022{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008023
8024 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8025 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8026 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008027 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008028 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008029 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008030 }
8031
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008032
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008033
8034 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008035}
8036
8037VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8038 VkCmdBuffer cmdBuffer,
8039 VkTimestampType timestampType,
8040 VkBuffer destBuffer,
8041 VkDeviceSize destOffset)
8042{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008043 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8044
8045 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8046}
8047
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008048bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008049 VkCmdBuffer cmdBuffer,
8050 VkQueryPool queryPool,
8051 uint32_t startQuery,
8052 uint32_t queryCount,
8053 VkBuffer destBuffer,
8054 VkDeviceSize destOffset,
8055 VkDeviceSize destStride,
8056 VkQueryResultFlags flags)
8057{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008058
8059
8060
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008061
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008062
8063
8064
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008065
8066 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008067}
8068
Jeremy Hayescf469132015-04-17 10:36:53 -06008069VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008070 VkCmdBuffer cmdBuffer,
8071 VkQueryPool queryPool,
8072 uint32_t startQuery,
8073 uint32_t queryCount,
8074 VkBuffer destBuffer,
8075 VkDeviceSize destOffset,
8076 VkDeviceSize destStride,
8077 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06008078{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008079 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8080
8081 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06008082}
8083
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008084bool PreCmdPushConstants(
8085 VkCmdBuffer cmdBuffer,
8086 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008087{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008088 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008089 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008090 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008091
8092 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008093}
8094
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008095bool PostCmdPushConstants(
8096 VkCmdBuffer cmdBuffer,
8097 VkPipelineLayout layout,
8098 VkShaderStageFlags stageFlags,
8099 uint32_t start,
8100 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008101{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008102
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008103
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008104
8105
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008106
8107 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008108}
8109
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008110VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
8111 VkCmdBuffer cmdBuffer,
8112 VkPipelineLayout layout,
8113 VkShaderStageFlags stageFlags,
8114 uint32_t start,
8115 uint32_t length,
8116 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008117{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008118 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008119
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008120 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008121
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008122 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008123}
8124
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008125bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008126 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008127 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008128{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008129 if(pRenderPassBegin != nullptr)
8130 {
8131 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008132 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008133 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008134 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008135 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008136 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008137 if(pRenderPassBegin->pAttachmentClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008138 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008139 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06008140 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008141
8142 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008143}
8144
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008145bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008146 VkCmdBuffer cmdBuffer,
8147 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008148{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008149
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008150 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8151 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
8152 {
8153 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8154 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8155 return false;
8156 }
8157
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008158 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008159}
8160
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008161VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8162 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008163 const VkRenderPassBeginInfo* pRenderPassBegin,
8164 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008165{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008166 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8167
Chia-I Wuc278df82015-07-07 11:50:03 +08008168 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008169
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008170 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008171}
8172
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008173bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08008174 VkCmdBuffer cmdBuffer,
8175 VkRenderPassContents contents)
8176{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008177
8178 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008179 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008180 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008181 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008182 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8183 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008184 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008185
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008186 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08008187}
8188
8189VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8190 VkCmdBuffer cmdBuffer,
8191 VkRenderPassContents contents)
8192{
Chia-I Wuc278df82015-07-07 11:50:03 +08008193 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8194
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008195 PostCmdNextSubpass(cmdBuffer, contents);
8196}
8197
8198bool PostCmdEndRenderPass(
8199 VkCmdBuffer cmdBuffer)
8200{
8201
8202 return true;
8203}
8204
8205VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
8206 VkCmdBuffer cmdBuffer)
8207{
8208 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8209
8210 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08008211}
8212
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008213bool PreCmdExecuteCommands(
8214 VkCmdBuffer cmdBuffer,
8215 const VkCmdBuffer* pCmdBuffers)
8216{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008217 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008218 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008219 }
8220
8221 return true;
8222}
8223
8224bool PostCmdExecuteCommands(
8225 VkCmdBuffer cmdBuffer,
8226 uint32_t cmdBuffersCount)
8227{
8228
8229
8230 return true;
8231}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008232
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008233VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008234 VkCmdBuffer cmdBuffer,
8235 uint32_t cmdBuffersCount,
8236 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008237{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008238 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8239
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008240 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8241
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008242 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008243}
8244
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008245VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008246{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008247 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008248 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008249 }
8250
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008251 /* loader uses this to force layer initialization; device object is wrapped */
8252 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008253 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008254 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008255 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008256
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008257 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008258 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008259 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008260 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008261 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008262 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008263 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008264 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008265 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008266 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008267 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008268 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008269 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008270 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008271 if (!strcmp(funcName, "vkFreeMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008272 return (PFN_vkVoidFunction) vkFreeMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008273 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008274 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008275 if (!strcmp(funcName, "vkUnmapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008276 return (PFN_vkVoidFunction) vkUnmapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008277 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008278 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008279 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008280 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008281 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008282 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008283 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008284 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008285 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008286 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008287 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008288 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008289 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008290 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008291 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008292 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008293 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008294 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008295 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008296 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008297 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008298 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008299 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008300 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008301 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008302 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008303 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008304 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008305 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008306 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008307 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008308 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008309 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008310 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008311 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008312 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008313 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008314 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008315 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008316 return (PFN_vkVoidFunction) vkCreateImageView;
Chia-I Wuc278df82015-07-07 11:50:03 +08008317 if (!strcmp(funcName, "vkCreateAttachmentView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008318 return (PFN_vkVoidFunction) vkCreateAttachmentView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008319 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008320 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008321 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008322 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008323 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008324 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008325 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008326 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008327 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008328 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008329 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008330 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008331 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008332 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008333 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008334 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008335 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008336 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008337 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008338 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008339 if (!strcmp(funcName, "vkCreateDynamicRasterState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008340 return (PFN_vkVoidFunction) vkCreateDynamicRasterState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008341 if (!strcmp(funcName, "vkCreateDynamicColorBlendState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008342 return (PFN_vkVoidFunction) vkCreateDynamicColorBlendState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008343 if (!strcmp(funcName, "vkCreateDynamicDepthStencilState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008344 return (PFN_vkVoidFunction) vkCreateDynamicDepthStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008345 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008346 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008347 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008348 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008349 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008350 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008351 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008352 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008353 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008354 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008355 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008356 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008357 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008358 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008359 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008360 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008361 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008362 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008363 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008364 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008365 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008366 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008367 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008368 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008369 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008370 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008371 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008372 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008373 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008374 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008375 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008376 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008377 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008378 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008379 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008380 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008381 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008382 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008383 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008384 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008385 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008386 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008387 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008388 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008389 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008390 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008391 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008392 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008393 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008394 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008395 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008396 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008397 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008398 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008399 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008400 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008401 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008402 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008403 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008404 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008405 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008406 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008407 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008408 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008409 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008410 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008411 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008412 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008413 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008414 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008415 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008416 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008417
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008418 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008419 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008420 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008421 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008422 }
8423}
8424
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008425VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008426{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008427 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008428 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008429 }
8430
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008431 /* loader uses this to force layer initialization; instance object is wrapped */
8432 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008433 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008434 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008435 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008436
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008437 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008438 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008439 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008440 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008441 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008442 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008443 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008444 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008445 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008446 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06008447 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008448 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008449 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008450 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008451 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008452 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008453 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008454 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008455 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008456 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008457 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008458 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008459
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008460 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008461 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008462 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008463 return fptr;
8464
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008465 {
8466 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8467 return NULL;
8468 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8469 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008470}