blob: 1547fbbe29c755d3270bcc0fd2d04d9b50de2798 [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
Cody Northropef72e2a2015-08-03 17:04:53 -06002343bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002344 VkPhysicalDevice physicalDevice,
2345 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002346 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002347 VkResult result)
2348{
2349
Cody Northropef72e2a2015-08-03 17:04:53 -06002350 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002351 {
2352 }
2353
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002354 if(pQueueProperties != nullptr)
2355 {
2356 }
2357
2358 if(result < VK_SUCCESS)
2359 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002360 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002361 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2362 return false;
2363 }
2364
2365 return true;
2366}
2367
2368VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2369 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002370 uint32_t* pCount,
2371 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002372{
Cody Northropef72e2a2015-08-03 17:04:53 -06002373 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002374
Cody Northropef72e2a2015-08-03 17:04:53 -06002375 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002376
2377 return result;
2378}
2379
2380bool PostGetPhysicalDeviceMemoryProperties(
2381 VkPhysicalDevice physicalDevice,
2382 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2383 VkResult result)
2384{
2385
2386 if(pMemoryProperties != nullptr)
2387 {
2388 }
2389
2390 if(result < VK_SUCCESS)
2391 {
2392 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2393 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2394 return false;
2395 }
2396
2397 return true;
2398}
2399
2400VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2401 VkPhysicalDevice physicalDevice,
2402 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2403{
2404 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2405
2406 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2407
2408 return result;
2409}
2410
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002411VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2412 VkPhysicalDevice physicalDevice,
2413 const VkDeviceCreateInfo* pCreateInfo,
2414 VkDevice* pDevice)
2415{
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002416 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002417 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2418 if(result == VK_SUCCESS)
2419 {
2420 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2421 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2422 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2423 }
2424
2425 return result;
2426}
2427
2428VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
2429 VkDevice device)
2430{
2431 layer_debug_report_destroy_device(device);
2432
2433 dispatch_key key = get_dispatch_key(device);
2434#if DISPATCH_MAP_DEBUG
2435 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2436#endif
2437
2438 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
2439 pc_device_table_map.erase(key);
2440 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2441
2442 return result;
2443}
2444
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002445bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002446 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002447 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002448 uint32_t queueIndex,
2449 VkQueue* pQueue,
2450 VkResult result)
2451{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002452
2453
2454
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002455 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002456 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002457 }
2458
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002459 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002460 {
2461 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002462 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2463 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002464 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002465
2466 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002467}
2468
2469VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2470 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002471 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002472 uint32_t queueIndex,
2473 VkQueue* pQueue)
2474{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002475 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002476
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002477 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002478
2479 return result;
2480}
2481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002482bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002483 VkQueue queue,
2484 const VkCmdBuffer* pCmdBuffers)
2485{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002486 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002487 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002488 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002489
2490 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002491}
2492
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002493bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002494 VkQueue queue,
2495 uint32_t cmdBufferCount,
2496 VkFence fence,
2497 VkResult result)
2498{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002499
2500
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002501
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002502 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002503 {
2504 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002505 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2506 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002507 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002508
2509 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002510}
2511
2512VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2513 VkQueue queue,
2514 uint32_t cmdBufferCount,
2515 const VkCmdBuffer* pCmdBuffers,
2516 VkFence fence)
2517{
2518 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002519
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002520 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2521
2522 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2523
2524 return result;
2525}
2526
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002527bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002528 VkQueue queue,
2529 VkResult result)
2530{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002531
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002532 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002533 {
2534 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002535 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2536 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002537 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002538
2539 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002540}
2541
2542VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2543 VkQueue queue)
2544{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002545 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2546
2547 PostQueueWaitIdle(queue, result);
2548
2549 return result;
2550}
2551
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002552bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002553 VkDevice device,
2554 VkResult result)
2555{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002556
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002557 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002558 {
2559 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002560 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2561 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002562 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002563
2564 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002565}
2566
2567VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2568 VkDevice device)
2569{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002570 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2571
2572 PostDeviceWaitIdle(device, result);
2573
2574 return result;
2575}
2576
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002577bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002578 VkDevice device,
2579 const VkMemoryAllocInfo* pAllocInfo)
2580{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002581 if(pAllocInfo != nullptr)
2582 {
2583 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002584 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002585 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002586 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002587 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002588 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002589 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002590
2591 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002592}
2593
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002594bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002595 VkDevice device,
2596 VkDeviceMemory* pMem,
2597 VkResult result)
2598{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002599
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002600 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002601 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002602 }
2603
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002604 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002605 {
2606 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002607 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2608 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002609 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002610
2611 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002612}
2613
2614VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2615 VkDevice device,
2616 const VkMemoryAllocInfo* pAllocInfo,
2617 VkDeviceMemory* pMem)
2618{
2619 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002620
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002621 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2622
2623 PostAllocMemory(device, pMem, result);
2624
2625 return result;
2626}
2627
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002628bool PostFreeMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002629 VkDevice device,
2630 VkDeviceMemory mem,
2631 VkResult result)
2632{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002633
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002634
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002635 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002636 {
2637 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002638 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2639 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002640 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002641
2642 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002643}
2644
2645VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2646 VkDevice device,
2647 VkDeviceMemory mem)
2648{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002649 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2650
2651 PostFreeMemory(device, mem, result);
2652
2653 return result;
2654}
2655
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002656bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002657 VkDevice device,
2658 VkDeviceMemory mem,
2659 VkDeviceSize offset,
2660 VkDeviceSize size,
2661 VkMemoryMapFlags flags,
2662 void** ppData,
2663 VkResult result)
2664{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002665
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002666
2667
2668
2669
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002670 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002671 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002672 }
2673
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002674 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002675 {
2676 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002677 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2678 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002679 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002680
2681 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002682}
2683
2684VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2685 VkDevice device,
2686 VkDeviceMemory mem,
2687 VkDeviceSize offset,
2688 VkDeviceSize size,
2689 VkMemoryMapFlags flags,
2690 void** ppData)
2691{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002692 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2693
2694 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2695
2696 return result;
2697}
2698
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002699bool PostUnmapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002700 VkDevice device,
2701 VkDeviceMemory mem,
2702 VkResult result)
2703{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002704
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002705
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002706 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002707 {
2708 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2710 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002711 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002712
2713 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002714}
2715
2716VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2717 VkDevice device,
2718 VkDeviceMemory mem)
2719{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002720 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2721
2722 PostUnmapMemory(device, mem, result);
2723
2724 return result;
2725}
2726
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002727bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002728 VkDevice device,
2729 const VkMappedMemoryRange* pMemRanges)
2730{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002731 if(pMemRanges != nullptr)
2732 {
2733 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002734 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002735 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002736 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002737 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002738 }
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
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002744bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002745 VkDevice device,
2746 uint32_t memRangeCount,
2747 VkResult result)
2748{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002749
2750
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002751 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002752 {
2753 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002754 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2755 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002756 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002757
2758 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002759}
2760
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002761VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002762 VkDevice device,
2763 uint32_t memRangeCount,
2764 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002765{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002766 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002767
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002768 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002769
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002770 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2771
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002772 return result;
2773}
2774
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002775bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002776 VkDevice device,
2777 const VkMappedMemoryRange* pMemRanges)
2778{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002779 if(pMemRanges != nullptr)
2780 {
2781 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002782 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002783 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002784 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002785 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002786 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002787 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002788
2789 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002790}
2791
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002792bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002793 VkDevice device,
2794 uint32_t memRangeCount,
2795 VkResult result)
2796{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002797
2798
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002799 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002800 {
2801 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002802 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2803 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002804 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002805
2806 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002807}
2808
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002809VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002810 VkDevice device,
2811 uint32_t memRangeCount,
2812 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002813{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002814 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002815
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002816 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002817
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002818 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2819
Tony Barbour859ceab2015-04-16 19:23:13 -06002820 return result;
2821}
2822
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002823bool PostGetDeviceMemoryCommitment(
2824 VkDevice device,
2825 VkDeviceMemory memory,
2826 VkDeviceSize* pCommittedMemoryInBytes,
2827 VkResult result)
2828{
2829
2830
2831 if(pCommittedMemoryInBytes != nullptr)
2832 {
2833 }
2834
2835 if(result < VK_SUCCESS)
2836 {
2837 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2839 return false;
2840 }
2841
2842 return true;
2843}
2844
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002845VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002846 VkDevice device,
2847 VkDeviceMemory memory,
2848 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002849{
2850 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2851
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002852 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2853
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002854 return result;
2855}
2856
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002857bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002858 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002859 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002860 VkDeviceMemory mem,
2861 VkDeviceSize memOffset,
2862 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002863{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002864
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002865
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002866
2867
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002868 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002869 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002870 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2871 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2872 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002873 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002874
2875 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002876}
2877
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002878VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002879 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002880 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002881 VkDeviceMemory mem,
2882 VkDeviceSize memOffset)
2883{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002884 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002885
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002886 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002887
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002888 return result;
2889}
2890
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002891bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002892 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002893 VkImage image,
2894 VkDeviceMemory mem,
2895 VkDeviceSize memOffset,
2896 VkResult result)
2897{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002898
2899
2900
2901
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002902 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002903 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002904 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2905 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2906 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002907 }
2908
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002909 return true;
2910}
2911
2912VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2913 VkDevice device,
2914 VkImage image,
2915 VkDeviceMemory mem,
2916 VkDeviceSize memOffset)
2917{
2918 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2919
2920 PostBindImageMemory(device, image, mem, memOffset, result);
2921
2922 return result;
2923}
2924
2925bool PostGetBufferMemoryRequirements(
2926 VkDevice device,
2927 VkBuffer buffer,
2928 VkMemoryRequirements* pMemoryRequirements,
2929 VkResult result)
2930{
2931
2932
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002933 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002934 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002935 }
2936
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002937 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002938 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002939 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2940 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2941 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002942 }
2943
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002944 return true;
2945}
2946
2947VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2948 VkDevice device,
2949 VkBuffer buffer,
2950 VkMemoryRequirements* pMemoryRequirements)
2951{
2952 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2953
2954 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2955
2956 return result;
2957}
2958
2959bool PostGetImageMemoryRequirements(
2960 VkDevice device,
2961 VkImage image,
2962 VkMemoryRequirements* pMemoryRequirements,
2963 VkResult result)
2964{
2965
2966
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002967 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002968 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002969 }
2970
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002971 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002972 {
2973 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2974 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2975 return false;
2976 }
2977
2978 return true;
2979}
2980
2981VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2982 VkDevice device,
2983 VkImage image,
2984 VkMemoryRequirements* pMemoryRequirements)
2985{
2986 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2987
2988 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2989
2990 return result;
2991}
2992
2993bool PostGetImageSparseMemoryRequirements(
2994 VkDevice device,
2995 VkImage image,
2996 uint32_t* pNumRequirements,
2997 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2998 VkResult result)
2999{
3000
3001
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003002 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003003 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003004 }
3005
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003006 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003007 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003008 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3009 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
3010 {
3011 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003012 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003013 return false;
3014 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003015 }
3016
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003017 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003018 {
3019 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
3020 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3021 return false;
3022 }
3023
3024 return true;
3025}
3026
3027VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
3028 VkDevice device,
3029 VkImage image,
3030 uint32_t* pNumRequirements,
3031 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
3032{
3033 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
3034
3035 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
3036
3037 return result;
3038}
3039
3040bool PostGetPhysicalDeviceSparseImageFormatProperties(
3041 VkPhysicalDevice physicalDevice,
3042 VkFormat format,
3043 VkImageType type,
3044 uint32_t samples,
3045 VkImageUsageFlags usage,
3046 VkImageTiling tiling,
3047 uint32_t* pNumProperties,
3048 VkSparseImageFormatProperties* pProperties,
3049 VkResult result)
3050{
3051
3052 if(format < VK_FORMAT_BEGIN_RANGE ||
3053 format > VK_FORMAT_END_RANGE)
3054 {
3055 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003056 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003057 return false;
3058 }
3059
3060 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
3061 type > VK_IMAGE_TYPE_END_RANGE)
3062 {
3063 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003064 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003065 return false;
3066 }
3067
3068
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003069
3070 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3071 tiling > VK_IMAGE_TILING_END_RANGE)
3072 {
3073 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003074 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003075 return false;
3076 }
3077
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003078 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003079 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003080 }
3081
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003082 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003083 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003084 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3085 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
3086 {
3087 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003088 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003089 return false;
3090 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003091 }
3092
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003093 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003094 {
3095 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
3096 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3097 return false;
3098 }
3099
3100 return true;
3101}
3102
3103VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
3104 VkPhysicalDevice physicalDevice,
3105 VkFormat format,
3106 VkImageType type,
3107 uint32_t samples,
3108 VkImageUsageFlags usage,
3109 VkImageTiling tiling,
3110 uint32_t* pNumProperties,
3111 VkSparseImageFormatProperties* pProperties)
3112{
3113 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
3114
3115 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
3116
3117 return result;
3118}
3119
3120bool PreQueueBindSparseBufferMemory(
3121 VkQueue queue,
3122 const VkSparseMemoryBindInfo* pBindInfo)
3123{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003124 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003125 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003126 }
3127
3128 return true;
3129}
3130
3131bool PostQueueBindSparseBufferMemory(
3132 VkQueue queue,
3133 VkBuffer buffer,
3134 uint32_t numBindings,
3135 VkResult result)
3136{
3137
3138
3139
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003140 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003141 {
3142 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
3143 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3144 return false;
3145 }
3146
3147 return true;
3148}
3149
3150VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
3151 VkQueue queue,
3152 VkBuffer buffer,
3153 uint32_t numBindings,
3154 const VkSparseMemoryBindInfo* pBindInfo)
3155{
3156 PreQueueBindSparseBufferMemory(queue, pBindInfo);
3157
3158 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
3159
3160 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
3161
3162 return result;
3163}
3164
3165bool PreQueueBindSparseImageOpaqueMemory(
3166 VkQueue queue,
3167 const VkSparseMemoryBindInfo* pBindInfo)
3168{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003169 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003170 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003171 }
3172
3173 return true;
3174}
3175
3176bool PostQueueBindSparseImageOpaqueMemory(
3177 VkQueue queue,
3178 VkImage image,
3179 uint32_t numBindings,
3180 VkResult result)
3181{
3182
3183
3184
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003185 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003186 {
3187 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
3188 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3189 return false;
3190 }
3191
3192 return true;
3193}
3194
3195VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
3196 VkQueue queue,
3197 VkImage image,
3198 uint32_t numBindings,
3199 const VkSparseMemoryBindInfo* pBindInfo)
3200{
3201 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
3202
3203 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
3204
3205 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
3206
3207 return result;
3208}
3209
3210bool PreQueueBindSparseImageMemory(
3211 VkQueue queue,
3212 const VkSparseImageMemoryBindInfo* pBindInfo)
3213{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003214 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003215 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003216 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3217 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
3218 {
3219 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003220 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003221 return false;
3222 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003223 }
3224
3225 return true;
3226}
3227
3228bool PostQueueBindSparseImageMemory(
3229 VkQueue queue,
3230 VkImage image,
3231 uint32_t numBindings,
3232 VkResult result)
3233{
3234
3235
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003236
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003237 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003238 {
3239 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003240 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3241 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003242 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003243
3244 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003245}
3246
3247VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003248 VkQueue queue,
3249 VkImage image,
3250 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003251 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003252{
3253 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003254
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003255 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003256
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003257 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003258
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003259 return result;
3260}
3261
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003262bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003263 VkDevice device,
3264 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003265{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003266 if(pCreateInfo != nullptr)
3267 {
3268 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003269 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003270 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003271 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003272 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003273 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003274 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003275
3276 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003277}
3278
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003279bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003280 VkDevice device,
3281 VkFence* pFence,
3282 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003283{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003284
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003285 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003286 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003287 }
3288
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003289 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003290 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003291 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003292 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3293 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003294 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003295
3296 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003297}
3298
3299VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3300 VkDevice device,
3301 const VkFenceCreateInfo* pCreateInfo,
3302 VkFence* pFence)
3303{
3304 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003305
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003306 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3307
3308 PostCreateFence(device, pFence, result);
3309
3310 return result;
3311}
3312
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003313bool PostDestroyFence(
3314 VkDevice device,
3315 VkFence fence,
3316 VkResult result)
3317{
3318
3319
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003320 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003321 {
3322 std::string reason = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3323 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3324 return false;
3325 }
3326
3327 return true;
3328}
3329
3330VK_LAYER_EXPORT VkResult VKAPI vkDestroyFence(
3331 VkDevice device,
3332 VkFence fence)
3333{
3334 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3335
3336 PostDestroyFence(device, fence, result);
3337
3338 return result;
3339}
3340
3341bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003342 VkDevice device,
3343 const VkFence* pFences)
3344{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003345 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003346 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003347 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003348
3349 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003350}
3351
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003352bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003353 VkDevice device,
3354 uint32_t fenceCount,
3355 VkResult result)
3356{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003357
3358
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003359 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003360 {
3361 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003362 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3363 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003364 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003365
3366 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003367}
3368
3369VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3370 VkDevice device,
3371 uint32_t fenceCount,
3372 const VkFence* pFences)
3373{
3374 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003375
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003376 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3377
3378 PostResetFences(device, fenceCount, result);
3379
3380 return result;
3381}
3382
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003383bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003384 VkDevice device,
3385 VkFence fence,
3386 VkResult result)
3387{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003388
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003389
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003390 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003391 {
3392 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003393 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3394 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003395 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003396
3397 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003398}
3399
3400VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3401 VkDevice device,
3402 VkFence fence)
3403{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003404 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3405
3406 PostGetFenceStatus(device, fence, result);
3407
3408 return result;
3409}
3410
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003411bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003412 VkDevice device,
3413 const VkFence* pFences)
3414{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003415 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003416 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003417 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003418
3419 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003420}
3421
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003422bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003423 VkDevice device,
3424 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003425 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003426 uint64_t timeout,
3427 VkResult result)
3428{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003429
3430
3431
3432
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003433 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003434 {
3435 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003436 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3437 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003438 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003439
3440 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441}
3442
3443VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3444 VkDevice device,
3445 uint32_t fenceCount,
3446 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003447 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003448 uint64_t timeout)
3449{
3450 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003451
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3453
3454 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3455
3456 return result;
3457}
3458
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003459bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003460 VkDevice device,
3461 const VkSemaphoreCreateInfo* pCreateInfo)
3462{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003463 if(pCreateInfo != nullptr)
3464 {
3465 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003466 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003467 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003468 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003469 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003470 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003471 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003472
3473 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003474}
3475
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003476bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003477 VkDevice device,
3478 VkSemaphore* pSemaphore,
3479 VkResult result)
3480{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003481
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003482 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003483 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003484 }
3485
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003486 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003487 {
3488 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003489 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3490 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003491 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003492
3493 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003494}
3495
3496VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3497 VkDevice device,
3498 const VkSemaphoreCreateInfo* pCreateInfo,
3499 VkSemaphore* pSemaphore)
3500{
3501 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003502
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003503 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3504
3505 PostCreateSemaphore(device, pSemaphore, result);
3506
3507 return result;
3508}
3509
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003510bool PostDestroySemaphore(
3511 VkDevice device,
3512 VkSemaphore semaphore,
3513 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003514{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003515
3516
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003517 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003518 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003519 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3520 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3521 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003522 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003523
3524 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003525}
3526
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003527VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3528 VkDevice device,
3529 VkSemaphore semaphore)
3530{
3531 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3532
3533 PostDestroySemaphore(device, semaphore, result);
3534
3535 return result;
3536}
3537
3538bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003539 VkQueue queue,
3540 VkSemaphore semaphore,
3541 VkResult result)
3542{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003543
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003544
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003545 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003546 {
3547 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003548 log_msg(mdd(queue), 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
3555VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3556 VkQueue queue,
3557 VkSemaphore semaphore)
3558{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003559 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3560
3561 PostQueueSignalSemaphore(queue, semaphore, result);
3562
3563 return result;
3564}
3565
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003566bool PostQueueWaitSemaphore(
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 = "vkQueueWaitSemaphore 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 vkQueueWaitSemaphore(
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)->QueueWaitSemaphore(queue, semaphore);
3588
3589 PostQueueWaitSemaphore(queue, semaphore, result);
3590
3591 return result;
3592}
3593
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003594bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003595 VkDevice device,
3596 const VkEventCreateInfo* pCreateInfo)
3597{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003598 if(pCreateInfo != nullptr)
3599 {
3600 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003601 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003602 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003603 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003604 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003605 }
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
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003611bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003612 VkDevice device,
3613 VkEvent* pEvent,
3614 VkResult result)
3615{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003616
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003617 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003618 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003619 }
3620
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003621 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003622 {
3623 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003624 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3625 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003626 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003627
3628 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003629}
3630
3631VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3632 VkDevice device,
3633 const VkEventCreateInfo* pCreateInfo,
3634 VkEvent* pEvent)
3635{
3636 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003637
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003638 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3639
3640 PostCreateEvent(device, pEvent, result);
3641
3642 return result;
3643}
3644
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003645bool PostDestroyEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003646 VkDevice device,
3647 VkEvent event,
3648 VkResult result)
3649{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003650
3651
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003652 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003653 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003654 std::string reason = "vkDestroyEvent parameter, VkResult result, is " + EnumeratorString(result);
3655 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3656 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003657 }
3658
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003659 return true;
3660}
3661
3662VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3663 VkDevice device,
3664 VkEvent event)
3665{
3666 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3667
3668 PostDestroyEvent(device, event, result);
3669
3670 return result;
3671}
3672
3673bool PostGetEventStatus(
3674 VkDevice device,
3675 VkEvent event,
3676 VkResult result)
3677{
3678
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003679
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003680 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003681 {
3682 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003683 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 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003686
3687 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003688}
3689
3690VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3691 VkDevice device,
3692 VkEvent event)
3693{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003694 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3695
3696 PostGetEventStatus(device, event, result);
3697
3698 return result;
3699}
3700
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003701bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003702 VkDevice device,
3703 VkEvent event,
3704 VkResult result)
3705{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003706
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 = "vkSetEvent 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 vkSetEvent(
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)->SetEvent(device, event);
3723
3724 PostSetEvent(device, event, result);
3725
3726 return result;
3727}
3728
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003729bool PostResetEvent(
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 = "vkResetEvent 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 vkResetEvent(
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)->ResetEvent(device, event);
3751
3752 PostResetEvent(device, event, result);
3753
3754 return result;
3755}
3756
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003757bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003758 VkDevice device,
3759 const VkQueryPoolCreateInfo* pCreateInfo)
3760{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003761 if(pCreateInfo != nullptr)
3762 {
3763 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003764 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003765 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003766 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003768 }
3769 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3770 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3771 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003772 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003773 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003774 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003775 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003776 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003777
3778 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003779}
3780
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003781bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003782 VkDevice device,
3783 VkQueryPool* pQueryPool,
3784 VkResult result)
3785{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003786
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003787 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003788 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003789 }
3790
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003791 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003792 {
3793 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003794 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3795 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003796 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003797
3798 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003799}
3800
3801VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3802 VkDevice device,
3803 const VkQueryPoolCreateInfo* pCreateInfo,
3804 VkQueryPool* pQueryPool)
3805{
3806 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003807
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003808 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3809
3810 PostCreateQueryPool(device, pQueryPool, result);
3811
3812 return result;
3813}
3814
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003815bool PostDestroyQueryPool(
3816 VkDevice device,
3817 VkQueryPool queryPool,
3818 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003819{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003820
3821
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003822 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003823 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003824 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3825 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3826 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003827 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003828
3829 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003830}
3831
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003832VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3833 VkDevice device,
3834 VkQueryPool queryPool)
3835{
3836 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3837
3838 PostDestroyQueryPool(device, queryPool, result);
3839
3840 return result;
3841}
3842
3843bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003844 VkDevice device,
3845 VkQueryPool queryPool,
3846 uint32_t startQuery,
3847 uint32_t queryCount,
3848 size_t* pDataSize,
3849 void* pData,
3850 VkQueryResultFlags flags,
3851 VkResult result)
3852{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003853
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003854
3855
3856
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003857 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003858 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003859 }
3860
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003861 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003862 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003863 }
3864
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003865
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003866 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003867 {
3868 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003869 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3870 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003871 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003872
3873 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003874}
3875
3876VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3877 VkDevice device,
3878 VkQueryPool queryPool,
3879 uint32_t startQuery,
3880 uint32_t queryCount,
3881 size_t* pDataSize,
3882 void* pData,
3883 VkQueryResultFlags flags)
3884{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003885 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3886
3887 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3888
3889 return result;
3890}
3891
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003892bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003893 VkDevice device,
3894 const VkBufferCreateInfo* pCreateInfo)
3895{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003896 if(pCreateInfo != nullptr)
3897 {
3898 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003899 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003900 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003901 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003902 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003903 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003904 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3905 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003906 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003907 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003908 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003909 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003910 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003911 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003912 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003913 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003914 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003915
3916 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003917}
3918
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003919bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003920 VkDevice device,
3921 VkBuffer* pBuffer,
3922 VkResult result)
3923{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003924
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003925 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003926 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003927 }
3928
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003929 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003930 {
3931 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003932 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3933 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003934 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003935
3936 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003937}
3938
3939VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3940 VkDevice device,
3941 const VkBufferCreateInfo* pCreateInfo,
3942 VkBuffer* pBuffer)
3943{
3944 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003945
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003946 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3947
3948 PostCreateBuffer(device, pBuffer, result);
3949
3950 return result;
3951}
3952
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003953bool PostDestroyBuffer(
3954 VkDevice device,
3955 VkBuffer buffer,
3956 VkResult result)
3957{
3958
3959
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003960 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003961 {
3962 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3963 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3964 return false;
3965 }
3966
3967 return true;
3968}
3969
3970VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3971 VkDevice device,
3972 VkBuffer buffer)
3973{
3974 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
3975
3976 PostDestroyBuffer(device, buffer, result);
3977
3978 return result;
3979}
3980
3981bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003982 VkDevice device,
3983 const VkBufferViewCreateInfo* pCreateInfo)
3984{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003985 if(pCreateInfo != nullptr)
3986 {
3987 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003988 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003989 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003990 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003991 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003992 }
3993 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3994 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3995 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003996 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003997 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003998 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003999 }
4000 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4001 pCreateInfo->format > VK_FORMAT_END_RANGE)
4002 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004003 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004004 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004005 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004006 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004007 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004008
4009 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004010}
4011
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004012bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004013 VkDevice device,
4014 VkBufferView* pView,
4015 VkResult result)
4016{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004017
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004018 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004019 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004020 }
4021
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004022 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004023 {
4024 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004025 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4026 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004027 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004028
4029 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004030}
4031
4032VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
4033 VkDevice device,
4034 const VkBufferViewCreateInfo* pCreateInfo,
4035 VkBufferView* pView)
4036{
4037 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004038
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004039 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
4040
4041 PostCreateBufferView(device, pView, result);
4042
4043 return result;
4044}
4045
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004046bool PostDestroyBufferView(
4047 VkDevice device,
4048 VkBufferView bufferView,
4049 VkResult result)
4050{
4051
4052
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004053 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004054 {
4055 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
4056 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4057 return false;
4058 }
4059
4060 return true;
4061}
4062
4063VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
4064 VkDevice device,
4065 VkBufferView bufferView)
4066{
4067 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
4068
4069 PostDestroyBufferView(device, bufferView, result);
4070
4071 return result;
4072}
4073
4074bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004075 VkDevice device,
4076 const VkImageCreateInfo* pCreateInfo)
4077{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004078 if(pCreateInfo != nullptr)
4079 {
4080 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004081 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004082 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004083 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004084 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004085 }
4086 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
4087 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
4088 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004089 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004090 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004091 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004092 }
4093 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4094 pCreateInfo->format > VK_FORMAT_END_RANGE)
4095 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004096 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004097 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004098 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004099 }
4100 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
4101 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
4102 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004103 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004104 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004105 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004106 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004107 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
4108 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004109 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004110 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4111 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004112 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004113 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004114 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004115 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004116 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004117 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004118
4119 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004120}
4121
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004122bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004123 VkDevice device,
4124 VkImage* pImage,
4125 VkResult result)
4126{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004127
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004128 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004129 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004130 }
4131
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004132 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004133 {
4134 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004135 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4136 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004137 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004138
4139 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004140}
4141
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004142VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
4143 VkDevice device,
4144 const VkImageCreateInfo* pCreateInfo,
4145 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004146{
4147 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004148
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004149 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
4150
4151 PostCreateImage(device, pImage, result);
4152
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004153 return result;
4154}
4155
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004156bool PostDestroyImage(
4157 VkDevice device,
4158 VkImage image,
4159 VkResult result)
4160{
4161
4162
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004163 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004164 {
4165 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
4166 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4167 return false;
4168 }
4169
4170 return true;
4171}
4172
4173VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
4174 VkDevice device,
4175 VkImage image)
4176{
4177 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
4178
4179 PostDestroyImage(device, image, result);
4180
4181 return result;
4182}
4183
4184bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004185 VkDevice device,
4186 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004187{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004188 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004189 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004190 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4191 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4192 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004193 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004194 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004195 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004196 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004197 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004198
4199 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004200}
4201
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004202bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004203 VkDevice device,
4204 VkImage image,
4205 VkSubresourceLayout* pLayout,
4206 VkResult result)
4207{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004208
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004209
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004210 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004211 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004212 }
4213
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004214 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004215 {
4216 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004217 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4218 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004219 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004220
4221 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004222}
4223
4224VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4225 VkDevice device,
4226 VkImage image,
4227 const VkImageSubresource* pSubresource,
4228 VkSubresourceLayout* pLayout)
4229{
4230 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004231
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004232 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4233
4234 PostGetImageSubresourceLayout(device, image, pLayout, result);
4235
4236 return result;
4237}
4238
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004239bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004240 VkDevice device,
4241 const VkImageViewCreateInfo* pCreateInfo)
4242{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004243 if(pCreateInfo != nullptr)
4244 {
4245 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004246 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004247 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004248 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004249 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004250 }
4251 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4252 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4253 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004254 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004255 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004256 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004257 }
4258 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4259 pCreateInfo->format > VK_FORMAT_END_RANGE)
4260 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004262 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004263 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004264 }
4265 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4266 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4267 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004268 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004269 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004270 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004271 }
4272 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4273 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4274 {
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, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004277 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004278 }
4279 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4280 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_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, VkChannelSwizzle pCreateInfo->channels.b, 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->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4287 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_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, VkChannelSwizzle pCreateInfo->channels.a, 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->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4294 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_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, VkImageAspect pCreateInfo->subresourceRange.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004298 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004299 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004300 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004301
4302 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004303}
4304
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004305bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004306 VkDevice device,
4307 VkImageView* pView,
4308 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004309{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004310
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004311 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004312 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004313 }
4314
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004315 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004316 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004317 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004318 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4319 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004320 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004321
4322 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004323}
4324
4325VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4326 VkDevice device,
4327 const VkImageViewCreateInfo* pCreateInfo,
4328 VkImageView* pView)
4329{
4330 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004331
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004332 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4333
4334 PostCreateImageView(device, pView, result);
4335
4336 return result;
4337}
4338
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004339bool PostDestroyImageView(
4340 VkDevice device,
4341 VkImageView imageView,
4342 VkResult result)
4343{
4344
4345
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004346 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004347 {
4348 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4349 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4350 return false;
4351 }
4352
4353 return true;
4354}
4355
4356VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4357 VkDevice device,
4358 VkImageView imageView)
4359{
4360 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4361
4362 PostDestroyImageView(device, imageView, result);
4363
4364 return result;
4365}
4366
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004367bool PreCreateAttachmentView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004368 VkDevice device,
Chia-I Wuc278df82015-07-07 11:50:03 +08004369 const VkAttachmentViewCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004370{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004371 if(pCreateInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004372 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004373 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_ATTACHMENT_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004374 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004375 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4376 "vkCreateAttachmentView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4377 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004378 }
4379 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4380 pCreateInfo->format > VK_FORMAT_END_RANGE)
4381 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004382 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4383 "vkCreateAttachmentView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
4384 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004385 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004386 }
4387
4388 return true;
4389}
4390
4391bool PostCreateAttachmentView(
4392 VkDevice device,
4393 VkAttachmentView* pView,
4394 VkResult result)
4395{
4396
4397 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004398 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004399 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004400
4401 if(result < VK_SUCCESS)
4402 {
4403 std::string reason = "vkCreateAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4404 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4405 return false;
4406 }
4407
4408 return true;
4409}
4410
4411VK_LAYER_EXPORT VkResult VKAPI vkCreateAttachmentView(
4412 VkDevice device,
4413 const VkAttachmentViewCreateInfo* pCreateInfo,
4414 VkAttachmentView* pView)
4415{
4416 PreCreateAttachmentView(device, pCreateInfo);
4417
4418 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateAttachmentView(device, pCreateInfo, pView);
4419
4420 PostCreateAttachmentView(device, pView, result);
4421
4422 return result;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004423}
4424
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004425bool PostDestroyAttachmentView(
4426 VkDevice device,
4427 VkAttachmentView attachmentView,
4428 VkResult result)
4429{
4430
4431
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004432 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004433 {
4434 std::string reason = "vkDestroyAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4435 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4436 return false;
4437 }
4438
4439 return true;
4440}
4441
4442VK_LAYER_EXPORT VkResult VKAPI vkDestroyAttachmentView(
4443 VkDevice device,
4444 VkAttachmentView attachmentView)
4445{
4446 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyAttachmentView(device, attachmentView);
4447
4448 PostDestroyAttachmentView(device, attachmentView, result);
4449
4450 return result;
4451}
4452
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004453bool PostDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004454 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004455 VkShaderModule shaderModule,
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004456 VkResult result)
4457{
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004458
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004459
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004460 if(result < VK_SUCCESS)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004461 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004462 std::string reason = "vkDestroyShaderModule 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;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004465 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004466
4467 return true;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004468}
4469
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004470VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004471 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004472 VkShaderModule shaderModule)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004473{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004474 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004475
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004476 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004477
4478 return result;
4479}
4480
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004481bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004482 VkDevice device,
4483 const VkShaderCreateInfo* pCreateInfo)
4484{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004485 if(pCreateInfo != nullptr)
4486 {
4487 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004488 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004489 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004490 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004491 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004492 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004493 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004494 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004495 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004496 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004497
4498 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004499}
4500
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004501bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004502 VkDevice device,
4503 VkShader* pShader,
4504 VkResult result)
4505{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004506
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004507 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004508 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004509 }
4510
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004511 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004512 {
4513 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004514 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4515 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004516 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004517
4518 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004519}
4520
4521VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4522 VkDevice device,
4523 const VkShaderCreateInfo* pCreateInfo,
4524 VkShader* pShader)
4525{
4526 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004527
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004528 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4529
4530 PostCreateShader(device, pShader, result);
4531
4532 return result;
4533}
4534
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004535bool PostDestroyShader(
4536 VkDevice device,
4537 VkShader shader,
4538 VkResult result)
4539{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004540
4541
4542 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004543 {
4544 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4545 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4546 return false;
4547 }
4548
4549 return true;
4550}
4551
4552VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4553 VkDevice device,
4554 VkShader shader)
4555{
4556 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4557
4558 PostDestroyShader(device, shader, result);
4559
4560 return result;
4561}
4562
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004563bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004564 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004565 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004566{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004567 if(pCreateInfo != nullptr)
4568 {
4569 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004570 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004571 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004572 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004573 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004574 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004575 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004576 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004577 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004578 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004579
4580 return true;
4581}
4582
4583bool PostCreatePipelineCache(
4584 VkDevice device,
4585 VkPipelineCache* pPipelineCache,
4586 VkResult result)
4587{
4588
4589 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004590 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004591 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004592
4593 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004594 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004595 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004596 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4597 return false;
4598 }
4599
4600 return true;
4601}
4602
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004603VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06004604 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004605 const VkPipelineCacheCreateInfo* pCreateInfo,
4606 VkPipelineCache* pPipelineCache)
4607{
4608 PreCreatePipelineCache(device, pCreateInfo);
4609
4610 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4611
4612 PostCreatePipelineCache(device, pPipelineCache, result);
4613
4614 return result;
4615}
4616
4617bool PostDestroyPipelineCache(
4618 VkDevice device,
4619 VkPipelineCache pipelineCache,
Tony Barboure307f582015-07-10 15:29:03 -06004620 VkResult result)
4621{
4622
Tony Barboure307f582015-07-10 15:29:03 -06004623
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004624 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004625 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004626 std::string reason = "vkDestroyPipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004627 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4628 return false;
4629 }
4630
4631 return true;
4632}
4633
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004634VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineCache(
4635 VkDevice device,
4636 VkPipelineCache pipelineCache)
4637{
4638 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache);
4639
4640 PostDestroyPipelineCache(device, pipelineCache, result);
4641
4642 return result;
4643}
4644
4645bool PostGetPipelineCacheSize(
4646 VkDevice device,
4647 VkPipelineCache pipelineCache)
4648{
4649
4650
4651 return true;
4652}
4653
4654VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4655 VkDevice device,
4656 VkPipelineCache pipelineCache)
4657{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004658 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004659
4660 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004661
4662 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004663}
4664
4665bool PostGetPipelineCacheData(
4666 VkDevice device,
4667 VkPipelineCache pipelineCache,
4668 void* pData,
4669 VkResult result)
4670{
4671
4672
4673 if(pData != nullptr)
4674 {
4675 }
4676
4677 if(result < VK_SUCCESS)
4678 {
4679 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4680 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4681 return false;
4682 }
4683
4684 return true;
4685}
4686
4687VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4688 VkDevice device,
4689 VkPipelineCache pipelineCache,
4690 void* pData)
4691{
4692 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4693
4694 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4695
4696 return result;
4697}
4698
4699bool PreMergePipelineCaches(
4700 VkDevice device,
4701 const VkPipelineCache* pSrcCaches)
4702{
4703 if(pSrcCaches != nullptr)
4704 {
4705 }
4706
4707 return true;
4708}
4709
4710bool PostMergePipelineCaches(
4711 VkDevice device,
4712 VkPipelineCache destCache,
4713 uint32_t srcCacheCount,
4714 VkResult result)
4715{
4716
4717
4718
4719 if(result < VK_SUCCESS)
4720 {
4721 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4722 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4723 return false;
4724 }
4725
4726 return true;
4727}
4728
4729VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4730 VkDevice device,
4731 VkPipelineCache destCache,
4732 uint32_t srcCacheCount,
4733 const VkPipelineCache* pSrcCaches)
4734{
4735 PreMergePipelineCaches(device, pSrcCaches);
4736
4737 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4738
4739 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4740
4741 return result;
4742}
4743
4744bool PreCreateGraphicsPipelines(
4745 VkDevice device,
4746 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4747{
4748 if(pCreateInfos != nullptr)
4749 {
4750 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4751 {
4752 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4753 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4754 return false;
4755 }
4756 if(pCreateInfos->pStages != nullptr)
4757 {
4758 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4759 {
4760 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4761 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4762 return false;
4763 }
4764 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4765 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4766 {
4767 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4768 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4769 return false;
4770 }
4771 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4772 {
4773 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4774 {
4775 }
4776 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4777 {
4778 }
4779 }
4780 }
4781 if(pCreateInfos->pVertexInputState != nullptr)
4782 {
4783 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4784 {
4785 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4786 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4787 return false;
4788 }
4789 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4790 {
4791 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4792 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4793 {
4794 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4795 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4796 return false;
4797 }
4798 }
4799 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4800 {
4801 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4802 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4803 {
4804 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4805 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4806 return false;
4807 }
4808 }
4809 }
4810 if(pCreateInfos->pInputAssemblyState != nullptr)
4811 {
4812 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4813 {
4814 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4815 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4816 return false;
4817 }
4818 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4819 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4820 {
4821 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4822 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4823 return false;
4824 }
4825 }
4826 if(pCreateInfos->pTessellationState != nullptr)
4827 {
4828 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4829 {
4830 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4831 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4832 return false;
4833 }
4834 }
4835 if(pCreateInfos->pViewportState != nullptr)
4836 {
4837 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4838 {
4839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4840 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4841 return false;
4842 }
4843 }
4844 if(pCreateInfos->pRasterState != nullptr)
4845 {
4846 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4847 {
4848 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4849 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4850 return false;
4851 }
4852 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4853 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4854 {
4855 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4856 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4857 return false;
4858 }
4859 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4860 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4861 {
4862 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4863 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4864 return false;
4865 }
4866 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4867 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4868 {
4869 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4870 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4871 return false;
4872 }
4873 }
4874 if(pCreateInfos->pMultisampleState != nullptr)
4875 {
4876 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4877 {
4878 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4879 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4880 return false;
4881 }
4882 }
4883 if(pCreateInfos->pDepthStencilState != nullptr)
4884 {
4885 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4886 {
4887 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4888 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4889 return false;
4890 }
4891 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4892 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4893 {
4894 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4895 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4896 return false;
4897 }
4898 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4899 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4900 {
4901 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4902 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4903 return false;
4904 }
4905 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4906 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4907 {
4908 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4909 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4910 return false;
4911 }
4912 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4913 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4914 {
4915 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4916 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4917 return false;
4918 }
4919 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4920 pCreateInfos->pDepthStencilState->front.stencilCompareOp > 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->front.stencilCompareOp, is an unrecognized enumerator");
4924 return false;
4925 }
4926 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4927 pCreateInfos->pDepthStencilState->back.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->back.stencilFailOp, is an unrecognized enumerator");
4931 return false;
4932 }
4933 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4934 pCreateInfos->pDepthStencilState->back.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->back.stencilPassOp, is an unrecognized enumerator");
4938 return false;
4939 }
4940 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4941 pCreateInfos->pDepthStencilState->back.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->back.stencilDepthFailOp, is an unrecognized enumerator");
4945 return false;
4946 }
4947 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4948 pCreateInfos->pDepthStencilState->back.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->back.stencilCompareOp, is an unrecognized enumerator");
4952 return false;
4953 }
4954 }
4955 if(pCreateInfos->pColorBlendState != nullptr)
4956 {
4957 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4958 {
4959 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4960 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4961 return false;
4962 }
4963 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4964 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4965 {
4966 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4967 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4968 return false;
4969 }
4970 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4971 {
4972 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4973 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4974 {
4975 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4976 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4977 return false;
4978 }
4979 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4980 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4981 {
4982 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4983 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4984 return false;
4985 }
4986 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4987 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4988 {
4989 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4990 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4991 return false;
4992 }
4993 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4994 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4995 {
4996 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4997 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4998 return false;
4999 }
5000 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
5001 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > 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->destBlendAlpha, is an unrecognized enumerator");
5005 return false;
5006 }
5007 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
5008 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
5009 {
5010 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5011 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
5012 return false;
5013 }
5014 }
5015 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06005016 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
5017 {
5018 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5019 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
5020 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005021 }
5022
5023 return true;
5024}
5025
5026bool PostCreateGraphicsPipelines(
5027 VkDevice device,
5028 VkPipelineCache pipelineCache,
5029 uint32_t count,
5030 VkPipeline* pPipelines,
5031 VkResult result)
5032{
5033
5034
5035
5036 if(pPipelines != nullptr)
5037 {
5038 }
5039
5040 if(result < VK_SUCCESS)
5041 {
5042 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
5043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5044 return false;
5045 }
5046
5047 return true;
5048}
5049
5050VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
5051 VkDevice device,
5052 VkPipelineCache pipelineCache,
5053 uint32_t count,
5054 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5055 VkPipeline* pPipelines)
5056{
5057 PreCreateGraphicsPipelines(device, pCreateInfos);
5058
5059 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5060
5061 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
5062
5063 return result;
5064}
5065
5066bool PreCreateComputePipelines(
5067 VkDevice device,
5068 const VkComputePipelineCreateInfo* pCreateInfos)
5069{
5070 if(pCreateInfos != nullptr)
5071 {
5072 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
5073 {
5074 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5075 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
5076 return false;
5077 }
5078 if(pCreateInfos->cs.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
5079 {
5080 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5081 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
5082 return false;
5083 }
5084 if(pCreateInfos->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5085 pCreateInfos->cs.stage > VK_SHADER_STAGE_END_RANGE)
5086 {
5087 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5088 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
5089 return false;
5090 }
5091 if(pCreateInfos->cs.pSpecializationInfo != nullptr)
5092 {
5093 if(pCreateInfos->cs.pSpecializationInfo->pMap != nullptr)
5094 {
5095 }
5096 if(pCreateInfos->cs.pSpecializationInfo->pData != nullptr)
5097 {
5098 }
5099 }
5100 }
5101
5102 return true;
5103}
5104
5105bool PostCreateComputePipelines(
5106 VkDevice device,
5107 VkPipelineCache pipelineCache,
5108 uint32_t count,
5109 VkPipeline* pPipelines,
5110 VkResult result)
5111{
5112
5113
5114
5115 if(pPipelines != nullptr)
5116 {
5117 }
5118
5119 if(result < VK_SUCCESS)
5120 {
5121 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
5122 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5123 return false;
5124 }
5125
5126 return true;
5127}
5128
5129VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
5130 VkDevice device,
5131 VkPipelineCache pipelineCache,
5132 uint32_t count,
5133 const VkComputePipelineCreateInfo* pCreateInfos,
5134 VkPipeline* pPipelines)
5135{
5136 PreCreateComputePipelines(device, pCreateInfos);
5137
5138 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5139
5140 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
5141
5142 return result;
5143}
5144
Tony Barboure307f582015-07-10 15:29:03 -06005145bool PostDestroyPipeline(
5146 VkDevice device,
5147 VkPipeline pipeline,
5148 VkResult result)
5149{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005150
5151
5152 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06005153 {
5154 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
5155 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5156 return false;
5157 }
5158
5159 return true;
5160}
5161
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005162VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5163 VkDevice device,
5164 VkPipeline pipeline)
5165{
5166 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5167
5168 PostDestroyPipeline(device, pipeline, result);
5169
5170 return result;
5171}
5172
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005173bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005174 VkDevice device,
5175 const VkPipelineLayoutCreateInfo* pCreateInfo)
5176{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005177 if(pCreateInfo != nullptr)
5178 {
5179 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005180 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005181 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005182 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5183 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005184 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005185 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005186 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005187 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005188 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005189 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005190 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005191 }
5192
5193 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005194}
5195
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005196bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005197 VkDevice device,
5198 VkPipelineLayout* pPipelineLayout,
5199 VkResult result)
5200{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005201
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005202 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005203 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005204 }
5205
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005206 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005207 {
5208 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005209 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5210 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005211 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005212
5213 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005214}
5215
5216VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5217 VkDevice device,
5218 const VkPipelineLayoutCreateInfo* pCreateInfo,
5219 VkPipelineLayout* pPipelineLayout)
5220{
5221 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005222
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005223 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5224
5225 PostCreatePipelineLayout(device, pPipelineLayout, result);
5226
5227 return result;
5228}
5229
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005230bool PostDestroyPipelineLayout(
5231 VkDevice device,
5232 VkPipelineLayout pipelineLayout,
5233 VkResult result)
5234{
5235
5236
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005237 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005238 {
5239 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5240 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5241 return false;
5242 }
5243
5244 return true;
5245}
5246
5247VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5248 VkDevice device,
5249 VkPipelineLayout pipelineLayout)
5250{
5251 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5252
5253 PostDestroyPipelineLayout(device, pipelineLayout, result);
5254
5255 return result;
5256}
5257
5258bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005259 VkDevice device,
5260 const VkSamplerCreateInfo* pCreateInfo)
5261{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005262 if(pCreateInfo != nullptr)
5263 {
5264 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005265 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005266 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005267 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005268 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005269 }
5270 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5271 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5272 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005273 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005274 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005275 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005276 }
5277 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5278 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5279 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005280 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005281 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005282 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005283 }
5284 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5285 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5286 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005287 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005288 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005289 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005290 }
5291 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5292 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5293 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005295 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005296 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005297 }
5298 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5299 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5300 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005301 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005302 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005303 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005304 }
5305 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5306 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5307 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005308 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005309 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005310 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005311 }
5312 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5313 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5314 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005315 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005316 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005317 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005318 }
5319 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5320 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5321 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005322 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005323 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005324 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005325 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005326 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005327
5328 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005329}
5330
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005331bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005332 VkDevice device,
5333 VkSampler* pSampler,
5334 VkResult result)
5335{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005336
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005337 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005338 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005339 }
5340
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005341 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005342 {
5343 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005344 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5345 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005346 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005347
5348 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005349}
5350
5351VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5352 VkDevice device,
5353 const VkSamplerCreateInfo* pCreateInfo,
5354 VkSampler* pSampler)
5355{
5356 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005357
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005358 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5359
5360 PostCreateSampler(device, pSampler, result);
5361
5362 return result;
5363}
5364
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005365bool PostDestroySampler(
5366 VkDevice device,
5367 VkSampler sampler,
5368 VkResult result)
5369{
5370
5371
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005372 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005373 {
5374 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5375 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5376 return false;
5377 }
5378
5379 return true;
5380}
5381
5382VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5383 VkDevice device,
5384 VkSampler sampler)
5385{
5386 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5387
5388 PostDestroySampler(device, sampler, result);
5389
5390 return result;
5391}
5392
5393bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005394 VkDevice device,
5395 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5396{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005397 if(pCreateInfo != nullptr)
5398 {
5399 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005400 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005401 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005402 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005403 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005404 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005405 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005406 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005407 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5408 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5409 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005410 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005411 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005412 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005413 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005414 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005415 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005416 }
5417 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005418 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005419
5420 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005421}
5422
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005423bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005424 VkDevice device,
5425 VkDescriptorSetLayout* pSetLayout,
5426 VkResult result)
5427{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005428
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005429 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005430 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005431 }
5432
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005433 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005434 {
5435 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005436 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5437 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005438 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005439
5440 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005441}
5442
5443VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5444 VkDevice device,
5445 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5446 VkDescriptorSetLayout* pSetLayout)
5447{
5448 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005449
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005450 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5451
5452 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5453
5454 return result;
5455}
5456
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005457bool PostDestroyDescriptorSetLayout(
5458 VkDevice device,
5459 VkDescriptorSetLayout descriptorSetLayout,
5460 VkResult result)
5461{
5462
5463
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005464 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005465 {
5466 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5467 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5468 return false;
5469 }
5470
5471 return true;
5472}
5473
5474VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5475 VkDevice device,
5476 VkDescriptorSetLayout descriptorSetLayout)
5477{
5478 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5479
5480 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5481
5482 return result;
5483}
5484
5485bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005486 VkDevice device,
5487 const VkDescriptorPoolCreateInfo* pCreateInfo)
5488{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005489 if(pCreateInfo != nullptr)
5490 {
5491 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005492 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005493 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005494 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005495 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005496 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005497 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005498 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005499 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5500 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5501 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005502 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005503 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005504 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005505 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005506 }
5507 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005508
5509 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005510}
5511
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005512bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005513 VkDevice device,
5514 VkDescriptorPoolUsage poolUsage,
5515 uint32_t maxSets,
5516 VkDescriptorPool* pDescriptorPool,
5517 VkResult result)
5518{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519
5520 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5521 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5522 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005523 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005524 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005525 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005526 }
5527
5528
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005529 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005530 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005531 }
5532
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005533 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005534 {
5535 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005536 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5537 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005538 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005539
5540 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005541}
5542
5543VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5544 VkDevice device,
5545 VkDescriptorPoolUsage poolUsage,
5546 uint32_t maxSets,
5547 const VkDescriptorPoolCreateInfo* pCreateInfo,
5548 VkDescriptorPool* pDescriptorPool)
5549{
5550 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005551
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005552 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5553
5554 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5555
5556 return result;
5557}
5558
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005559bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005560 VkDevice device,
5561 VkDescriptorPool descriptorPool,
5562 VkResult result)
5563{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005564
5565
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005566 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005567 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005568 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5569 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5570 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005571 }
5572
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005573 return true;
5574}
5575
5576VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5577 VkDevice device,
5578 VkDescriptorPool descriptorPool)
5579{
5580 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5581
5582 PostDestroyDescriptorPool(device, descriptorPool, result);
5583
5584 return result;
5585}
5586
5587bool PostResetDescriptorPool(
5588 VkDevice device,
5589 VkDescriptorPool descriptorPool,
5590 VkResult result)
5591{
5592
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005593
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005594 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005595 {
5596 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005597 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5598 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005599 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005600
5601 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005602}
5603
5604VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5605 VkDevice device,
5606 VkDescriptorPool descriptorPool)
5607{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005608 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5609
5610 PostResetDescriptorPool(device, descriptorPool, result);
5611
5612 return result;
5613}
5614
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005615bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005616 VkDevice device,
5617 const VkDescriptorSetLayout* pSetLayouts)
5618{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005619 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005620 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005621 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005622
5623 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005624}
5625
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005626bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005627 VkDevice device,
5628 VkDescriptorPool descriptorPool,
5629 VkDescriptorSetUsage setUsage,
5630 uint32_t count,
5631 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005632 VkResult result)
5633{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005634
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005635
5636 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5637 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5638 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005639 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005640 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005641 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005642 }
5643
5644
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005645 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005646 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005647 }
5648
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005649 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005650 {
5651 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005652 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5653 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005654 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005655
5656 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005657}
5658
5659VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5660 VkDevice device,
5661 VkDescriptorPool descriptorPool,
5662 VkDescriptorSetUsage setUsage,
5663 uint32_t count,
5664 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06005665 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005666{
5667 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005668
Cody Northropc8aa4a52015-08-03 12:47:29 -06005669 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005670
Cody Northropc8aa4a52015-08-03 12:47:29 -06005671 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005672
5673 return result;
5674}
5675
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005676bool PreFreeDescriptorSets(
5677 VkDevice device,
5678 const VkDescriptorSet* pDescriptorSets)
5679{
5680 if(pDescriptorSets != nullptr)
5681 {
5682 }
5683
5684 return true;
5685}
5686
5687bool PostFreeDescriptorSets(
5688 VkDevice device,
5689 VkDescriptorPool descriptorPool,
5690 uint32_t count,
5691 VkResult result)
5692{
5693
5694
5695
5696 if(result < VK_SUCCESS)
5697 {
5698 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5699 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5700 return false;
5701 }
5702
5703 return true;
5704}
5705
5706VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
5707 VkDevice device,
5708 VkDescriptorPool descriptorPool,
5709 uint32_t count,
5710 const VkDescriptorSet* pDescriptorSets)
5711{
5712 PreFreeDescriptorSets(device, pDescriptorSets);
5713
5714 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
5715
5716 PostFreeDescriptorSets(device, descriptorPool, count, result);
5717
5718 return result;
5719}
5720
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005721bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005722 VkDevice device,
5723 const VkWriteDescriptorSet* pDescriptorWrites,
5724 const VkCopyDescriptorSet* pDescriptorCopies)
5725{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005726 if(pDescriptorWrites != nullptr)
5727 {
5728 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005729 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005730 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005731 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005732 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005733 }
5734 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5735 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5736 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005737 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005738 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005739 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005740 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005741 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005742 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005743 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5744 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5745 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005746 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005747 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005748 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005749 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005750 }
5751 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005752
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005753 if(pDescriptorCopies != nullptr)
5754 {
5755 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005756 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005757 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005758 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005759 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005760 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005761 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005762
5763 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005764}
5765
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005766bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005767 VkDevice device,
5768 uint32_t writeCount,
5769 uint32_t copyCount,
5770 VkResult result)
5771{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772
5773
5774
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005775 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005776 {
5777 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005778 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5779 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005780 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005781
5782 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005783}
5784
5785VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
5786 VkDevice device,
5787 uint32_t writeCount,
5788 const VkWriteDescriptorSet* pDescriptorWrites,
5789 uint32_t copyCount,
5790 const VkCopyDescriptorSet* pDescriptorCopies)
5791{
5792 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005793
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005794 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
5795
5796 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
5797
5798 return result;
5799}
5800
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005801bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005803 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005804{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005805 if(pCreateInfo != nullptr)
5806 {
5807 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005808 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005809 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005810 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005811 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005812 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005813 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005814 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005815 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005816 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005817 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005818 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005819 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005820
5821 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005822}
5823
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005824bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005825 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005826 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005827 VkResult result)
5828{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005829
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005830 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005831 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005832 }
5833
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005834 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005835 {
5836 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005837 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5838 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005839 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005840
5841 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005842}
5843
5844VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5845 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005846 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5847 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005848{
5849 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005850
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005851 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5852
5853 PostCreateDynamicViewportState(device, pState, result);
5854
5855 return result;
5856}
5857
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005858bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005859 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005860 VkDynamicViewportState dynamicViewportState,
5861 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005862{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005863
5864
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005865 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005866 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005867 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
5868 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5869 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005870 }
5871
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005872 return true;
5873}
5874
5875VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
5876 VkDevice device,
5877 VkDynamicViewportState dynamicViewportState)
5878{
5879 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
5880
5881 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
5882
5883 return result;
5884}
5885
5886bool PreCreateDynamicRasterState(
5887 VkDevice device,
5888 const VkDynamicRasterStateCreateInfo* pCreateInfo)
5889{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005890 if(pCreateInfo != nullptr)
5891 {
5892 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_RASTER_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005893 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005894 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005895 "vkCreateDynamicRasterState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005896 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005897 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005898 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005899
5900 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005901}
5902
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005903bool PostCreateDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005904 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005905 VkDynamicRasterState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005906 VkResult result)
5907{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005908
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005909 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005910 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005911 }
5912
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005913 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005914 {
5915 std::string reason = "vkCreateDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005916 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5917 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005918 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005919
5920 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005921}
5922
5923VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(
5924 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005925 const VkDynamicRasterStateCreateInfo* pCreateInfo,
5926 VkDynamicRasterState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005927{
5928 PreCreateDynamicRasterState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005929
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005930 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterState(device, pCreateInfo, pState);
5931
5932 PostCreateDynamicRasterState(device, pState, result);
5933
5934 return result;
5935}
5936
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005937bool PostDestroyDynamicRasterState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005938 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005939 VkDynamicRasterState dynamicRasterState,
5940 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005941{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005942
5943
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005944 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005945 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005946 std::string reason = "vkDestroyDynamicRasterState parameter, VkResult result, is " + EnumeratorString(result);
5947 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5948 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005949 }
5950
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005951 return true;
5952}
5953
5954VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicRasterState(
5955 VkDevice device,
5956 VkDynamicRasterState dynamicRasterState)
5957{
5958 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicRasterState(device, dynamicRasterState);
5959
5960 PostDestroyDynamicRasterState(device, dynamicRasterState, result);
5961
5962 return result;
5963}
5964
5965bool PreCreateDynamicColorBlendState(
5966 VkDevice device,
5967 const VkDynamicColorBlendStateCreateInfo* pCreateInfo)
5968{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005969 if(pCreateInfo != nullptr)
5970 {
5971 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_COLOR_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005972 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005973 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005974 "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005975 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005976 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005977 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005978
5979 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005980}
5981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005982bool PostCreateDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005983 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005984 VkDynamicColorBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005985 VkResult result)
5986{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005987
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005988 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005989 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005990 }
5991
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005992 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005993 {
5994 std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005995 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5996 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005997 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005998
5999 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006000}
6001
6002VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
6003 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006004 const VkDynamicColorBlendStateCreateInfo* pCreateInfo,
6005 VkDynamicColorBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006006{
6007 PreCreateDynamicColorBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006008
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006009 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState);
6010
6011 PostCreateDynamicColorBlendState(device, pState, result);
6012
6013 return result;
6014}
6015
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006016bool PostDestroyDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006017 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006018 VkDynamicColorBlendState dynamicColorBlendState,
6019 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006020{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006021
6022
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006023 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006024 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006025 std::string reason = "vkDestroyDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
6026 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6027 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006028 }
6029
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006030 return true;
6031}
6032
6033VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicColorBlendState(
6034 VkDevice device,
6035 VkDynamicColorBlendState dynamicColorBlendState)
6036{
6037 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicColorBlendState(device, dynamicColorBlendState);
6038
6039 PostDestroyDynamicColorBlendState(device, dynamicColorBlendState, result);
6040
6041 return result;
6042}
6043
6044bool PreCreateDynamicDepthStencilState(
6045 VkDevice device,
6046 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo)
6047{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006048 if(pCreateInfo != nullptr)
6049 {
6050 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_STENCIL_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006051 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006052 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006053 "vkCreateDynamicDepthStencilState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006054 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006055 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006056 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006057
6058 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006059}
6060
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006061bool PostCreateDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006062 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006063 VkDynamicDepthStencilState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006064 VkResult result)
6065{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006066
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006067 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006068 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006069 }
6070
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006071 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006072 {
6073 std::string reason = "vkCreateDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006074 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6075 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006076 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006077
6078 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006079}
6080
6081VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(
6082 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006083 const VkDynamicDepthStencilStateCreateInfo* pCreateInfo,
6084 VkDynamicDepthStencilState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006085{
6086 PreCreateDynamicDepthStencilState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006087
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006088 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthStencilState(device, pCreateInfo, pState);
6089
6090 PostCreateDynamicDepthStencilState(device, pState, result);
6091
6092 return result;
6093}
6094
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006095bool PostDestroyDynamicDepthStencilState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006096 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006097 VkDynamicDepthStencilState dynamicDepthStencilState,
6098 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006099{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006100
6101
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006102 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006103 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006104 std::string reason = "vkDestroyDynamicDepthStencilState parameter, VkResult result, is " + EnumeratorString(result);
6105 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6106 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006107 }
6108
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006109 return true;
6110}
6111
6112VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthStencilState(
6113 VkDevice device,
6114 VkDynamicDepthStencilState dynamicDepthStencilState)
6115{
6116 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthStencilState(device, dynamicDepthStencilState);
6117
6118 PostDestroyDynamicDepthStencilState(device, dynamicDepthStencilState, result);
6119
6120 return result;
6121}
6122
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006123bool PreCreateFramebuffer(
6124 VkDevice device,
6125 const VkFramebufferCreateInfo* pCreateInfo)
6126{
6127 if(pCreateInfo != nullptr)
6128 {
6129 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
6130 {
6131 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6132 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6133 return false;
6134 }
6135 if(pCreateInfo->pAttachments != nullptr)
6136 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006137 }
6138 }
6139
6140 return true;
6141}
6142
6143bool PostCreateFramebuffer(
6144 VkDevice device,
6145 VkFramebuffer* pFramebuffer,
6146 VkResult result)
6147{
6148
6149 if(pFramebuffer != nullptr)
6150 {
6151 }
6152
6153 if(result < VK_SUCCESS)
6154 {
6155 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6156 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6157 return false;
6158 }
6159
6160 return true;
6161}
6162
6163VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
6164 VkDevice device,
6165 const VkFramebufferCreateInfo* pCreateInfo,
6166 VkFramebuffer* pFramebuffer)
6167{
6168 PreCreateFramebuffer(device, pCreateInfo);
6169
6170 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
6171
6172 PostCreateFramebuffer(device, pFramebuffer, result);
6173
6174 return result;
6175}
6176
6177bool PostDestroyFramebuffer(
6178 VkDevice device,
6179 VkFramebuffer framebuffer,
6180 VkResult result)
6181{
6182
6183
6184 if(result < VK_SUCCESS)
6185 {
6186 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6187 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6188 return false;
6189 }
6190
6191 return true;
6192}
6193
6194VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
6195 VkDevice device,
6196 VkFramebuffer framebuffer)
6197{
6198 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
6199
6200 PostDestroyFramebuffer(device, framebuffer, result);
6201
6202 return result;
6203}
6204
6205bool PreCreateRenderPass(
6206 VkDevice device,
6207 const VkRenderPassCreateInfo* pCreateInfo)
6208{
6209 if(pCreateInfo != nullptr)
6210 {
6211 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
6212 {
6213 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6214 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6215 return false;
6216 }
6217 if(pCreateInfo->pAttachments != nullptr)
6218 {
6219 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
6220 {
6221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6222 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
6223 return false;
6224 }
6225 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
6226 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
6227 {
6228 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6229 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
6230 return false;
6231 }
6232 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6233 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6234 {
6235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6236 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
6237 return false;
6238 }
6239 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6240 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6241 {
6242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6243 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
6244 return false;
6245 }
6246 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6247 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6248 {
6249 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6250 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
6251 return false;
6252 }
6253 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6254 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6255 {
6256 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6257 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
6258 return false;
6259 }
6260 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6261 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
6262 {
6263 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6264 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
6265 return false;
6266 }
6267 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6268 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
6269 {
6270 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6271 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
6272 return false;
6273 }
6274 }
6275 if(pCreateInfo->pSubpasses != nullptr)
6276 {
6277 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
6278 {
6279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6280 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
6281 return false;
6282 }
6283 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6284 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6285 {
6286 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6287 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
6288 return false;
6289 }
6290 if(pCreateInfo->pSubpasses->inputAttachments != nullptr)
6291 {
6292 if(pCreateInfo->pSubpasses->inputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6293 pCreateInfo->pSubpasses->inputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6294 {
6295 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6296 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->inputAttachments->layout, is an unrecognized enumerator");
6297 return false;
6298 }
6299 }
6300 if(pCreateInfo->pSubpasses->colorAttachments != nullptr)
6301 {
6302 if(pCreateInfo->pSubpasses->colorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6303 pCreateInfo->pSubpasses->colorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6304 {
6305 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6306 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->colorAttachments->layout, is an unrecognized enumerator");
6307 return false;
6308 }
6309 }
6310 if(pCreateInfo->pSubpasses->resolveAttachments != nullptr)
6311 {
6312 if(pCreateInfo->pSubpasses->resolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6313 pCreateInfo->pSubpasses->resolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6314 {
6315 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6316 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->resolveAttachments->layout, is an unrecognized enumerator");
6317 return false;
6318 }
6319 }
6320 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6321 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
6322 {
6323 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6324 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
6325 return false;
6326 }
6327 if(pCreateInfo->pSubpasses->preserveAttachments != nullptr)
6328 {
6329 if(pCreateInfo->pSubpasses->preserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6330 pCreateInfo->pSubpasses->preserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
6331 {
6332 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6333 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->preserveAttachments->layout, is an unrecognized enumerator");
6334 return false;
6335 }
6336 }
6337 }
6338 if(pCreateInfo->pDependencies != nullptr)
6339 {
6340 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
6341 {
6342 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6343 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
6344 return false;
6345 }
6346 }
6347 }
6348
6349 return true;
6350}
6351
6352bool PostCreateRenderPass(
6353 VkDevice device,
6354 VkRenderPass* pRenderPass,
6355 VkResult result)
6356{
6357
6358 if(pRenderPass != nullptr)
6359 {
6360 }
6361
6362 if(result < VK_SUCCESS)
6363 {
6364 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6365 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6366 return false;
6367 }
6368
6369 return true;
6370}
6371
6372VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
6373 VkDevice device,
6374 const VkRenderPassCreateInfo* pCreateInfo,
6375 VkRenderPass* pRenderPass)
6376{
6377 PreCreateRenderPass(device, pCreateInfo);
6378
6379 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
6380
6381 PostCreateRenderPass(device, pRenderPass, result);
6382
6383 return result;
6384}
6385
6386bool PostDestroyRenderPass(
6387 VkDevice device,
6388 VkRenderPass renderPass,
6389 VkResult result)
6390{
6391
6392
6393 if(result < VK_SUCCESS)
6394 {
6395 std::string reason = "vkDestroyRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6396 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6397 return false;
6398 }
6399
6400 return true;
6401}
6402
6403VK_LAYER_EXPORT VkResult VKAPI vkDestroyRenderPass(
6404 VkDevice device,
6405 VkRenderPass renderPass)
6406{
6407 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass);
6408
6409 PostDestroyRenderPass(device, renderPass, result);
6410
6411 return result;
6412}
6413
6414bool PostGetRenderAreaGranularity(
6415 VkDevice device,
6416 VkRenderPass renderPass,
6417 VkExtent2D* pGranularity,
6418 VkResult result)
6419{
6420
6421
6422 if(pGranularity != nullptr)
6423 {
6424 }
6425
6426 if(result < VK_SUCCESS)
6427 {
6428 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
6429 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6430 return false;
6431 }
6432
6433 return true;
6434}
6435
6436VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
6437 VkDevice device,
6438 VkRenderPass renderPass,
6439 VkExtent2D* pGranularity)
6440{
6441 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
6442
6443 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
6444
6445 return result;
6446}
6447
6448bool PreCreateCommandPool(
6449 VkDevice device,
6450 const VkCmdPoolCreateInfo* pCreateInfo)
6451{
6452 if(pCreateInfo != nullptr)
6453 {
6454 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
6455 {
6456 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6457 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6458 return false;
6459 }
6460 }
6461
6462 return true;
6463}
6464
6465bool PostCreateCommandPool(
6466 VkDevice device,
6467 VkCmdPool* pCmdPool,
6468 VkResult result)
6469{
6470
6471 if(pCmdPool != nullptr)
6472 {
6473 }
6474
6475 if(result < VK_SUCCESS)
6476 {
6477 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6478 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6479 return false;
6480 }
6481
6482 return true;
6483}
6484
6485VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
6486 VkDevice device,
6487 const VkCmdPoolCreateInfo* pCreateInfo,
6488 VkCmdPool* pCmdPool)
6489{
6490 PreCreateCommandPool(device, pCreateInfo);
6491
6492 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
6493
6494 PostCreateCommandPool(device, pCmdPool, result);
6495
6496 return result;
6497}
6498
6499bool PostDestroyCommandPool(
6500 VkDevice device,
6501 VkCmdPool cmdPool,
6502 VkResult result)
6503{
6504
6505
6506 if(result < VK_SUCCESS)
6507 {
6508 std::string reason = "vkDestroyCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6509 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6510 return false;
6511 }
6512
6513 return true;
6514}
6515
6516VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandPool(
6517 VkDevice device,
6518 VkCmdPool cmdPool)
6519{
6520 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, cmdPool);
6521
6522 PostDestroyCommandPool(device, cmdPool, result);
6523
6524 return result;
6525}
6526
6527bool PostResetCommandPool(
6528 VkDevice device,
6529 VkCmdPool cmdPool,
6530 VkCmdPoolResetFlags flags,
6531 VkResult result)
6532{
6533
6534
6535
6536 if(result < VK_SUCCESS)
6537 {
6538 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6539 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6540 return false;
6541 }
6542
6543 return true;
6544}
6545
6546VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
6547 VkDevice device,
6548 VkCmdPool cmdPool,
6549 VkCmdPoolResetFlags flags)
6550{
6551 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
6552
6553 PostResetCommandPool(device, cmdPool, flags, result);
6554
6555 return result;
6556}
6557
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006558bool PreCreateCommandBuffer(
6559 VkDevice device,
6560 const VkCmdBufferCreateInfo* pCreateInfo)
6561{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006562 if(pCreateInfo != nullptr)
6563 {
6564 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006565 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006566 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006567 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006568 return false;
6569 }
6570 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6571 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6572 {
6573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006574 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006575 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006576 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006577 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006578
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006579 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006580}
6581
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006582bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006583 VkDevice device,
6584 VkCmdBuffer* pCmdBuffer,
6585 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006586{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006587
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006588 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006589 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006590 }
6591
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006592 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006593 {
6594 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006595 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6596 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006597 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006598
6599 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006600}
6601
6602VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6603 VkDevice device,
6604 const VkCmdBufferCreateInfo* pCreateInfo,
6605 VkCmdBuffer* pCmdBuffer)
6606{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006607 PreCreateCommandBuffer(device, pCreateInfo);
6608
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006609 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6610
6611 PostCreateCommandBuffer(device, pCmdBuffer, result);
6612
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006613 return result;
6614}
6615
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006616bool PostDestroyCommandBuffer(
6617 VkDevice device,
6618 VkCmdBuffer commandBuffer,
6619 VkResult result)
6620{
6621
6622
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006623 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006624 {
6625 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6626 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6627 return false;
6628 }
6629
6630 return true;
6631}
6632
6633VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6634 VkDevice device,
6635 VkCmdBuffer commandBuffer)
6636{
6637 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6638
6639 PostDestroyCommandBuffer(device, commandBuffer, result);
6640
6641 return result;
6642}
6643
6644bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006645 VkCmdBuffer cmdBuffer,
6646 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006647{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006648 if(pBeginInfo != nullptr)
6649 {
6650 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006651 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006652 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006653 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006654 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006655 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006656 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006657
6658 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006659}
6660
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006661bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006662 VkCmdBuffer cmdBuffer,
6663 VkResult result)
6664{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006665
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006666 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006667 {
6668 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006669 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6670 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006671 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006672
6673 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006674}
6675
6676VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6677 VkCmdBuffer cmdBuffer,
6678 const VkCmdBufferBeginInfo* pBeginInfo)
6679{
6680 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006681
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006682 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6683
6684 PostBeginCommandBuffer(cmdBuffer, result);
6685
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006686 return result;
6687}
6688
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006689bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006690 VkCmdBuffer cmdBuffer,
6691 VkResult result)
6692{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006693
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006694 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006695 {
6696 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006697 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6698 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006699 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006700
6701 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006702}
6703
6704VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6705 VkCmdBuffer cmdBuffer)
6706{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006707 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6708
6709 PostEndCommandBuffer(cmdBuffer, result);
6710
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006711 return result;
6712}
6713
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006714bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006715 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006716 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006717 VkResult result)
6718{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006719
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006720
6721 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006722 {
6723 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006724 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6725 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006726 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006727
6728 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729}
6730
6731VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006732 VkCmdBuffer cmdBuffer,
6733 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006734{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006735 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006736
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006737 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006738
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006739 return result;
6740}
6741
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006742bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006743 VkCmdBuffer cmdBuffer,
6744 VkPipelineBindPoint pipelineBindPoint,
6745 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006746{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006747
6748 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6749 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6750 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006751 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006752 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006753 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006754 }
6755
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006756
6757 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006758}
6759
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006760VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6761 VkCmdBuffer cmdBuffer,
6762 VkPipelineBindPoint pipelineBindPoint,
6763 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006764{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006765 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6766
6767 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6768}
6769
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006770bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006771 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006772 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006773{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006774
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006775
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006776 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006777}
6778
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006779VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006780 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006781 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006782{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006783 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006784
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006785 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006786}
6787
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006788bool PostCmdBindDynamicRasterState(
6789 VkCmdBuffer cmdBuffer,
6790 VkDynamicRasterState dynamicRasterState)
6791{
6792
6793
6794 return true;
6795}
6796
6797VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicRasterState(
6798 VkCmdBuffer cmdBuffer,
6799 VkDynamicRasterState dynamicRasterState)
6800{
6801 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6802
6803 PostCmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
6804}
6805
6806bool PostCmdBindDynamicColorBlendState(
6807 VkCmdBuffer cmdBuffer,
6808 VkDynamicColorBlendState dynamicColorBlendState)
6809{
6810
6811
6812 return true;
6813}
6814
6815VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicColorBlendState(
6816 VkCmdBuffer cmdBuffer,
6817 VkDynamicColorBlendState dynamicColorBlendState)
6818{
6819 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6820
6821 PostCmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6822}
6823
6824bool PostCmdBindDynamicDepthStencilState(
6825 VkCmdBuffer cmdBuffer,
6826 VkDynamicDepthStencilState dynamicDepthStencilState)
6827{
6828
6829
6830 return true;
6831}
6832
6833VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthStencilState(
6834 VkCmdBuffer cmdBuffer,
6835 VkDynamicDepthStencilState dynamicDepthStencilState)
6836{
6837 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6838
6839 PostCmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
6840}
6841
6842bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006843 VkCmdBuffer cmdBuffer,
6844 const VkDescriptorSet* pDescriptorSets,
6845 const uint32_t* pDynamicOffsets)
6846{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006847 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006848 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006849 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006850
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006851 if(pDynamicOffsets != nullptr)
6852 {
6853 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006854
6855 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006856}
6857
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006858bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006859 VkCmdBuffer cmdBuffer,
6860 VkPipelineBindPoint pipelineBindPoint,
6861 VkPipelineLayout layout,
6862 uint32_t firstSet,
6863 uint32_t setCount,
6864 uint32_t dynamicOffsetCount)
6865{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006866
6867 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6868 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6869 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006870 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006871 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006872 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006873 }
6874
6875
6876
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006877
6878
6879 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006880}
6881
6882VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6883 VkCmdBuffer cmdBuffer,
6884 VkPipelineBindPoint pipelineBindPoint,
6885 VkPipelineLayout layout,
6886 uint32_t firstSet,
6887 uint32_t setCount,
6888 const VkDescriptorSet* pDescriptorSets,
6889 uint32_t dynamicOffsetCount,
6890 const uint32_t* pDynamicOffsets)
6891{
6892 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006893
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006894 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6895
6896 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6897}
6898
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006899bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006900 VkCmdBuffer cmdBuffer,
6901 VkBuffer buffer,
6902 VkDeviceSize offset,
6903 VkIndexType indexType)
6904{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006905
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006906
6907
6908 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6909 indexType > VK_INDEX_TYPE_END_RANGE)
6910 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006911 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006912 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006913 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006914 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006915
6916 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006917}
6918
6919VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6920 VkCmdBuffer cmdBuffer,
6921 VkBuffer buffer,
6922 VkDeviceSize offset,
6923 VkIndexType indexType)
6924{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006925 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6926
6927 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6928}
6929
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006930bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006931 VkCmdBuffer cmdBuffer,
6932 const VkBuffer* pBuffers,
6933 const VkDeviceSize* pOffsets)
6934{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006935 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006936 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006937 }
6938
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006939 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006940 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006941 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006942
6943 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006944}
6945
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006946bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006947 VkCmdBuffer cmdBuffer,
6948 uint32_t startBinding,
6949 uint32_t bindingCount)
6950{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006951
6952
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006953
6954 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006955}
6956
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06006957VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006958 VkCmdBuffer cmdBuffer,
6959 uint32_t startBinding,
6960 uint32_t bindingCount,
6961 const VkBuffer* pBuffers,
6962 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006963{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006964 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006965
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006966 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
6967
6968 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006969}
6970
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006971bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006972 VkCmdBuffer cmdBuffer,
6973 uint32_t firstVertex,
6974 uint32_t vertexCount,
6975 uint32_t firstInstance,
6976 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006977{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006978
6979
6980
6981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006982
6983 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006984}
6985
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006986VK_LAYER_EXPORT void VKAPI vkCmdDraw(
6987 VkCmdBuffer cmdBuffer,
6988 uint32_t firstVertex,
6989 uint32_t vertexCount,
6990 uint32_t firstInstance,
6991 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006992{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006993 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
6994
6995 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006996}
6997
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006998bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006999 VkCmdBuffer cmdBuffer,
7000 uint32_t firstIndex,
7001 uint32_t indexCount,
7002 int32_t vertexOffset,
7003 uint32_t firstInstance,
7004 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007005{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007006
7007
7008
7009
7010
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007011
7012 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007013}
7014
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007015VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7016 VkCmdBuffer cmdBuffer,
7017 uint32_t firstIndex,
7018 uint32_t indexCount,
7019 int32_t vertexOffset,
7020 uint32_t firstInstance,
7021 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007022{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007023 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7024
7025 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7026}
7027
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007028bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007029 VkCmdBuffer cmdBuffer,
7030 VkBuffer buffer,
7031 VkDeviceSize offset,
7032 uint32_t count,
7033 uint32_t stride)
7034{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007035
7036
7037
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007038
7039
7040 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007041}
7042
7043VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7044 VkCmdBuffer cmdBuffer,
7045 VkBuffer buffer,
7046 VkDeviceSize offset,
7047 uint32_t count,
7048 uint32_t stride)
7049{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007050 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7051
7052 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7053}
7054
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007055bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007056 VkCmdBuffer cmdBuffer,
7057 VkBuffer buffer,
7058 VkDeviceSize offset,
7059 uint32_t count,
7060 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007061{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007062
7063
7064
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007065
7066
7067 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007068}
7069
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007070VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7071 VkCmdBuffer cmdBuffer,
7072 VkBuffer buffer,
7073 VkDeviceSize offset,
7074 uint32_t count,
7075 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007076{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007077 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7078
7079 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7080}
7081
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007082bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007083 VkCmdBuffer cmdBuffer,
7084 uint32_t x,
7085 uint32_t y,
7086 uint32_t z)
7087{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007088
7089
7090
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007091
7092 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007093}
7094
7095VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7096 VkCmdBuffer cmdBuffer,
7097 uint32_t x,
7098 uint32_t y,
7099 uint32_t z)
7100{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007101 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7102
7103 PostCmdDispatch(cmdBuffer, x, y, z);
7104}
7105
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007106bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007107 VkCmdBuffer cmdBuffer,
7108 VkBuffer buffer,
7109 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007110{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007111
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007112
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007113
7114 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007115}
7116
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007117VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7118 VkCmdBuffer cmdBuffer,
7119 VkBuffer buffer,
7120 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007121{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007122 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7123
7124 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007125}
7126
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007127bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007128 VkCmdBuffer cmdBuffer,
7129 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007130{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007131 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007132 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007133 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007134
7135 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007136}
7137
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007138bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007139 VkCmdBuffer cmdBuffer,
7140 VkBuffer srcBuffer,
7141 VkBuffer destBuffer,
7142 uint32_t regionCount)
7143{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007144
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007145
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007146
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007147
7148 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007149}
7150
7151VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7152 VkCmdBuffer cmdBuffer,
7153 VkBuffer srcBuffer,
7154 VkBuffer destBuffer,
7155 uint32_t regionCount,
7156 const VkBufferCopy* pRegions)
7157{
7158 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007159
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007160 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7161
7162 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7163}
7164
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007165bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007166 VkCmdBuffer cmdBuffer,
7167 const VkImageCopy* pRegions)
7168{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007169 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007170 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007171 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7172 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7173 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007174 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007175 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007176 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007177 }
7178 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7179 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7180 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007181 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007182 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007183 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007184 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007185 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007186
7187 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007188}
7189
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007190bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007191 VkCmdBuffer cmdBuffer,
7192 VkImage srcImage,
7193 VkImageLayout srcImageLayout,
7194 VkImage destImage,
7195 VkImageLayout destImageLayout,
7196 uint32_t regionCount)
7197{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007198
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007199
7200 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7201 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7202 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007203 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007204 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007205 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007206 }
7207
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007208
7209 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7210 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7211 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007212 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007213 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007214 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007215 }
7216
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007217
7218 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007219}
7220
7221VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7222 VkCmdBuffer cmdBuffer,
7223 VkImage srcImage,
7224 VkImageLayout srcImageLayout,
7225 VkImage destImage,
7226 VkImageLayout destImageLayout,
7227 uint32_t regionCount,
7228 const VkImageCopy* pRegions)
7229{
7230 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007231
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007232 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7233
7234 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7235}
7236
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007237bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007238 VkCmdBuffer cmdBuffer,
7239 const VkImageBlit* pRegions)
7240{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007241 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007242 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007243 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7244 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7245 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007246 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007247 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007248 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007249 }
7250 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7251 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7252 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007253 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007254 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007255 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007256 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007257 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007258
7259 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007260}
7261
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007262bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007263 VkCmdBuffer cmdBuffer,
7264 VkImage srcImage,
7265 VkImageLayout srcImageLayout,
7266 VkImage destImage,
7267 VkImageLayout destImageLayout,
7268 uint32_t regionCount,
7269 VkTexFilter filter)
7270{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007271
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007272
7273 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7274 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7275 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007276 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007277 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007278 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007279 }
7280
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007281
7282 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7283 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7284 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007285 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007286 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007287 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007288 }
7289
7290
7291 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7292 filter > VK_TEX_FILTER_END_RANGE)
7293 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007294 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007295 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007296 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007297 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007298
7299 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007300}
7301
7302VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7303 VkCmdBuffer cmdBuffer,
7304 VkImage srcImage,
7305 VkImageLayout srcImageLayout,
7306 VkImage destImage,
7307 VkImageLayout destImageLayout,
7308 uint32_t regionCount,
7309 const VkImageBlit* pRegions,
7310 VkTexFilter filter)
7311{
7312 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007313
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007314 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7315
7316 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7317}
7318
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007319bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007320 VkCmdBuffer cmdBuffer,
7321 const VkBufferImageCopy* pRegions)
7322{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007323 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007324 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007325 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7326 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7327 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007328 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007329 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007330 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007331 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007332 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007333
7334 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007335}
7336
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007337bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007338 VkCmdBuffer cmdBuffer,
7339 VkBuffer srcBuffer,
7340 VkImage destImage,
7341 VkImageLayout destImageLayout,
7342 uint32_t regionCount)
7343{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007344
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007345
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007346
7347 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7348 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7349 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007350 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007351 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007352 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007353 }
7354
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007355
7356 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007357}
7358
7359VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7360 VkCmdBuffer cmdBuffer,
7361 VkBuffer srcBuffer,
7362 VkImage destImage,
7363 VkImageLayout destImageLayout,
7364 uint32_t regionCount,
7365 const VkBufferImageCopy* pRegions)
7366{
7367 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007368
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007369 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7370
7371 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7372}
7373
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007374bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007375 VkCmdBuffer cmdBuffer,
7376 const VkBufferImageCopy* pRegions)
7377{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007378 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007379 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007380 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7381 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7382 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007383 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007384 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007385 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007386 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007387 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007388
7389 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007390}
7391
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007392bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007393 VkCmdBuffer cmdBuffer,
7394 VkImage srcImage,
7395 VkImageLayout srcImageLayout,
7396 VkBuffer destBuffer,
7397 uint32_t regionCount)
7398{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007399
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007400
7401 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7402 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7403 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007404 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007405 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007406 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007407 }
7408
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007409
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007410
7411 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007412}
7413
7414VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7415 VkCmdBuffer cmdBuffer,
7416 VkImage srcImage,
7417 VkImageLayout srcImageLayout,
7418 VkBuffer destBuffer,
7419 uint32_t regionCount,
7420 const VkBufferImageCopy* pRegions)
7421{
7422 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007423
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007424 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7425
7426 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7427}
7428
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007429bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007430 VkCmdBuffer cmdBuffer,
7431 const uint32_t* pData)
7432{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007433 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007434 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007435 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007436
7437 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007438}
7439
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007440bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007441 VkCmdBuffer cmdBuffer,
7442 VkBuffer destBuffer,
7443 VkDeviceSize destOffset,
7444 VkDeviceSize dataSize)
7445{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007446
7447
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007448
7449
7450 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007451}
7452
7453VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7454 VkCmdBuffer cmdBuffer,
7455 VkBuffer destBuffer,
7456 VkDeviceSize destOffset,
7457 VkDeviceSize dataSize,
7458 const uint32_t* pData)
7459{
7460 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007461
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007462 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7463
7464 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7465}
7466
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007467bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007468 VkCmdBuffer cmdBuffer,
7469 VkBuffer destBuffer,
7470 VkDeviceSize destOffset,
7471 VkDeviceSize fillSize,
7472 uint32_t data)
7473{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007474
7475
7476
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007477
7478
7479 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007480}
7481
7482VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7483 VkCmdBuffer cmdBuffer,
7484 VkBuffer destBuffer,
7485 VkDeviceSize destOffset,
7486 VkDeviceSize fillSize,
7487 uint32_t data)
7488{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007489 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7490
7491 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7492}
7493
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007494bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007495 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007496 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007497 const VkImageSubresourceRange* pRanges)
7498{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007499 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007500 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007501 }
7502
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007503 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007504 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007505 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7506 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7507 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007508 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007509 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007510 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007511 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007512 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007513
7514 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007515}
7516
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007517bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007518 VkCmdBuffer cmdBuffer,
7519 VkImage image,
7520 VkImageLayout imageLayout,
7521 uint32_t rangeCount)
7522{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007523
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007524
7525 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7526 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7527 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007528 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007529 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007530 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007531 }
7532
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007533
7534 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007535}
7536
7537VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7538 VkCmdBuffer cmdBuffer,
7539 VkImage image,
7540 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007541 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007542 uint32_t rangeCount,
7543 const VkImageSubresourceRange* pRanges)
7544{
7545 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007546
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007547 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7548
7549 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7550}
7551
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007552bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007553 VkCmdBuffer cmdBuffer,
7554 const VkImageSubresourceRange* pRanges)
7555{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007556 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007557 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007558 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7559 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7560 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007561 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007562 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007563 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007564 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007565 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007566
7567 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007568}
7569
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007570bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007571 VkCmdBuffer cmdBuffer,
7572 VkImage image,
7573 VkImageLayout imageLayout,
7574 float depth,
7575 uint32_t stencil,
7576 uint32_t rangeCount)
7577{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007578
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007579
7580 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7581 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7582 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007583 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007584 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007585 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007586 }
7587
7588
7589
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007590
7591 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007592}
7593
Chris Forbes2951d7d2015-06-22 17:21:59 +12007594VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007595 VkCmdBuffer cmdBuffer,
7596 VkImage image,
7597 VkImageLayout imageLayout,
7598 float depth,
7599 uint32_t stencil,
7600 uint32_t rangeCount,
7601 const VkImageSubresourceRange* pRanges)
7602{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007603 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007604
Chris Forbes2951d7d2015-06-22 17:21:59 +12007605 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007606
Chris Forbes2951d7d2015-06-22 17:21:59 +12007607 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007608}
7609
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007610bool PreCmdClearColorAttachment(
7611 VkCmdBuffer cmdBuffer,
7612 const VkClearColorValue* pColor,
7613 const VkRect3D* pRects)
7614{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007615 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007616 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007617 }
7618
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007619 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007620 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007621 }
7622
7623 return true;
7624}
7625
7626bool PostCmdClearColorAttachment(
7627 VkCmdBuffer cmdBuffer,
7628 uint32_t colorAttachment,
7629 VkImageLayout imageLayout,
7630 uint32_t rectCount)
7631{
7632
7633
7634 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7635 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7636 {
7637 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007638 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007639 return false;
7640 }
7641
7642
7643 return true;
7644}
7645
7646VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7647 VkCmdBuffer cmdBuffer,
7648 uint32_t colorAttachment,
7649 VkImageLayout imageLayout,
7650 const VkClearColorValue* pColor,
7651 uint32_t rectCount,
7652 const VkRect3D* pRects)
7653{
7654 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7655
7656 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7657
7658 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7659}
7660
7661bool PreCmdClearDepthStencilAttachment(
7662 VkCmdBuffer cmdBuffer,
7663 const VkRect3D* pRects)
7664{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007665 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007666 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007667 }
7668
7669 return true;
7670}
7671
7672bool PostCmdClearDepthStencilAttachment(
7673 VkCmdBuffer cmdBuffer,
7674 VkImageAspectFlags imageAspectMask,
7675 VkImageLayout imageLayout,
7676 float depth,
7677 uint32_t stencil,
7678 uint32_t rectCount)
7679{
7680
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007681
7682 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7683 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7684 {
7685 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007686 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007687 return false;
7688 }
7689
7690
7691
7692
7693 return true;
7694}
7695
7696VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7697 VkCmdBuffer cmdBuffer,
7698 VkImageAspectFlags imageAspectMask,
7699 VkImageLayout imageLayout,
7700 float depth,
7701 uint32_t stencil,
7702 uint32_t rectCount,
7703 const VkRect3D* pRects)
7704{
7705 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7706
7707 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7708
7709 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7710}
7711
7712bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007713 VkCmdBuffer cmdBuffer,
7714 const VkImageResolve* pRegions)
7715{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007716 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007717 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007718 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7719 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7720 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007721 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007722 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007723 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007724 }
7725 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7726 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7727 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007728 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007729 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007730 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007731 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007732 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007733
7734 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007735}
7736
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007737bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007738 VkCmdBuffer cmdBuffer,
7739 VkImage srcImage,
7740 VkImageLayout srcImageLayout,
7741 VkImage destImage,
7742 VkImageLayout destImageLayout,
7743 uint32_t regionCount)
7744{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007745
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007746
7747 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7748 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7749 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007750 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007751 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007752 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007753 }
7754
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007755
7756 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7757 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7758 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007759 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007760 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007761 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007762 }
7763
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007764
7765 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007766}
7767
7768VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7769 VkCmdBuffer cmdBuffer,
7770 VkImage srcImage,
7771 VkImageLayout srcImageLayout,
7772 VkImage destImage,
7773 VkImageLayout destImageLayout,
7774 uint32_t regionCount,
7775 const VkImageResolve* pRegions)
7776{
7777 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007778
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007779 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7780
7781 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7782}
7783
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007784bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007785 VkCmdBuffer cmdBuffer,
7786 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007787 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007788{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007789
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007790
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007791
7792 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007793}
7794
7795VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7796 VkCmdBuffer cmdBuffer,
7797 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007798 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007799{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007800 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007801
Tony Barbourc2e987e2015-06-29 16:20:35 -06007802 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007803}
7804
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007805bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007806 VkCmdBuffer cmdBuffer,
7807 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007808 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007809{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007810
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007811
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007812
7813 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007814}
7815
7816VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7817 VkCmdBuffer cmdBuffer,
7818 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007819 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007820{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007821 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007822
Tony Barbourc2e987e2015-06-29 16:20:35 -06007823 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007824}
7825
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007826bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007827 VkCmdBuffer cmdBuffer,
7828 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007829 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007830{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007831 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007832 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007833 }
7834
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007835 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007836 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007837 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007838
7839 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007840}
7841
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007842bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007843 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007844 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007845 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007846 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007847 uint32_t memBarrierCount)
7848{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007849
Tony Barbourc2e987e2015-06-29 16:20:35 -06007850
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007851
7852
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007853
7854 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007855}
7856
7857VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
7858 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007859 uint32_t eventCount,
7860 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007861 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007862 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007863 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007864 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007865{
7866 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007867
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007868 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007869
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007870 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007871}
7872
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007873bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007874 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007875 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007876{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007877 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007878 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007879 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007880
7881 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007882}
7883
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007884bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007885 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007886 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007887 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007888 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007889 uint32_t memBarrierCount)
7890{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007891
Tony Barbourc2e987e2015-06-29 16:20:35 -06007892
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007893
7894
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007895
7896 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007897}
7898
7899VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7900 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007901 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007902 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007903 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007904 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007905 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007906{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007907 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007908
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007909 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007910
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007911 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007912}
7913
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007914bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007915 VkCmdBuffer cmdBuffer,
7916 VkQueryPool queryPool,
7917 uint32_t slot,
7918 VkQueryControlFlags flags)
7919{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007920
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007921
7922
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007923
7924 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007925}
7926
7927VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
7928 VkCmdBuffer cmdBuffer,
7929 VkQueryPool queryPool,
7930 uint32_t slot,
7931 VkQueryControlFlags flags)
7932{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007933 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7934
7935 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7936}
7937
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007938bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007939 VkCmdBuffer cmdBuffer,
7940 VkQueryPool queryPool,
7941 uint32_t slot)
7942{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007943
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007944
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007945
7946 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007947}
7948
7949VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
7950 VkCmdBuffer cmdBuffer,
7951 VkQueryPool queryPool,
7952 uint32_t slot)
7953{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007954 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
7955
7956 PostCmdEndQuery(cmdBuffer, queryPool, slot);
7957}
7958
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007959bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007960 VkCmdBuffer cmdBuffer,
7961 VkQueryPool queryPool,
7962 uint32_t startQuery,
7963 uint32_t queryCount)
7964{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007965
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007966
7967
7968
7969 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007970}
7971
7972VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
7973 VkCmdBuffer cmdBuffer,
7974 VkQueryPool queryPool,
7975 uint32_t startQuery,
7976 uint32_t queryCount)
7977{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007978 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7979
7980 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7981}
7982
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007983bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007984 VkCmdBuffer cmdBuffer,
7985 VkTimestampType timestampType,
7986 VkBuffer destBuffer,
7987 VkDeviceSize destOffset)
7988{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007989
7990 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
7991 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
7992 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007993 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007994 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007995 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007996 }
7997
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007998
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007999
8000 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008001}
8002
8003VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8004 VkCmdBuffer cmdBuffer,
8005 VkTimestampType timestampType,
8006 VkBuffer destBuffer,
8007 VkDeviceSize destOffset)
8008{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008009 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8010
8011 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8012}
8013
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008014bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008015 VkCmdBuffer cmdBuffer,
8016 VkQueryPool queryPool,
8017 uint32_t startQuery,
8018 uint32_t queryCount,
8019 VkBuffer destBuffer,
8020 VkDeviceSize destOffset,
8021 VkDeviceSize destStride,
8022 VkQueryResultFlags flags)
8023{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008024
8025
8026
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008027
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008028
8029
8030
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008031
8032 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008033}
8034
Jeremy Hayescf469132015-04-17 10:36:53 -06008035VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008036 VkCmdBuffer cmdBuffer,
8037 VkQueryPool queryPool,
8038 uint32_t startQuery,
8039 uint32_t queryCount,
8040 VkBuffer destBuffer,
8041 VkDeviceSize destOffset,
8042 VkDeviceSize destStride,
8043 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06008044{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008045 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8046
8047 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06008048}
8049
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008050bool PreCmdPushConstants(
8051 VkCmdBuffer cmdBuffer,
8052 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008053{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008054 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008055 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008056 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008057
8058 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008059}
8060
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008061bool PostCmdPushConstants(
8062 VkCmdBuffer cmdBuffer,
8063 VkPipelineLayout layout,
8064 VkShaderStageFlags stageFlags,
8065 uint32_t start,
8066 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008067{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008068
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008069
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008070
8071
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008072
8073 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008074}
8075
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008076VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
8077 VkCmdBuffer cmdBuffer,
8078 VkPipelineLayout layout,
8079 VkShaderStageFlags stageFlags,
8080 uint32_t start,
8081 uint32_t length,
8082 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008083{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008084 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008085
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008086 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008087
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008088 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008089}
8090
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008091bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008092 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008093 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008094{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008095 if(pRenderPassBegin != nullptr)
8096 {
8097 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008098 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008099 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008100 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008101 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008102 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008103 if(pRenderPassBegin->pAttachmentClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008104 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008105 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06008106 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008107
8108 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008109}
8110
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008111bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008112 VkCmdBuffer cmdBuffer,
8113 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008114{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008115
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008116 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8117 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
8118 {
8119 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8120 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8121 return false;
8122 }
8123
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008124 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008125}
8126
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008127VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8128 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008129 const VkRenderPassBeginInfo* pRenderPassBegin,
8130 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008131{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008132 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8133
Chia-I Wuc278df82015-07-07 11:50:03 +08008134 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008135
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008136 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008137}
8138
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008139bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08008140 VkCmdBuffer cmdBuffer,
8141 VkRenderPassContents contents)
8142{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008143
8144 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008145 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008146 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008147 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008148 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8149 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008150 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008151
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008152 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08008153}
8154
8155VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8156 VkCmdBuffer cmdBuffer,
8157 VkRenderPassContents contents)
8158{
Chia-I Wuc278df82015-07-07 11:50:03 +08008159 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8160
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008161 PostCmdNextSubpass(cmdBuffer, contents);
8162}
8163
8164bool PostCmdEndRenderPass(
8165 VkCmdBuffer cmdBuffer)
8166{
8167
8168 return true;
8169}
8170
8171VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
8172 VkCmdBuffer cmdBuffer)
8173{
8174 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8175
8176 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08008177}
8178
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008179bool PreCmdExecuteCommands(
8180 VkCmdBuffer cmdBuffer,
8181 const VkCmdBuffer* pCmdBuffers)
8182{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008183 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008184 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008185 }
8186
8187 return true;
8188}
8189
8190bool PostCmdExecuteCommands(
8191 VkCmdBuffer cmdBuffer,
8192 uint32_t cmdBuffersCount)
8193{
8194
8195
8196 return true;
8197}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008198
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008199VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008200 VkCmdBuffer cmdBuffer,
8201 uint32_t cmdBuffersCount,
8202 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008203{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008204 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8205
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008206 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8207
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008208 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008209}
8210
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008211VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008212{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008213 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008214 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008215 }
8216
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008217 /* loader uses this to force layer initialization; device object is wrapped */
8218 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008219 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008220 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008221 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008222
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008223 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008224 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008225 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008226 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008227 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008228 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008229 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008230 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008231 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008232 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008233 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008234 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008235 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008236 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008237 if (!strcmp(funcName, "vkFreeMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008238 return (PFN_vkVoidFunction) vkFreeMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008239 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008240 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008241 if (!strcmp(funcName, "vkUnmapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008242 return (PFN_vkVoidFunction) vkUnmapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008243 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008244 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008245 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008246 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008247 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008248 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008249 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008250 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008251 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008252 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008253 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008254 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008255 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008256 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008257 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008258 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008259 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008260 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008261 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008262 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008263 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008264 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008265 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008266 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008267 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008268 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008269 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008270 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008271 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008272 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008273 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008274 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008275 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008276 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008277 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008278 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008279 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008280 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008281 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008282 return (PFN_vkVoidFunction) vkCreateImageView;
Chia-I Wuc278df82015-07-07 11:50:03 +08008283 if (!strcmp(funcName, "vkCreateAttachmentView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008284 return (PFN_vkVoidFunction) vkCreateAttachmentView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008285 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008286 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008287 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008288 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008289 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008290 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008291 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008292 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008293 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008294 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008295 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008296 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008297 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008298 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008299 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008300 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008301 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008302 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008303 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008304 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008305 if (!strcmp(funcName, "vkCreateDynamicRasterState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008306 return (PFN_vkVoidFunction) vkCreateDynamicRasterState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008307 if (!strcmp(funcName, "vkCreateDynamicColorBlendState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008308 return (PFN_vkVoidFunction) vkCreateDynamicColorBlendState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008309 if (!strcmp(funcName, "vkCreateDynamicDepthStencilState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008310 return (PFN_vkVoidFunction) vkCreateDynamicDepthStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008311 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008312 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008313 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008314 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008315 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008316 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008317 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008318 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008319 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008320 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008321 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008322 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008323 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008324 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008325 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008326 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008327 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008328 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008329 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008330 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008331 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008332 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008333 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008334 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008335 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008336 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008337 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008338 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008339 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008340 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008341 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008342 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008343 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008344 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008345 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008346 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008347 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008348 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008349 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008350 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008351 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008352 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008353 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008354 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008355 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008356 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008357 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008358 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008359 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008360 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008361 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008362 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008363 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008364 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008365 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008366 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008367 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008368 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008369 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008370 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008371 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008372 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008373 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008374 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008375 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008376 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008377 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008378 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008379 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008380 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008381 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008382 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008383
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008384 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008385 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008386 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008387 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008388 }
8389}
8390
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008391VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008392{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008393 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008394 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008395 }
8396
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008397 /* loader uses this to force layer initialization; instance object is wrapped */
8398 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008399 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008400 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008401 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008402
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008403 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008404 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008405 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008406 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008407 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008408 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008409 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008410 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008411 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008412 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06008413 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008414 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008415 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008416 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008417 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008418 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008419 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008420 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008421 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008422 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008423 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008424 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008425
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008426 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008427 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008428 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008429 return fptr;
8430
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008431 {
8432 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8433 return NULL;
8434 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8435 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008436}