blob: 38f1ca80c5ea67340315af624db5760fe1b388ac [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{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004686 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004687
4688 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004689
4690 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004691}
4692
4693bool PostGetPipelineCacheData(
4694 VkDevice device,
4695 VkPipelineCache pipelineCache,
4696 void* pData,
4697 VkResult result)
4698{
4699
4700
4701 if(pData != nullptr)
4702 {
4703 }
4704
4705 if(result < VK_SUCCESS)
4706 {
4707 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4708 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4709 return false;
4710 }
4711
4712 return true;
4713}
4714
4715VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4716 VkDevice device,
4717 VkPipelineCache pipelineCache,
4718 void* pData)
4719{
4720 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4721
4722 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4723
4724 return result;
4725}
4726
4727bool PreMergePipelineCaches(
4728 VkDevice device,
4729 const VkPipelineCache* pSrcCaches)
4730{
4731 if(pSrcCaches != nullptr)
4732 {
4733 }
4734
4735 return true;
4736}
4737
4738bool PostMergePipelineCaches(
4739 VkDevice device,
4740 VkPipelineCache destCache,
4741 uint32_t srcCacheCount,
4742 VkResult result)
4743{
4744
4745
4746
4747 if(result < VK_SUCCESS)
4748 {
4749 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4750 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4751 return false;
4752 }
4753
4754 return true;
4755}
4756
4757VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4758 VkDevice device,
4759 VkPipelineCache destCache,
4760 uint32_t srcCacheCount,
4761 const VkPipelineCache* pSrcCaches)
4762{
4763 PreMergePipelineCaches(device, pSrcCaches);
4764
4765 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4766
4767 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4768
4769 return result;
4770}
4771
4772bool PreCreateGraphicsPipelines(
4773 VkDevice device,
4774 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4775{
4776 if(pCreateInfos != nullptr)
4777 {
4778 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4779 {
4780 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4781 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4782 return false;
4783 }
4784 if(pCreateInfos->pStages != nullptr)
4785 {
4786 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4787 {
4788 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4789 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4790 return false;
4791 }
4792 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4793 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4794 {
4795 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4796 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4797 return false;
4798 }
4799 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4800 {
4801 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4802 {
4803 }
4804 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4805 {
4806 }
4807 }
4808 }
4809 if(pCreateInfos->pVertexInputState != nullptr)
4810 {
4811 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4812 {
4813 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4814 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4815 return false;
4816 }
4817 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4818 {
4819 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4820 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4821 {
4822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4823 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4824 return false;
4825 }
4826 }
4827 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4828 {
4829 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4830 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4831 {
4832 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4833 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4834 return false;
4835 }
4836 }
4837 }
4838 if(pCreateInfos->pInputAssemblyState != nullptr)
4839 {
4840 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4841 {
4842 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4843 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4844 return false;
4845 }
4846 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4847 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4848 {
4849 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4850 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4851 return false;
4852 }
4853 }
4854 if(pCreateInfos->pTessellationState != nullptr)
4855 {
4856 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4857 {
4858 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4859 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4860 return false;
4861 }
4862 }
4863 if(pCreateInfos->pViewportState != nullptr)
4864 {
4865 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4866 {
4867 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4868 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4869 return false;
4870 }
4871 }
4872 if(pCreateInfos->pRasterState != nullptr)
4873 {
4874 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4875 {
4876 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4877 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4878 return false;
4879 }
4880 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4881 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4882 {
4883 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4884 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4885 return false;
4886 }
4887 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4888 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4889 {
4890 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4891 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4892 return false;
4893 }
4894 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4895 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4896 {
4897 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4898 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4899 return false;
4900 }
4901 }
4902 if(pCreateInfos->pMultisampleState != nullptr)
4903 {
4904 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4905 {
4906 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4907 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4908 return false;
4909 }
4910 }
4911 if(pCreateInfos->pDepthStencilState != nullptr)
4912 {
4913 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4914 {
4915 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4916 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4917 return false;
4918 }
4919 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4920 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4921 {
4922 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4923 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4924 return false;
4925 }
4926 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4927 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4928 {
4929 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4930 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4931 return false;
4932 }
4933 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4934 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4935 {
4936 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4937 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4938 return false;
4939 }
4940 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4941 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4942 {
4943 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4944 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4945 return false;
4946 }
4947 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4948 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4949 {
4950 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4951 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4952 return false;
4953 }
4954 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4955 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4956 {
4957 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4958 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4959 return false;
4960 }
4961 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4962 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4963 {
4964 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4965 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4966 return false;
4967 }
4968 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4969 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4970 {
4971 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4972 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4973 return false;
4974 }
4975 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4976 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4977 {
4978 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4979 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4980 return false;
4981 }
4982 }
4983 if(pCreateInfos->pColorBlendState != nullptr)
4984 {
4985 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4986 {
4987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4988 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4989 return false;
4990 }
4991 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4992 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4993 {
4994 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4995 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4996 return false;
4997 }
4998 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4999 {
5000 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
5001 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
5002 {
5003 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5004 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
5005 return false;
5006 }
5007 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
5008 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
5009 {
5010 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5011 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
5012 return false;
5013 }
5014 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
5015 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
5016 {
5017 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5018 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
5019 return false;
5020 }
5021 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5022 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
5023 {
5024 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5025 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
5026 return false;
5027 }
5028 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5029 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
5030 {
5031 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5032 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
5033 return false;
5034 }
5035 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
5036 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
5037 {
5038 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5039 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
5040 return false;
5041 }
5042 }
5043 }
5044 }
5045
5046 return true;
5047}
5048
5049bool PostCreateGraphicsPipelines(
5050 VkDevice device,
5051 VkPipelineCache pipelineCache,
5052 uint32_t count,
5053 VkPipeline* pPipelines,
5054 VkResult result)
5055{
5056
5057
5058
5059 if(pPipelines != nullptr)
5060 {
5061 }
5062
5063 if(result < VK_SUCCESS)
5064 {
5065 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
5066 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5067 return false;
5068 }
5069
5070 return true;
5071}
5072
5073VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
5074 VkDevice device,
5075 VkPipelineCache pipelineCache,
5076 uint32_t count,
5077 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5078 VkPipeline* pPipelines)
5079{
5080 PreCreateGraphicsPipelines(device, pCreateInfos);
5081
5082 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5083
5084 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
5085
5086 return result;
5087}
5088
5089bool PreCreateComputePipelines(
5090 VkDevice device,
5091 const VkComputePipelineCreateInfo* pCreateInfos)
5092{
5093 if(pCreateInfos != nullptr)
5094 {
5095 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
5096 {
5097 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5098 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
5099 return false;
5100 }
5101 if(pCreateInfos->cs.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
5102 {
5103 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5104 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
5105 return false;
5106 }
5107 if(pCreateInfos->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5108 pCreateInfos->cs.stage > VK_SHADER_STAGE_END_RANGE)
5109 {
5110 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5111 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
5112 return false;
5113 }
5114 if(pCreateInfos->cs.pSpecializationInfo != nullptr)
5115 {
5116 if(pCreateInfos->cs.pSpecializationInfo->pMap != nullptr)
5117 {
5118 }
5119 if(pCreateInfos->cs.pSpecializationInfo->pData != nullptr)
5120 {
5121 }
5122 }
5123 }
5124
5125 return true;
5126}
5127
5128bool PostCreateComputePipelines(
5129 VkDevice device,
5130 VkPipelineCache pipelineCache,
5131 uint32_t count,
5132 VkPipeline* pPipelines,
5133 VkResult result)
5134{
5135
5136
5137
5138 if(pPipelines != nullptr)
5139 {
5140 }
5141
5142 if(result < VK_SUCCESS)
5143 {
5144 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
5145 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5146 return false;
5147 }
5148
5149 return true;
5150}
5151
5152VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
5153 VkDevice device,
5154 VkPipelineCache pipelineCache,
5155 uint32_t count,
5156 const VkComputePipelineCreateInfo* pCreateInfos,
5157 VkPipeline* pPipelines)
5158{
5159 PreCreateComputePipelines(device, pCreateInfos);
5160
5161 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5162
5163 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
5164
5165 return result;
5166}
5167
Tony Barboure307f582015-07-10 15:29:03 -06005168bool PostDestroyPipeline(
5169 VkDevice device,
5170 VkPipeline pipeline,
5171 VkResult result)
5172{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005173
5174
5175 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06005176 {
5177 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
5178 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5179 return false;
5180 }
5181
5182 return true;
5183}
5184
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005185VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5186 VkDevice device,
5187 VkPipeline pipeline)
5188{
5189 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5190
5191 PostDestroyPipeline(device, pipeline, result);
5192
5193 return result;
5194}
5195
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005196bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005197 VkDevice device,
5198 const VkPipelineLayoutCreateInfo* pCreateInfo)
5199{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005200 if(pCreateInfo != nullptr)
5201 {
5202 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005203 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005204 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005205 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5206 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005207 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005208 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005209 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005210 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005211 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005212 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005213 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005214 }
5215
5216 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005217}
5218
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005219bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005220 VkDevice device,
5221 VkPipelineLayout* pPipelineLayout,
5222 VkResult result)
5223{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005224
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005225 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005226 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005227 }
5228
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005229 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005230 {
5231 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005232 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5233 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005234 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005235
5236 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005237}
5238
5239VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5240 VkDevice device,
5241 const VkPipelineLayoutCreateInfo* pCreateInfo,
5242 VkPipelineLayout* pPipelineLayout)
5243{
5244 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005245
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005246 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5247
5248 PostCreatePipelineLayout(device, pPipelineLayout, result);
5249
5250 return result;
5251}
5252
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005253bool PostDestroyPipelineLayout(
5254 VkDevice device,
5255 VkPipelineLayout pipelineLayout,
5256 VkResult result)
5257{
5258
5259
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005260 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005261 {
5262 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5263 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5264 return false;
5265 }
5266
5267 return true;
5268}
5269
5270VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5271 VkDevice device,
5272 VkPipelineLayout pipelineLayout)
5273{
5274 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5275
5276 PostDestroyPipelineLayout(device, pipelineLayout, result);
5277
5278 return result;
5279}
5280
5281bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005282 VkDevice device,
5283 const VkSamplerCreateInfo* pCreateInfo)
5284{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005285 if(pCreateInfo != nullptr)
5286 {
5287 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005288 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005289 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005290 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005291 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005292 }
5293 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5294 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5295 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005296 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005297 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005298 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005299 }
5300 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5301 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5302 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005303 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005304 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005305 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005306 }
5307 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5308 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5309 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005310 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005311 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005312 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005313 }
5314 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5315 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5316 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005317 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005318 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005319 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005320 }
5321 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5322 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5323 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005325 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005326 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005327 }
5328 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5329 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5330 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005331 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005332 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005333 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005334 }
5335 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5336 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5337 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005338 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005339 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005340 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005341 }
5342 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5343 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5344 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005345 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005346 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005347 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005348 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005349 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005350
5351 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005352}
5353
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005354bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005355 VkDevice device,
5356 VkSampler* pSampler,
5357 VkResult result)
5358{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005359
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005360 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005361 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005362 }
5363
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005364 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005365 {
5366 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5368 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005369 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005370
5371 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005372}
5373
5374VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5375 VkDevice device,
5376 const VkSamplerCreateInfo* pCreateInfo,
5377 VkSampler* pSampler)
5378{
5379 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005380
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005381 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5382
5383 PostCreateSampler(device, pSampler, result);
5384
5385 return result;
5386}
5387
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005388bool PostDestroySampler(
5389 VkDevice device,
5390 VkSampler sampler,
5391 VkResult result)
5392{
5393
5394
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005395 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005396 {
5397 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5398 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5399 return false;
5400 }
5401
5402 return true;
5403}
5404
5405VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5406 VkDevice device,
5407 VkSampler sampler)
5408{
5409 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5410
5411 PostDestroySampler(device, sampler, result);
5412
5413 return result;
5414}
5415
5416bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005417 VkDevice device,
5418 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5419{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005420 if(pCreateInfo != nullptr)
5421 {
5422 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005423 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005424 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005425 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005426 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005427 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005428 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005429 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005430 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5431 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5432 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005433 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005434 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005435 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005436 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005437 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005438 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005439 }
5440 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005441 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005442
5443 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005444}
5445
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005446bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005447 VkDevice device,
5448 VkDescriptorSetLayout* pSetLayout,
5449 VkResult result)
5450{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005451
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005452 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005453 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005454 }
5455
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005456 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005457 {
5458 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5460 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005461 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005462
5463 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005464}
5465
5466VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5467 VkDevice device,
5468 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5469 VkDescriptorSetLayout* pSetLayout)
5470{
5471 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005472
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005473 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5474
5475 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5476
5477 return result;
5478}
5479
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005480bool PostDestroyDescriptorSetLayout(
5481 VkDevice device,
5482 VkDescriptorSetLayout descriptorSetLayout,
5483 VkResult result)
5484{
5485
5486
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005487 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005488 {
5489 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5491 return false;
5492 }
5493
5494 return true;
5495}
5496
5497VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5498 VkDevice device,
5499 VkDescriptorSetLayout descriptorSetLayout)
5500{
5501 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5502
5503 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5504
5505 return result;
5506}
5507
5508bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005509 VkDevice device,
5510 const VkDescriptorPoolCreateInfo* pCreateInfo)
5511{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005512 if(pCreateInfo != nullptr)
5513 {
5514 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005515 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005516 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005517 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005518 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005520 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005521 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005522 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5523 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5524 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005525 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005526 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005527 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005528 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005529 }
5530 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005531
5532 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005533}
5534
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005535bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005536 VkDevice device,
5537 VkDescriptorPoolUsage poolUsage,
5538 uint32_t maxSets,
5539 VkDescriptorPool* pDescriptorPool,
5540 VkResult result)
5541{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005542
5543 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5544 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5545 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005546 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005547 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005548 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005549 }
5550
5551
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005552 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005553 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005554 }
5555
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005556 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005557 {
5558 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5560 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005561 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005562
5563 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005564}
5565
5566VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5567 VkDevice device,
5568 VkDescriptorPoolUsage poolUsage,
5569 uint32_t maxSets,
5570 const VkDescriptorPoolCreateInfo* pCreateInfo,
5571 VkDescriptorPool* pDescriptorPool)
5572{
5573 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005574
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005575 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5576
5577 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5578
5579 return result;
5580}
5581
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005582bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005583 VkDevice device,
5584 VkDescriptorPool descriptorPool,
5585 VkResult result)
5586{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005587
5588
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005589 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005590 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005591 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5592 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5593 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005594 }
5595
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005596 return true;
5597}
5598
5599VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5600 VkDevice device,
5601 VkDescriptorPool descriptorPool)
5602{
5603 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5604
5605 PostDestroyDescriptorPool(device, descriptorPool, result);
5606
5607 return result;
5608}
5609
5610bool PostResetDescriptorPool(
5611 VkDevice device,
5612 VkDescriptorPool descriptorPool,
5613 VkResult result)
5614{
5615
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005616
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005617 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005618 {
5619 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005620 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5621 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005622 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005623
5624 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005625}
5626
5627VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5628 VkDevice device,
5629 VkDescriptorPool descriptorPool)
5630{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005631 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5632
5633 PostResetDescriptorPool(device, descriptorPool, result);
5634
5635 return result;
5636}
5637
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005638bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005639 VkDevice device,
5640 const VkDescriptorSetLayout* pSetLayouts)
5641{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005642 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005643 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005644 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005645
5646 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005647}
5648
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005649bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005650 VkDevice device,
5651 VkDescriptorPool descriptorPool,
5652 VkDescriptorSetUsage setUsage,
5653 uint32_t count,
5654 VkDescriptorSet* pDescriptorSets,
5655 uint32_t* pCount,
5656 VkResult result)
5657{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005658
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005659
5660 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5661 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5662 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005663 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005664 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005665 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005666 }
5667
5668
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005669 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005670 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005671 }
5672
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005673 if(pCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005674 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005675 }
5676
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005677 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005678 {
5679 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005680 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5681 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005682 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005683
5684 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005685}
5686
5687VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5688 VkDevice device,
5689 VkDescriptorPool descriptorPool,
5690 VkDescriptorSetUsage setUsage,
5691 uint32_t count,
5692 const VkDescriptorSetLayout* pSetLayouts,
5693 VkDescriptorSet* pDescriptorSets,
5694 uint32_t* pCount)
5695{
5696 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005697
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005698 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
5699
5700 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, pCount, result);
5701
5702 return result;
5703}
5704
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005705bool PreFreeDescriptorSets(
5706 VkDevice device,
5707 const VkDescriptorSet* pDescriptorSets)
5708{
5709 if(pDescriptorSets != nullptr)
5710 {
5711 }
5712
5713 return true;
5714}
5715
5716bool PostFreeDescriptorSets(
5717 VkDevice device,
5718 VkDescriptorPool descriptorPool,
5719 uint32_t count,
5720 VkResult result)
5721{
5722
5723
5724
5725 if(result < VK_SUCCESS)
5726 {
5727 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5728 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5729 return false;
5730 }
5731
5732 return true;
5733}
5734
5735VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
5736 VkDevice device,
5737 VkDescriptorPool descriptorPool,
5738 uint32_t count,
5739 const VkDescriptorSet* pDescriptorSets)
5740{
5741 PreFreeDescriptorSets(device, pDescriptorSets);
5742
5743 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
5744
5745 PostFreeDescriptorSets(device, descriptorPool, count, result);
5746
5747 return result;
5748}
5749
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005750bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005751 VkDevice device,
5752 const VkWriteDescriptorSet* pDescriptorWrites,
5753 const VkCopyDescriptorSet* pDescriptorCopies)
5754{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005755 if(pDescriptorWrites != nullptr)
5756 {
5757 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005758 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005759 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005760 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005761 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005762 }
5763 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5764 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5765 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005766 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005767 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005768 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005769 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005770 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005771 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5773 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5774 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005776 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005777 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005778 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005779 }
5780 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005781
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005782 if(pDescriptorCopies != nullptr)
5783 {
5784 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005785 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005786 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005787 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005788 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005789 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005790 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005791
5792 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005793}
5794
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005795bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005796 VkDevice device,
5797 uint32_t writeCount,
5798 uint32_t copyCount,
5799 VkResult result)
5800{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005801
5802
5803
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005804 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005805 {
5806 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005807 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5808 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005809 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005810
5811 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005812}
5813
5814VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
5815 VkDevice device,
5816 uint32_t writeCount,
5817 const VkWriteDescriptorSet* pDescriptorWrites,
5818 uint32_t copyCount,
5819 const VkCopyDescriptorSet* pDescriptorCopies)
5820{
5821 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005822
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005823 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
5824
5825 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
5826
5827 return result;
5828}
5829
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005830bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005831 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005832 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005833{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005834 if(pCreateInfo != nullptr)
5835 {
5836 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005837 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005839 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005840 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005841 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005842 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005843 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005844 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005845 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005846 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005847 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005848 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005849
5850 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005851}
5852
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005853bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005854 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005855 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005856 VkResult result)
5857{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005858
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005859 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005860 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005861 }
5862
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005863 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005864 {
5865 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005866 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5867 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005868 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005869
5870 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005871}
5872
5873VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5874 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005875 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5876 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005877{
5878 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005879
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005880 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5881
5882 PostCreateDynamicViewportState(device, pState, result);
5883
5884 return result;
5885}
5886
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005887bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005888 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005889 VkDynamicViewportState dynamicViewportState,
5890 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005891{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005892
5893
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005894 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005895 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005896 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
5897 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5898 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005899 }
5900
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005901 return true;
5902}
5903
5904VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
5905 VkDevice device,
5906 VkDynamicViewportState dynamicViewportState)
5907{
5908 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
5909
5910 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
5911
5912 return result;
5913}
5914
5915bool PreCreateDynamicRasterState(
5916 VkDevice device,
5917 const VkDynamicRasterStateCreateInfo* pCreateInfo)
5918{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005919 if(pCreateInfo != nullptr)
5920 {
5921 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_RASTER_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005922 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005923 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005924 "vkCreateDynamicRasterState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005925 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005926 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005927 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005928
5929 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005930}
5931
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005932bool PostCreateDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005933 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005934 VkDynamicRasterState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005935 VkResult result)
5936{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005937
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005938 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005939 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005940 }
5941
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005942 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005943 {
5944 std::string reason = "vkCreateDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005945 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5946 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005947 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005948
5949 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005950}
5951
5952VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(
5953 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005954 const VkDynamicRasterStateCreateInfo* pCreateInfo,
5955 VkDynamicRasterState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005956{
5957 PreCreateDynamicRasterState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005958
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005959 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterState(device, pCreateInfo, pState);
5960
5961 PostCreateDynamicRasterState(device, pState, result);
5962
5963 return result;
5964}
5965
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005966bool PostDestroyDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005967 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005968 VkDynamicRasterState dynamicRasterState,
5969 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005970{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005971
5972
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005973 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005974 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005975 std::string reason = "vkDestroyDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
5976 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5977 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005978 }
5979
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005980 return true;
5981}
5982
5983VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicRasterState(
5984 VkDevice device,
5985 VkDynamicRasterState dynamicRasterState)
5986{
5987 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicRasterState(device, dynamicRasterState);
5988
5989 PostDestroyDynamicRasterState(device, dynamicRasterState, result);
5990
5991 return result;
5992}
5993
5994bool PreCreateDynamicColorBlendState(
5995 VkDevice device,
5996 const VkDynamicColorBlendStateCreateInfo* pCreateInfo)
5997{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005998 if(pCreateInfo != nullptr)
5999 {
6000 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_COLOR_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006001 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006002 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006003 "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006004 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006005 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006006 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006007
6008 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006009}
6010
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006011bool PostCreateDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006012 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006013 VkDynamicColorBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006014 VkResult result)
6015{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006016
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006017 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006018 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006019 }
6020
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006021 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006022 {
6023 std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006024 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6025 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006026 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006027
6028 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006029}
6030
6031VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
6032 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006033 const VkDynamicColorBlendStateCreateInfo* pCreateInfo,
6034 VkDynamicColorBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006035{
6036 PreCreateDynamicColorBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006037
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006038 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState);
6039
6040 PostCreateDynamicColorBlendState(device, pState, result);
6041
6042 return result;
6043}
6044
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006045bool PostDestroyDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006047 VkDynamicColorBlendState dynamicColorBlendState,
6048 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006049{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006050
6051
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006052 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006053 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006054 std::string reason = "vkDestroyDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
6055 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6056 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006057 }
6058
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006059 return true;
6060}
6061
6062VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicColorBlendState(
6063 VkDevice device,
6064 VkDynamicColorBlendState dynamicColorBlendState)
6065{
6066 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicColorBlendState(device, dynamicColorBlendState);
6067
6068 PostDestroyDynamicColorBlendState(device, dynamicColorBlendState, result);
6069
6070 return result;
6071}
6072
6073bool PreCreateDynamicDepthStencilState(
6074 VkDevice device,
6075 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo)
6076{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006077 if(pCreateInfo != nullptr)
6078 {
6079 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_STENCIL_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006080 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006081 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006082 "vkCreateDynamicDepthStencilState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006083 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006084 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006085 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006086
6087 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006088}
6089
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006090bool PostCreateDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006091 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006092 VkDynamicDepthStencilState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006093 VkResult result)
6094{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006095
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006096 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006097 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006098 }
6099
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006100 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006101 {
6102 std::string reason = "vkCreateDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006103 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6104 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006105 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006106
6107 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006108}
6109
6110VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(
6111 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006112 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo,
6113 VkDynamicDepthStencilState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006114{
6115 PreCreateDynamicDepthStencilState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006116
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006117 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
6118
6119 PostCreateDynamicDepthStencilState(device, pState, result);
6120
6121 return result;
6122}
6123
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006124bool PostDestroyDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006125 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006126 VkDynamicDepthStencilState dynamicDepthStencilState,
6127 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006128{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006129
6130
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006131 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006132 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006133 std::string reason = "vkDestroyDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
6134 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6135 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006136 }
6137
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006138 return true;
6139}
6140
6141VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthStencilState(
6142 VkDevice device,
6143 VkDynamicDepthStencilState dynamicDepthStencilState)
6144{
6145 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthStencilState(device, dynamicDepthStencilState);
6146
6147 PostDestroyDynamicDepthStencilState(device, dynamicDepthStencilState, result);
6148
6149 return result;
6150}
6151
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006152bool PreCreateFramebuffer(
6153 VkDevice device,
6154 const VkFramebufferCreateInfo* pCreateInfo)
6155{
6156 if(pCreateInfo != nullptr)
6157 {
6158 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
6159 {
6160 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6161 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6162 return false;
6163 }
6164 if(pCreateInfo->pAttachments != nullptr)
6165 {
6166 if(pCreateInfo->pAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6167 pCreateInfo->pAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6168 {
6169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6170 "vkCreateFramebuffer parameter, VkImageLayout pCreateInfo->pAttachments->layout, is an unrecognized enumerator");
6171 return false;
6172 }
6173 }
6174 }
6175
6176 return true;
6177}
6178
6179bool PostCreateFramebuffer(
6180 VkDevice device,
6181 VkFramebuffer* pFramebuffer,
6182 VkResult result)
6183{
6184
6185 if(pFramebuffer != nullptr)
6186 {
6187 }
6188
6189 if(result < VK_SUCCESS)
6190 {
6191 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6192 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6193 return false;
6194 }
6195
6196 return true;
6197}
6198
6199VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
6200 VkDevice device,
6201 const VkFramebufferCreateInfo* pCreateInfo,
6202 VkFramebuffer* pFramebuffer)
6203{
6204 PreCreateFramebuffer(device, pCreateInfo);
6205
6206 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
6207
6208 PostCreateFramebuffer(device, pFramebuffer, result);
6209
6210 return result;
6211}
6212
6213bool PostDestroyFramebuffer(
6214 VkDevice device,
6215 VkFramebuffer framebuffer,
6216 VkResult result)
6217{
6218
6219
6220 if(result < VK_SUCCESS)
6221 {
6222 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6223 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6224 return false;
6225 }
6226
6227 return true;
6228}
6229
6230VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
6231 VkDevice device,
6232 VkFramebuffer framebuffer)
6233{
6234 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
6235
6236 PostDestroyFramebuffer(device, framebuffer, result);
6237
6238 return result;
6239}
6240
6241bool PreCreateRenderPass(
6242 VkDevice device,
6243 const VkRenderPassCreateInfo* pCreateInfo)
6244{
6245 if(pCreateInfo != nullptr)
6246 {
6247 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
6248 {
6249 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6250 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6251 return false;
6252 }
6253 if(pCreateInfo->pAttachments != nullptr)
6254 {
6255 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
6256 {
6257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6258 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
6259 return false;
6260 }
6261 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
6262 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
6263 {
6264 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6265 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
6266 return false;
6267 }
6268 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6269 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6270 {
6271 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6272 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
6273 return false;
6274 }
6275 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6276 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6277 {
6278 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6279 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
6280 return false;
6281 }
6282 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6283 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6284 {
6285 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6286 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
6287 return false;
6288 }
6289 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6290 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6291 {
6292 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6293 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
6294 return false;
6295 }
6296 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6297 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
6298 {
6299 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6300 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
6301 return false;
6302 }
6303 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6304 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
6305 {
6306 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6307 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
6308 return false;
6309 }
6310 }
6311 if(pCreateInfo->pSubpasses != nullptr)
6312 {
6313 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
6314 {
6315 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6316 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
6317 return false;
6318 }
6319 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6320 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6321 {
6322 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6323 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
6324 return false;
6325 }
6326 if(pCreateInfo->pSubpasses->inputAttachments != nullptr)
6327 {
6328 if(pCreateInfo->pSubpasses->inputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6329 pCreateInfo->pSubpasses->inputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6330 {
6331 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6332 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->inputAttachments->layout, is an unrecognized enumerator");
6333 return false;
6334 }
6335 }
6336 if(pCreateInfo->pSubpasses->colorAttachments != nullptr)
6337 {
6338 if(pCreateInfo->pSubpasses->colorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6339 pCreateInfo->pSubpasses->colorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6340 {
6341 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6342 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->colorAttachments->layout, is an unrecognized enumerator");
6343 return false;
6344 }
6345 }
6346 if(pCreateInfo->pSubpasses->resolveAttachments != nullptr)
6347 {
6348 if(pCreateInfo->pSubpasses->resolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6349 pCreateInfo->pSubpasses->resolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6350 {
6351 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6352 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->resolveAttachments->layout, is an unrecognized enumerator");
6353 return false;
6354 }
6355 }
6356 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6357 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
6358 {
6359 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6360 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
6361 return false;
6362 }
6363 if(pCreateInfo->pSubpasses->preserveAttachments != nullptr)
6364 {
6365 if(pCreateInfo->pSubpasses->preserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6366 pCreateInfo->pSubpasses->preserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6367 {
6368 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6369 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->preserveAttachments->layout, is an unrecognized enumerator");
6370 return false;
6371 }
6372 }
6373 }
6374 if(pCreateInfo->pDependencies != nullptr)
6375 {
6376 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
6377 {
6378 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6379 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
6380 return false;
6381 }
6382 }
6383 }
6384
6385 return true;
6386}
6387
6388bool PostCreateRenderPass(
6389 VkDevice device,
6390 VkRenderPass* pRenderPass,
6391 VkResult result)
6392{
6393
6394 if(pRenderPass != nullptr)
6395 {
6396 }
6397
6398 if(result < VK_SUCCESS)
6399 {
6400 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6401 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6402 return false;
6403 }
6404
6405 return true;
6406}
6407
6408VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
6409 VkDevice device,
6410 const VkRenderPassCreateInfo* pCreateInfo,
6411 VkRenderPass* pRenderPass)
6412{
6413 PreCreateRenderPass(device, pCreateInfo);
6414
6415 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
6416
6417 PostCreateRenderPass(device, pRenderPass, result);
6418
6419 return result;
6420}
6421
6422bool PostDestroyRenderPass(
6423 VkDevice device,
6424 VkRenderPass renderPass,
6425 VkResult result)
6426{
6427
6428
6429 if(result < VK_SUCCESS)
6430 {
6431 std::string reason = "vkDestroyRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6432 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6433 return false;
6434 }
6435
6436 return true;
6437}
6438
6439VK_LAYER_EXPORT VkResult VKAPI vkDestroyRenderPass(
6440 VkDevice device,
6441 VkRenderPass renderPass)
6442{
6443 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass);
6444
6445 PostDestroyRenderPass(device, renderPass, result);
6446
6447 return result;
6448}
6449
6450bool PostGetRenderAreaGranularity(
6451 VkDevice device,
6452 VkRenderPass renderPass,
6453 VkExtent2D* pGranularity,
6454 VkResult result)
6455{
6456
6457
6458 if(pGranularity != nullptr)
6459 {
6460 }
6461
6462 if(result < VK_SUCCESS)
6463 {
6464 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
6465 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6466 return false;
6467 }
6468
6469 return true;
6470}
6471
6472VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
6473 VkDevice device,
6474 VkRenderPass renderPass,
6475 VkExtent2D* pGranularity)
6476{
6477 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
6478
6479 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
6480
6481 return result;
6482}
6483
6484bool PreCreateCommandPool(
6485 VkDevice device,
6486 const VkCmdPoolCreateInfo* pCreateInfo)
6487{
6488 if(pCreateInfo != nullptr)
6489 {
6490 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
6491 {
6492 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6493 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6494 return false;
6495 }
6496 }
6497
6498 return true;
6499}
6500
6501bool PostCreateCommandPool(
6502 VkDevice device,
6503 VkCmdPool* pCmdPool,
6504 VkResult result)
6505{
6506
6507 if(pCmdPool != nullptr)
6508 {
6509 }
6510
6511 if(result < VK_SUCCESS)
6512 {
6513 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6514 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6515 return false;
6516 }
6517
6518 return true;
6519}
6520
6521VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
6522 VkDevice device,
6523 const VkCmdPoolCreateInfo* pCreateInfo,
6524 VkCmdPool* pCmdPool)
6525{
6526 PreCreateCommandPool(device, pCreateInfo);
6527
6528 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
6529
6530 PostCreateCommandPool(device, pCmdPool, result);
6531
6532 return result;
6533}
6534
6535bool PostDestroyCommandPool(
6536 VkDevice device,
6537 VkCmdPool cmdPool,
6538 VkResult result)
6539{
6540
6541
6542 if(result < VK_SUCCESS)
6543 {
6544 std::string reason = "vkDestroyCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6545 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6546 return false;
6547 }
6548
6549 return true;
6550}
6551
6552VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandPool(
6553 VkDevice device,
6554 VkCmdPool cmdPool)
6555{
6556 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, cmdPool);
6557
6558 PostDestroyCommandPool(device, cmdPool, result);
6559
6560 return result;
6561}
6562
6563bool PostResetCommandPool(
6564 VkDevice device,
6565 VkCmdPool cmdPool,
6566 VkCmdPoolResetFlags flags,
6567 VkResult result)
6568{
6569
6570
6571
6572 if(result < VK_SUCCESS)
6573 {
6574 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6575 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6576 return false;
6577 }
6578
6579 return true;
6580}
6581
6582VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
6583 VkDevice device,
6584 VkCmdPool cmdPool,
6585 VkCmdPoolResetFlags flags)
6586{
6587 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
6588
6589 PostResetCommandPool(device, cmdPool, flags, result);
6590
6591 return result;
6592}
6593
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006594bool PreCreateCommandBuffer(
6595 VkDevice device,
6596 const VkCmdBufferCreateInfo* pCreateInfo)
6597{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006598 if(pCreateInfo != nullptr)
6599 {
6600 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006601 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006602 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006603 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006604 return false;
6605 }
6606 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6607 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6608 {
6609 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006610 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006611 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006612 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006613 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006614
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006615 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006616}
6617
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006618bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006619 VkDevice device,
6620 VkCmdBuffer* pCmdBuffer,
6621 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006622{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006623
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006624 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006625 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006626 }
6627
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006628 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006629 {
6630 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006631 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6632 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006633 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006634
6635 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006636}
6637
6638VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6639 VkDevice device,
6640 const VkCmdBufferCreateInfo* pCreateInfo,
6641 VkCmdBuffer* pCmdBuffer)
6642{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006643 PreCreateCommandBuffer(device, pCreateInfo);
6644
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006645 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6646
6647 PostCreateCommandBuffer(device, pCmdBuffer, result);
6648
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006649 return result;
6650}
6651
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006652bool PostDestroyCommandBuffer(
6653 VkDevice device,
6654 VkCmdBuffer commandBuffer,
6655 VkResult result)
6656{
6657
6658
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006659 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006660 {
6661 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6662 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6663 return false;
6664 }
6665
6666 return true;
6667}
6668
6669VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6670 VkDevice device,
6671 VkCmdBuffer commandBuffer)
6672{
6673 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6674
6675 PostDestroyCommandBuffer(device, commandBuffer, result);
6676
6677 return result;
6678}
6679
6680bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006681 VkCmdBuffer cmdBuffer,
6682 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006683{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006684 if(pBeginInfo != nullptr)
6685 {
6686 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006687 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006688 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006689 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006690 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006691 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006692 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006693
6694 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006695}
6696
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006697bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006698 VkCmdBuffer cmdBuffer,
6699 VkResult result)
6700{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006701
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006702 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006703 {
6704 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006705 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6706 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006707 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006708
6709 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006710}
6711
6712VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6713 VkCmdBuffer cmdBuffer,
6714 const VkCmdBufferBeginInfo* pBeginInfo)
6715{
6716 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006717
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006718 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6719
6720 PostBeginCommandBuffer(cmdBuffer, result);
6721
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006722 return result;
6723}
6724
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006725bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006726 VkCmdBuffer cmdBuffer,
6727 VkResult result)
6728{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006730 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006731 {
6732 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006733 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6734 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006735 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006736
6737 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006738}
6739
6740VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6741 VkCmdBuffer cmdBuffer)
6742{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006743 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6744
6745 PostEndCommandBuffer(cmdBuffer, result);
6746
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006747 return result;
6748}
6749
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006750bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006751 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006752 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006753 VkResult result)
6754{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006755
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006756
6757 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006758 {
6759 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006760 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6761 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006762 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006763
6764 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006765}
6766
6767VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006768 VkCmdBuffer cmdBuffer,
6769 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006770{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006771 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006772
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006773 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006774
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006775 return result;
6776}
6777
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006778bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006779 VkCmdBuffer cmdBuffer,
6780 VkPipelineBindPoint pipelineBindPoint,
6781 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006782{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006783
6784 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6785 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6786 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006787 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006788 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006789 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006790 }
6791
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006792
6793 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006794}
6795
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006796VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6797 VkCmdBuffer cmdBuffer,
6798 VkPipelineBindPoint pipelineBindPoint,
6799 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006800{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006801 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6802
6803 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6804}
6805
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006806bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006807 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006808 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006809{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006810
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006811
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006812 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006813}
6814
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006815VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006816 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006817 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006818{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006819 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006820
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006821 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006822}
6823
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006824bool PostCmdBindDynamicRasterState(
6825 VkCmdBuffer cmdBuffer,
6826 VkDynamicRasterState dynamicRasterState)
6827{
6828
6829
6830 return true;
6831}
6832
6833VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicRasterState(
6834 VkCmdBuffer cmdBuffer,
6835 VkDynamicRasterState dynamicRasterState)
6836{
6837 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6838
6839 PostCmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6840}
6841
6842bool PostCmdBindDynamicColorBlendState(
6843 VkCmdBuffer cmdBuffer,
6844 VkDynamicColorBlendState dynamicColorBlendState)
6845{
6846
6847
6848 return true;
6849}
6850
6851VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicColorBlendState(
6852 VkCmdBuffer cmdBuffer,
6853 VkDynamicColorBlendState dynamicColorBlendState)
6854{
6855 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6856
6857 PostCmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6858}
6859
6860bool PostCmdBindDynamicDepthStencilState(
6861 VkCmdBuffer cmdBuffer,
6862 VkDynamicDepthStencilState dynamicDepthStencilState)
6863{
6864
6865
6866 return true;
6867}
6868
6869VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthStencilState(
6870 VkCmdBuffer cmdBuffer,
6871 VkDynamicDepthStencilState dynamicDepthStencilState)
6872{
6873 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6874
6875 PostCmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6876}
6877
6878bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006879 VkCmdBuffer cmdBuffer,
6880 const VkDescriptorSet* pDescriptorSets,
6881 const uint32_t* pDynamicOffsets)
6882{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006883 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006884 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006885 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006886
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006887 if(pDynamicOffsets != nullptr)
6888 {
6889 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006890
6891 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006892}
6893
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006894bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006895 VkCmdBuffer cmdBuffer,
6896 VkPipelineBindPoint pipelineBindPoint,
6897 VkPipelineLayout layout,
6898 uint32_t firstSet,
6899 uint32_t setCount,
6900 uint32_t dynamicOffsetCount)
6901{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006902
6903 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6904 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6905 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006906 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006907 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006908 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006909 }
6910
6911
6912
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006913
6914
6915 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006916}
6917
6918VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6919 VkCmdBuffer cmdBuffer,
6920 VkPipelineBindPoint pipelineBindPoint,
6921 VkPipelineLayout layout,
6922 uint32_t firstSet,
6923 uint32_t setCount,
6924 const VkDescriptorSet* pDescriptorSets,
6925 uint32_t dynamicOffsetCount,
6926 const uint32_t* pDynamicOffsets)
6927{
6928 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006929
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006930 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6931
6932 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6933}
6934
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006935bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006936 VkCmdBuffer cmdBuffer,
6937 VkBuffer buffer,
6938 VkDeviceSize offset,
6939 VkIndexType indexType)
6940{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006941
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006942
6943
6944 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6945 indexType > VK_INDEX_TYPE_END_RANGE)
6946 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006947 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006948 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006949 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006950 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006951
6952 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006953}
6954
6955VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6956 VkCmdBuffer cmdBuffer,
6957 VkBuffer buffer,
6958 VkDeviceSize offset,
6959 VkIndexType indexType)
6960{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006961 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6962
6963 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6964}
6965
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006966bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006967 VkCmdBuffer cmdBuffer,
6968 const VkBuffer* pBuffers,
6969 const VkDeviceSize* pOffsets)
6970{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006971 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006972 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006973 }
6974
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006975 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006976 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006977 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006978
6979 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006980}
6981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006982bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006983 VkCmdBuffer cmdBuffer,
6984 uint32_t startBinding,
6985 uint32_t bindingCount)
6986{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006987
6988
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006989
6990 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006991}
6992
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06006993VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006994 VkCmdBuffer cmdBuffer,
6995 uint32_t startBinding,
6996 uint32_t bindingCount,
6997 const VkBuffer* pBuffers,
6998 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006999{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007000 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007001
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007002 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
7003
7004 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007005}
7006
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007007bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007008 VkCmdBuffer cmdBuffer,
7009 uint32_t firstVertex,
7010 uint32_t vertexCount,
7011 uint32_t firstInstance,
7012 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007013{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007014
7015
7016
7017
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007018
7019 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007020}
7021
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007022VK_LAYER_EXPORT void VKAPI vkCmdDraw(
7023 VkCmdBuffer cmdBuffer,
7024 uint32_t firstVertex,
7025 uint32_t vertexCount,
7026 uint32_t firstInstance,
7027 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007028{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007029 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
7030
7031 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007032}
7033
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007034bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007035 VkCmdBuffer cmdBuffer,
7036 uint32_t firstIndex,
7037 uint32_t indexCount,
7038 int32_t vertexOffset,
7039 uint32_t firstInstance,
7040 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007041{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007042
7043
7044
7045
7046
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007047
7048 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007049}
7050
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007051VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7052 VkCmdBuffer cmdBuffer,
7053 uint32_t firstIndex,
7054 uint32_t indexCount,
7055 int32_t vertexOffset,
7056 uint32_t firstInstance,
7057 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007058{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007059 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7060
7061 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7062}
7063
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007064bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007065 VkCmdBuffer cmdBuffer,
7066 VkBuffer buffer,
7067 VkDeviceSize offset,
7068 uint32_t count,
7069 uint32_t stride)
7070{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007071
7072
7073
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007074
7075
7076 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007077}
7078
7079VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7080 VkCmdBuffer cmdBuffer,
7081 VkBuffer buffer,
7082 VkDeviceSize offset,
7083 uint32_t count,
7084 uint32_t stride)
7085{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007086 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7087
7088 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7089}
7090
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007091bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007092 VkCmdBuffer cmdBuffer,
7093 VkBuffer buffer,
7094 VkDeviceSize offset,
7095 uint32_t count,
7096 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007097{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007098
7099
7100
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007101
7102
7103 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007104}
7105
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007106VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7107 VkCmdBuffer cmdBuffer,
7108 VkBuffer buffer,
7109 VkDeviceSize offset,
7110 uint32_t count,
7111 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007112{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007113 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7114
7115 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7116}
7117
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007118bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007119 VkCmdBuffer cmdBuffer,
7120 uint32_t x,
7121 uint32_t y,
7122 uint32_t z)
7123{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007124
7125
7126
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007127
7128 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007129}
7130
7131VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7132 VkCmdBuffer cmdBuffer,
7133 uint32_t x,
7134 uint32_t y,
7135 uint32_t z)
7136{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007137 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7138
7139 PostCmdDispatch(cmdBuffer, x, y, z);
7140}
7141
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007142bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007143 VkCmdBuffer cmdBuffer,
7144 VkBuffer buffer,
7145 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007146{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007147
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007148
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007149
7150 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007151}
7152
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007153VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7154 VkCmdBuffer cmdBuffer,
7155 VkBuffer buffer,
7156 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007157{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007158 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7159
7160 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007161}
7162
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007163bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007164 VkCmdBuffer cmdBuffer,
7165 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007166{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007167 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007168 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007169 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007170
7171 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007172}
7173
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007174bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007175 VkCmdBuffer cmdBuffer,
7176 VkBuffer srcBuffer,
7177 VkBuffer destBuffer,
7178 uint32_t regionCount)
7179{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007180
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007181
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007182
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007183
7184 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007185}
7186
7187VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7188 VkCmdBuffer cmdBuffer,
7189 VkBuffer srcBuffer,
7190 VkBuffer destBuffer,
7191 uint32_t regionCount,
7192 const VkBufferCopy* pRegions)
7193{
7194 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007195
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007196 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7197
7198 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7199}
7200
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007201bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007202 VkCmdBuffer cmdBuffer,
7203 const VkImageCopy* pRegions)
7204{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007205 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007206 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007207 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7208 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7209 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007210 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007211 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007212 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007213 }
7214 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7215 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7216 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007217 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007218 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007219 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007220 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007221 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007222
7223 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007224}
7225
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007226bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007227 VkCmdBuffer cmdBuffer,
7228 VkImage srcImage,
7229 VkImageLayout srcImageLayout,
7230 VkImage destImage,
7231 VkImageLayout destImageLayout,
7232 uint32_t regionCount)
7233{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007234
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007235
7236 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7237 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7238 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007239 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007240 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007241 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007242 }
7243
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007244
7245 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7246 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7247 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007248 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007249 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007250 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007251 }
7252
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007253
7254 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007255}
7256
7257VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7258 VkCmdBuffer cmdBuffer,
7259 VkImage srcImage,
7260 VkImageLayout srcImageLayout,
7261 VkImage destImage,
7262 VkImageLayout destImageLayout,
7263 uint32_t regionCount,
7264 const VkImageCopy* pRegions)
7265{
7266 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007267
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007268 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7269
7270 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7271}
7272
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007273bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007274 VkCmdBuffer cmdBuffer,
7275 const VkImageBlit* pRegions)
7276{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007277 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007278 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007279 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7280 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7281 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007282 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007283 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007284 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007285 }
7286 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7287 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7288 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007289 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007290 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007291 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007292 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007293 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007294
7295 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007296}
7297
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007298bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007299 VkCmdBuffer cmdBuffer,
7300 VkImage srcImage,
7301 VkImageLayout srcImageLayout,
7302 VkImage destImage,
7303 VkImageLayout destImageLayout,
7304 uint32_t regionCount,
7305 VkTexFilter filter)
7306{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007307
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007308
7309 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7310 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7311 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007312 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007313 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007314 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007315 }
7316
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007317
7318 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7319 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7320 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007321 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007322 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007323 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007324 }
7325
7326
7327 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7328 filter > VK_TEX_FILTER_END_RANGE)
7329 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007330 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007331 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007332 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007333 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007334
7335 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007336}
7337
7338VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7339 VkCmdBuffer cmdBuffer,
7340 VkImage srcImage,
7341 VkImageLayout srcImageLayout,
7342 VkImage destImage,
7343 VkImageLayout destImageLayout,
7344 uint32_t regionCount,
7345 const VkImageBlit* pRegions,
7346 VkTexFilter filter)
7347{
7348 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007349
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007350 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7351
7352 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7353}
7354
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007355bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007356 VkCmdBuffer cmdBuffer,
7357 const VkBufferImageCopy* pRegions)
7358{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007359 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007360 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007361 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7362 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7363 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007364 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007365 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007366 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007367 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007368 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007369
7370 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007371}
7372
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007373bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007374 VkCmdBuffer cmdBuffer,
7375 VkBuffer srcBuffer,
7376 VkImage destImage,
7377 VkImageLayout destImageLayout,
7378 uint32_t regionCount)
7379{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007380
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007381
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007382
7383 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7384 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7385 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007386 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007387 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007388 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007389 }
7390
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007391
7392 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007393}
7394
7395VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7396 VkCmdBuffer cmdBuffer,
7397 VkBuffer srcBuffer,
7398 VkImage destImage,
7399 VkImageLayout destImageLayout,
7400 uint32_t regionCount,
7401 const VkBufferImageCopy* pRegions)
7402{
7403 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007404
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007405 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7406
7407 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7408}
7409
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007410bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007411 VkCmdBuffer cmdBuffer,
7412 const VkBufferImageCopy* pRegions)
7413{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007414 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007415 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007416 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7417 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7418 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007419 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007420 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007421 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007422 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007423 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007424
7425 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007426}
7427
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007428bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007429 VkCmdBuffer cmdBuffer,
7430 VkImage srcImage,
7431 VkImageLayout srcImageLayout,
7432 VkBuffer destBuffer,
7433 uint32_t regionCount)
7434{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007435
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007436
7437 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7438 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7439 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007440 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007441 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007442 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007443 }
7444
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007445
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007446
7447 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007448}
7449
7450VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7451 VkCmdBuffer cmdBuffer,
7452 VkImage srcImage,
7453 VkImageLayout srcImageLayout,
7454 VkBuffer destBuffer,
7455 uint32_t regionCount,
7456 const VkBufferImageCopy* pRegions)
7457{
7458 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007459
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007460 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7461
7462 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7463}
7464
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007465bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007466 VkCmdBuffer cmdBuffer,
7467 const uint32_t* pData)
7468{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007469 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007470 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007471 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007472
7473 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007474}
7475
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007476bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007477 VkCmdBuffer cmdBuffer,
7478 VkBuffer destBuffer,
7479 VkDeviceSize destOffset,
7480 VkDeviceSize dataSize)
7481{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007482
7483
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007484
7485
7486 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007487}
7488
7489VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7490 VkCmdBuffer cmdBuffer,
7491 VkBuffer destBuffer,
7492 VkDeviceSize destOffset,
7493 VkDeviceSize dataSize,
7494 const uint32_t* pData)
7495{
7496 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007497
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007498 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7499
7500 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7501}
7502
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007503bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007504 VkCmdBuffer cmdBuffer,
7505 VkBuffer destBuffer,
7506 VkDeviceSize destOffset,
7507 VkDeviceSize fillSize,
7508 uint32_t data)
7509{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007510
7511
7512
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007513
7514
7515 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007516}
7517
7518VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7519 VkCmdBuffer cmdBuffer,
7520 VkBuffer destBuffer,
7521 VkDeviceSize destOffset,
7522 VkDeviceSize fillSize,
7523 uint32_t data)
7524{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007525 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7526
7527 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7528}
7529
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007530bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007531 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007532 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007533 const VkImageSubresourceRange* pRanges)
7534{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007535 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007536 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007537 }
7538
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007539 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007540 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007541 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7542 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7543 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007544 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007545 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007546 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007547 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007548 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007549
7550 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007551}
7552
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007553bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007554 VkCmdBuffer cmdBuffer,
7555 VkImage image,
7556 VkImageLayout imageLayout,
7557 uint32_t rangeCount)
7558{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007559
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007560
7561 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7562 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7563 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007564 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007565 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007566 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007567 }
7568
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007569
7570 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007571}
7572
7573VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7574 VkCmdBuffer cmdBuffer,
7575 VkImage image,
7576 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007577 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007578 uint32_t rangeCount,
7579 const VkImageSubresourceRange* pRanges)
7580{
7581 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007582
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007583 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7584
7585 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7586}
7587
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007588bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007589 VkCmdBuffer cmdBuffer,
7590 const VkImageSubresourceRange* pRanges)
7591{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007592 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007593 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007594 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7595 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7596 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007597 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007598 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007599 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007600 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007601 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007602
7603 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007604}
7605
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007606bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007607 VkCmdBuffer cmdBuffer,
7608 VkImage image,
7609 VkImageLayout imageLayout,
7610 float depth,
7611 uint32_t stencil,
7612 uint32_t rangeCount)
7613{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007614
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007615
7616 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7617 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7618 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007619 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007620 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007621 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007622 }
7623
7624
7625
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007626
7627 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007628}
7629
Chris Forbes2951d7d2015-06-22 17:21:59 +12007630VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007631 VkCmdBuffer cmdBuffer,
7632 VkImage image,
7633 VkImageLayout imageLayout,
7634 float depth,
7635 uint32_t stencil,
7636 uint32_t rangeCount,
7637 const VkImageSubresourceRange* pRanges)
7638{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007639 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007640
Chris Forbes2951d7d2015-06-22 17:21:59 +12007641 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007642
Chris Forbes2951d7d2015-06-22 17:21:59 +12007643 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007644}
7645
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007646bool PreCmdClearColorAttachment(
7647 VkCmdBuffer cmdBuffer,
7648 const VkClearColorValue* pColor,
7649 const VkRect3D* pRects)
7650{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007651 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007652 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007653 }
7654
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007655 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007656 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007657 }
7658
7659 return true;
7660}
7661
7662bool PostCmdClearColorAttachment(
7663 VkCmdBuffer cmdBuffer,
7664 uint32_t colorAttachment,
7665 VkImageLayout imageLayout,
7666 uint32_t rectCount)
7667{
7668
7669
7670 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7671 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7672 {
7673 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007674 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007675 return false;
7676 }
7677
7678
7679 return true;
7680}
7681
7682VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7683 VkCmdBuffer cmdBuffer,
7684 uint32_t colorAttachment,
7685 VkImageLayout imageLayout,
7686 const VkClearColorValue* pColor,
7687 uint32_t rectCount,
7688 const VkRect3D* pRects)
7689{
7690 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7691
7692 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7693
7694 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7695}
7696
7697bool PreCmdClearDepthStencilAttachment(
7698 VkCmdBuffer cmdBuffer,
7699 const VkRect3D* pRects)
7700{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007701 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007702 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007703 }
7704
7705 return true;
7706}
7707
7708bool PostCmdClearDepthStencilAttachment(
7709 VkCmdBuffer cmdBuffer,
7710 VkImageAspectFlags imageAspectMask,
7711 VkImageLayout imageLayout,
7712 float depth,
7713 uint32_t stencil,
7714 uint32_t rectCount)
7715{
7716
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007717
7718 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7719 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7720 {
7721 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007722 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007723 return false;
7724 }
7725
7726
7727
7728
7729 return true;
7730}
7731
7732VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7733 VkCmdBuffer cmdBuffer,
7734 VkImageAspectFlags imageAspectMask,
7735 VkImageLayout imageLayout,
7736 float depth,
7737 uint32_t stencil,
7738 uint32_t rectCount,
7739 const VkRect3D* pRects)
7740{
7741 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7742
7743 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7744
7745 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7746}
7747
7748bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007749 VkCmdBuffer cmdBuffer,
7750 const VkImageResolve* pRegions)
7751{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007752 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007753 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007754 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7755 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7756 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007757 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007758 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007759 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007760 }
7761 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7762 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7763 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007764 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007765 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007766 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007767 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007768 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007769
7770 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007771}
7772
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007773bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007774 VkCmdBuffer cmdBuffer,
7775 VkImage srcImage,
7776 VkImageLayout srcImageLayout,
7777 VkImage destImage,
7778 VkImageLayout destImageLayout,
7779 uint32_t regionCount)
7780{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007781
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007782
7783 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7784 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7785 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007786 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007787 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007788 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007789 }
7790
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007791
7792 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7793 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7794 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007795 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007796 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007797 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007798 }
7799
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007800
7801 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007802}
7803
7804VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7805 VkCmdBuffer cmdBuffer,
7806 VkImage srcImage,
7807 VkImageLayout srcImageLayout,
7808 VkImage destImage,
7809 VkImageLayout destImageLayout,
7810 uint32_t regionCount,
7811 const VkImageResolve* pRegions)
7812{
7813 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007814
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007815 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7816
7817 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7818}
7819
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007820bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007821 VkCmdBuffer cmdBuffer,
7822 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007823 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007824{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007825
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007826
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007827
7828 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007829}
7830
7831VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7832 VkCmdBuffer cmdBuffer,
7833 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007834 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007835{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007836 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007837
Tony Barbourc2e987e2015-06-29 16:20:35 -06007838 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007839}
7840
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007841bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007842 VkCmdBuffer cmdBuffer,
7843 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007844 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007845{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007846
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007847
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007848
7849 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007850}
7851
7852VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7853 VkCmdBuffer cmdBuffer,
7854 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007855 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007856{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007857 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007858
Tony Barbourc2e987e2015-06-29 16:20:35 -06007859 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007860}
7861
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007862bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007863 VkCmdBuffer cmdBuffer,
7864 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007865 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007866{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007867 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007868 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007869 }
7870
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007871 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007872 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007873 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007874
7875 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007876}
7877
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007878bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007879 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007880 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007881 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007882 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007883 uint32_t memBarrierCount)
7884{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007885
Tony Barbourc2e987e2015-06-29 16:20:35 -06007886
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007887
7888
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007889
7890 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007891}
7892
7893VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
7894 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007895 uint32_t eventCount,
7896 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007897 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007898 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007899 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007900 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007901{
7902 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007903
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007904 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007905
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007906 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007907}
7908
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007909bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007910 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007911 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007912{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007913 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007914 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007915 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007916
7917 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007918}
7919
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007920bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007921 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007922 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007923 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007924 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007925 uint32_t memBarrierCount)
7926{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007927
Tony Barbourc2e987e2015-06-29 16:20:35 -06007928
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007929
7930
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007931
7932 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007933}
7934
7935VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7936 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007937 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007938 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007939 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007940 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007941 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007942{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007943 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007944
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007945 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007946
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007947 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007948}
7949
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007950bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007951 VkCmdBuffer cmdBuffer,
7952 VkQueryPool queryPool,
7953 uint32_t slot,
7954 VkQueryControlFlags flags)
7955{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007956
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007957
7958
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007959
7960 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007961}
7962
7963VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
7964 VkCmdBuffer cmdBuffer,
7965 VkQueryPool queryPool,
7966 uint32_t slot,
7967 VkQueryControlFlags flags)
7968{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007969 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7970
7971 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7972}
7973
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007974bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007975 VkCmdBuffer cmdBuffer,
7976 VkQueryPool queryPool,
7977 uint32_t slot)
7978{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007979
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007980
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007981
7982 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007983}
7984
7985VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
7986 VkCmdBuffer cmdBuffer,
7987 VkQueryPool queryPool,
7988 uint32_t slot)
7989{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007990 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
7991
7992 PostCmdEndQuery(cmdBuffer, queryPool, slot);
7993}
7994
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007995bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007996 VkCmdBuffer cmdBuffer,
7997 VkQueryPool queryPool,
7998 uint32_t startQuery,
7999 uint32_t queryCount)
8000{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008001
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008002
8003
8004
8005 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008006}
8007
8008VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8009 VkCmdBuffer cmdBuffer,
8010 VkQueryPool queryPool,
8011 uint32_t startQuery,
8012 uint32_t queryCount)
8013{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008014 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8015
8016 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8017}
8018
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008019bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008020 VkCmdBuffer cmdBuffer,
8021 VkTimestampType timestampType,
8022 VkBuffer destBuffer,
8023 VkDeviceSize destOffset)
8024{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008025
8026 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8027 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8028 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008029 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008030 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008031 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008032 }
8033
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008034
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008035
8036 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008037}
8038
8039VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8040 VkCmdBuffer cmdBuffer,
8041 VkTimestampType timestampType,
8042 VkBuffer destBuffer,
8043 VkDeviceSize destOffset)
8044{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008045 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8046
8047 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8048}
8049
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008050bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008051 VkCmdBuffer cmdBuffer,
8052 VkQueryPool queryPool,
8053 uint32_t startQuery,
8054 uint32_t queryCount,
8055 VkBuffer destBuffer,
8056 VkDeviceSize destOffset,
8057 VkDeviceSize destStride,
8058 VkQueryResultFlags flags)
8059{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008060
8061
8062
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008063
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008064
8065
8066
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008067
8068 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008069}
8070
Jeremy Hayescf469132015-04-17 10:36:53 -06008071VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008072 VkCmdBuffer cmdBuffer,
8073 VkQueryPool queryPool,
8074 uint32_t startQuery,
8075 uint32_t queryCount,
8076 VkBuffer destBuffer,
8077 VkDeviceSize destOffset,
8078 VkDeviceSize destStride,
8079 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06008080{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008081 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8082
8083 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06008084}
8085
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008086bool PreCmdPushConstants(
8087 VkCmdBuffer cmdBuffer,
8088 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008089{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008090 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008091 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008092 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008093
8094 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008095}
8096
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008097bool PostCmdPushConstants(
8098 VkCmdBuffer cmdBuffer,
8099 VkPipelineLayout layout,
8100 VkShaderStageFlags stageFlags,
8101 uint32_t start,
8102 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008103{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008104
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008105
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008106
8107
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008108
8109 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008110}
8111
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008112VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
8113 VkCmdBuffer cmdBuffer,
8114 VkPipelineLayout layout,
8115 VkShaderStageFlags stageFlags,
8116 uint32_t start,
8117 uint32_t length,
8118 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008119{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008120 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008121
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008122 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008123
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008124 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008125}
8126
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008127bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008128 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008129 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008130{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008131 if(pRenderPassBegin != nullptr)
8132 {
8133 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008134 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008135 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008136 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008137 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008138 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008139 if(pRenderPassBegin->pAttachmentClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008140 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008141 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06008142 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008143
8144 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008145}
8146
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008147bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008148 VkCmdBuffer cmdBuffer,
8149 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008150{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008151
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008152 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8153 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
8154 {
8155 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8156 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8157 return false;
8158 }
8159
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008160 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008161}
8162
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008163VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8164 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008165 const VkRenderPassBeginInfo* pRenderPassBegin,
8166 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008167{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008168 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8169
Chia-I Wuc278df82015-07-07 11:50:03 +08008170 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008171
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008172 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008173}
8174
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008175bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08008176 VkCmdBuffer cmdBuffer,
8177 VkRenderPassContents contents)
8178{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008179
8180 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008181 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008182 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008183 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008184 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8185 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008186 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008187
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008188 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08008189}
8190
8191VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8192 VkCmdBuffer cmdBuffer,
8193 VkRenderPassContents contents)
8194{
Chia-I Wuc278df82015-07-07 11:50:03 +08008195 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8196
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008197 PostCmdNextSubpass(cmdBuffer, contents);
8198}
8199
8200bool PostCmdEndRenderPass(
8201 VkCmdBuffer cmdBuffer)
8202{
8203
8204 return true;
8205}
8206
8207VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
8208 VkCmdBuffer cmdBuffer)
8209{
8210 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8211
8212 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08008213}
8214
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008215bool PreCmdExecuteCommands(
8216 VkCmdBuffer cmdBuffer,
8217 const VkCmdBuffer* pCmdBuffers)
8218{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008219 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008220 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008221 }
8222
8223 return true;
8224}
8225
8226bool PostCmdExecuteCommands(
8227 VkCmdBuffer cmdBuffer,
8228 uint32_t cmdBuffersCount)
8229{
8230
8231
8232 return true;
8233}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008234
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008235VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008236 VkCmdBuffer cmdBuffer,
8237 uint32_t cmdBuffersCount,
8238 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008239{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008240 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8241
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008242 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8243
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008244 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008245}
8246
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008247VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008248{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008249 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008250 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008251 }
8252
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008253 /* loader uses this to force layer initialization; device object is wrapped */
8254 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008255 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008256 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008257 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008258
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008259 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008260 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008261 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008262 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008263 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008264 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008265 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008266 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008267 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008268 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008269 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008270 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008271 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008272 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008273 if (!strcmp(funcName, "vkFreeMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008274 return (PFN_vkVoidFunction) vkFreeMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008275 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008276 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008277 if (!strcmp(funcName, "vkUnmapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008278 return (PFN_vkVoidFunction) vkUnmapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008279 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008280 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008281 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008282 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008283 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008284 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008285 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008286 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008287 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008288 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008289 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008290 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008291 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008292 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008293 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008294 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008295 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008296 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008297 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008298 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008299 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008300 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008301 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008302 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008303 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008304 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008305 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008306 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008307 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008308 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008309 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008310 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008311 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008312 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008313 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008314 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008315 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008316 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008317 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008318 return (PFN_vkVoidFunction) vkCreateImageView;
Chia-I Wuc278df82015-07-07 11:50:03 +08008319 if (!strcmp(funcName, "vkCreateAttachmentView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008320 return (PFN_vkVoidFunction) vkCreateAttachmentView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008321 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008322 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008323 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008324 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008325 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008326 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008327 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008328 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008329 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008330 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008331 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008332 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008333 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008334 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008335 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008336 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008337 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008338 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008339 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008340 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008341 if (!strcmp(funcName, "vkCreateDynamicRasterState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008342 return (PFN_vkVoidFunction) vkCreateDynamicRasterState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008343 if (!strcmp(funcName, "vkCreateDynamicColorBlendState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008344 return (PFN_vkVoidFunction) vkCreateDynamicColorBlendState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008345 if (!strcmp(funcName, "vkCreateDynamicDepthStencilState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008346 return (PFN_vkVoidFunction) vkCreateDynamicDepthStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008347 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008348 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008349 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008350 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008351 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008352 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008353 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008354 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008355 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008356 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008357 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008358 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008359 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008360 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008361 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008362 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008363 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008364 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008365 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008366 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008367 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008368 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008369 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008370 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008371 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008372 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008373 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008374 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008375 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008376 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008377 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008378 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008379 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008380 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008381 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008382 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008383 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008384 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008385 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008386 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008387 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008388 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008389 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008390 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008391 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008392 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008393 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008394 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008395 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008396 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008397 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008398 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008399 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008400 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008401 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008402 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008403 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008404 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008405 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008406 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008407 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008408 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008409 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008410 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008411 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008412 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008413 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008414 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008415 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008416 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008417 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008418 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008419
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008420 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008421 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008422 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008423 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008424 }
8425}
8426
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008427VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008428{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008429 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008430 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008431 }
8432
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008433 /* loader uses this to force layer initialization; instance object is wrapped */
8434 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008435 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008436 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008437 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008438
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008439 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008440 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008441 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008442 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008443 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008444 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008445 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008446 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008447 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008448 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06008449 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008450 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008451 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008452 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008453 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008454 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008455 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008456 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008457 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008458 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008459 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008460 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008461
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008462 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008463 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008464 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008465 return fptr;
8466
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008467 {
8468 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8469 return NULL;
8470 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8471 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008472}