blob: 3faff8d30b07b697983bdfdf0aa9c9b871479294 [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 |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600412 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
413 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
414 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600415 if(enumerator & (~allFlags))
416 {
417 return false;
418 }
419
420 return true;
421}
422
423static
424std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
425{
426 if(!ValidateEnumerator(enumerator))
427 {
428 return "unrecognized enumerator";
429 }
430
431 std::vector<std::string> strings;
432 if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT)
433 {
434 strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT");
435 }
436 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
437 {
438 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
439 }
440 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
441 {
442 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
443 }
444 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
445 {
446 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
447 }
448 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
449 {
450 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
451 }
452 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
453 {
454 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
455 }
456 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
457 {
458 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
459 }
460 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
461 {
462 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
463 }
464 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
465 {
466 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
467 }
468 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
469 {
470 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
471 }
472 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
473 {
474 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
475 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600476 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
477 {
478 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
479 }
480 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
481 {
482 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
483 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600484
485 std::string enumeratorString;
486 for(auto const& string : strings)
487 {
488 enumeratorString += string;
489
490 if(string != strings.back())
491 {
492 enumeratorString += '|';
493 }
494 }
495
496 return enumeratorString;
497}
498
499static
500bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
501{
502 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
503 VK_IMAGE_USAGE_DEPTH_STENCIL_BIT |
504 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
505 VK_IMAGE_USAGE_STORAGE_BIT |
506 VK_IMAGE_USAGE_SAMPLED_BIT |
507 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
508 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600509 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600510 if(enumerator & (~allFlags))
511 {
512 return false;
513 }
514
515 return true;
516}
517
518static
519std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
520{
521 if(!ValidateEnumerator(enumerator))
522 {
523 return "unrecognized enumerator";
524 }
525
526 std::vector<std::string> strings;
527 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
528 {
529 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
530 }
531 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
532 {
533 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
534 }
535 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
536 {
537 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
538 }
539 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
540 {
541 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
542 }
543 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
544 {
545 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
546 }
547 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
548 {
549 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
550 }
551 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
552 {
553 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
554 }
555 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
556 {
557 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
558 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600559
560 std::string enumeratorString;
561 for(auto const& string : strings)
562 {
563 enumeratorString += string;
564
565 if(string != strings.back())
566 {
567 enumeratorString += '|';
568 }
569 }
570
571 return enumeratorString;
572}
573
574static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600575bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
576{
577 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
578 VK_QUEUE_DMA_BIT |
579 VK_QUEUE_COMPUTE_BIT |
580 VK_QUEUE_SPARSE_MEMMGR_BIT |
581 VK_QUEUE_GRAPHICS_BIT);
582 if(enumerator & (~allFlags))
583 {
584 return false;
585 }
586
587 return true;
588}
589
590static
591std::string EnumeratorString(VkQueueFlagBits const& enumerator)
592{
593 if(!ValidateEnumerator(enumerator))
594 {
595 return "unrecognized enumerator";
596 }
597
598 std::vector<std::string> strings;
599 if(enumerator & VK_QUEUE_EXTENDED_BIT)
600 {
601 strings.push_back("VK_QUEUE_EXTENDED_BIT");
602 }
603 if(enumerator & VK_QUEUE_DMA_BIT)
604 {
605 strings.push_back("VK_QUEUE_DMA_BIT");
606 }
607 if(enumerator & VK_QUEUE_COMPUTE_BIT)
608 {
609 strings.push_back("VK_QUEUE_COMPUTE_BIT");
610 }
611 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
612 {
613 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
614 }
615 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
616 {
617 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
618 }
619
620 std::string enumeratorString;
621 for(auto const& string : strings)
622 {
623 enumeratorString += string;
624
625 if(string != strings.back())
626 {
627 enumeratorString += '|';
628 }
629 }
630
631 return enumeratorString;
632}
633
634static
635bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
636{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600637 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
638 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600639 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
640 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
641 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
642 VK_MEMORY_PROPERTY_DEVICE_ONLY);
643 if(enumerator & (~allFlags))
644 {
645 return false;
646 }
647
648 return true;
649}
650
651static
652std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
653{
654 if(!ValidateEnumerator(enumerator))
655 {
656 return "unrecognized enumerator";
657 }
658
659 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600660 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
661 {
662 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
663 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600664 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
665 {
666 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
667 }
668 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
669 {
670 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
671 }
672 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
673 {
674 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
675 }
676 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
677 {
678 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
679 }
680 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
681 {
682 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
683 }
684
685 std::string enumeratorString;
686 for(auto const& string : strings)
687 {
688 enumeratorString += string;
689
690 if(string != strings.back())
691 {
692 enumeratorString += '|';
693 }
694 }
695
696 return enumeratorString;
697}
698
699static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600700bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600701{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600702 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600703 if(enumerator & (~allFlags))
704 {
705 return false;
706 }
707
708 return true;
709}
710
711static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600712std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600713{
714 if(!ValidateEnumerator(enumerator))
715 {
716 return "unrecognized enumerator";
717 }
718
719 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600720 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600721 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600722 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600723 }
724
725 std::string enumeratorString;
726 for(auto const& string : strings)
727 {
728 enumeratorString += string;
729
730 if(string != strings.back())
731 {
732 enumeratorString += '|';
733 }
734 }
735
736 return enumeratorString;
737}
738
739static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600740bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
741{
742 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
743 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
744 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
745 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600746 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600747 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600748 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600749
750 return true;
751}
752
753static
754std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
755{
756 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600757 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600758 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600759 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600760
761 std::vector<std::string> strings;
762 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600763 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600764 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600765 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600766 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600767 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600768 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600769 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600770 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600771 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600772 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600773 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600774
775 std::string enumeratorString;
776 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600777 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600778 enumeratorString += string;
779
780 if(string != strings.back())
781 {
782 enumeratorString += '|';
783 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600784 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600785
786 return enumeratorString;
787}
788
789static
790bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
791{
792 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
793 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600794 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600795 return false;
796 }
797
798 return true;
799}
800
801static
802std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
803{
804 if(!ValidateEnumerator(enumerator))
805 {
806 return "unrecognized enumerator";
807 }
808
809 std::vector<std::string> strings;
810 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
811 {
812 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
813 }
814
815 std::string enumeratorString;
816 for(auto const& string : strings)
817 {
818 enumeratorString += string;
819
820 if(string != strings.back())
821 {
822 enumeratorString += '|';
823 }
824 }
825
826 return enumeratorString;
827}
828
829static
830bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
831{
832 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
833 if(enumerator & (~allFlags))
834 {
835 return false;
836 }
837
838 return true;
839}
840
841static
842std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
843{
844 if(!ValidateEnumerator(enumerator))
845 {
846 return "unrecognized enumerator";
847 }
848
849 std::vector<std::string> strings;
850 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
851 {
852 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
853 }
854
855 std::string enumeratorString;
856 for(auto const& string : strings)
857 {
858 enumeratorString += string;
859
860 if(string != strings.back())
861 {
862 enumeratorString += '|';
863 }
864 }
865
866 return enumeratorString;
867}
868
869static
870bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
871{
872 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
873 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
874 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
875 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
876 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
877 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
878 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
879 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
880 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
881 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
882 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
883 if(enumerator & (~allFlags))
884 {
885 return false;
886 }
887
888 return true;
889}
890
891static
892std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
893{
894 if(!ValidateEnumerator(enumerator))
895 {
896 return "unrecognized enumerator";
897 }
898
899 std::vector<std::string> strings;
900 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
901 {
902 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
903 }
904 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
905 {
906 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
907 }
908 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
909 {
910 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
911 }
912 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
913 {
914 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
915 }
916 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
917 {
918 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
919 }
920 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
921 {
922 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
923 }
924 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
925 {
926 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
927 }
928 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
929 {
930 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
931 }
932 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
933 {
934 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
935 }
936 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
937 {
938 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
939 }
940 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
941 {
942 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
943 }
944
945 std::string enumeratorString;
946 for(auto const& string : strings)
947 {
948 enumeratorString += string;
949
950 if(string != strings.back())
951 {
952 enumeratorString += '|';
953 }
954 }
955
956 return enumeratorString;
957}
958
959static
960bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
961{
962 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
963 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
964 VK_QUERY_RESULT_WAIT_BIT |
965 VK_QUERY_RESULT_64_BIT |
966 VK_QUERY_RESULT_DEFAULT);
967 if(enumerator & (~allFlags))
968 {
969 return false;
970 }
971
972 return true;
973}
974
975static
976std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
977{
978 if(!ValidateEnumerator(enumerator))
979 {
980 return "unrecognized enumerator";
981 }
982
983 std::vector<std::string> strings;
984 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
985 {
986 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
987 }
988 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
989 {
990 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
991 }
992 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
993 {
994 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
995 }
996 if(enumerator & VK_QUERY_RESULT_64_BIT)
997 {
998 strings.push_back("VK_QUERY_RESULT_64_BIT");
999 }
1000 if(enumerator & VK_QUERY_RESULT_DEFAULT)
1001 {
1002 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001003 }
1004
1005 std::string enumeratorString;
1006 for(auto const& string : strings)
1007 {
1008 enumeratorString += string;
1009
1010 if(string != strings.back())
1011 {
1012 enumeratorString += '|';
1013 }
1014 }
1015
1016 return enumeratorString;
1017}
1018
1019static
1020bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
1021{
1022 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
1023 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
1024 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
1025 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
1026 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
1027 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
1028 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
1029 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -06001030 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001031 if(enumerator & (~allFlags))
1032 {
1033 return false;
1034 }
1035
1036 return true;
1037}
1038
1039static
1040std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
1041{
1042 if(!ValidateEnumerator(enumerator))
1043 {
1044 return "unrecognized enumerator";
1045 }
1046
1047 std::vector<std::string> strings;
1048 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
1049 {
1050 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
1051 }
1052 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
1053 {
1054 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
1055 }
1056 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
1057 {
1058 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
1059 }
1060 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
1061 {
1062 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
1063 }
1064 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
1065 {
1066 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
1067 }
1068 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
1069 {
1070 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
1071 }
1072 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
1073 {
1074 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
1075 }
1076 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
1077 {
1078 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
1079 }
1080 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
1081 {
1082 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
1083 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001084
1085 std::string enumeratorString;
1086 for(auto const& string : strings)
1087 {
1088 enumeratorString += string;
1089
1090 if(string != strings.back())
1091 {
1092 enumeratorString += '|';
1093 }
1094 }
1095
1096 return enumeratorString;
1097}
1098
1099static
1100bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
1101{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001102 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
1103 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
1104 VK_BUFFER_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001105 if(enumerator & (~allFlags))
1106 {
1107 return false;
1108 }
1109
1110 return true;
1111}
1112
1113static
1114std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
1115{
1116 if(!ValidateEnumerator(enumerator))
1117 {
1118 return "unrecognized enumerator";
1119 }
1120
1121 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001122 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1123 {
1124 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1125 }
1126 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1127 {
1128 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1129 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001130 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
1131 {
1132 strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT");
1133 }
1134
1135 std::string enumeratorString;
1136 for(auto const& string : strings)
1137 {
1138 enumeratorString += string;
1139
1140 if(string != strings.back())
1141 {
1142 enumeratorString += '|';
1143 }
1144 }
1145
1146 return enumeratorString;
1147}
1148
1149static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001150bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1151{
1152 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001153 VK_IMAGE_CREATE_INVARIANT_DATA_BIT |
1154 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1155 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001156 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001157 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001158 if(enumerator & (~allFlags))
1159 {
1160 return false;
1161 }
1162
1163 return true;
1164}
1165
1166static
1167std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1168{
1169 if(!ValidateEnumerator(enumerator))
1170 {
1171 return "unrecognized enumerator";
1172 }
1173
1174 std::vector<std::string> strings;
1175 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1176 {
1177 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1178 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001179 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
1180 {
1181 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
1182 }
1183 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1184 {
1185 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1186 }
1187 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1188 {
1189 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1190 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001191 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1192 {
1193 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1194 }
1195 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
1196 {
1197 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
1198 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001199
1200 std::string enumeratorString;
1201 for(auto const& string : strings)
1202 {
1203 enumeratorString += string;
1204
1205 if(string != strings.back())
1206 {
1207 enumeratorString += '|';
1208 }
1209 }
1210
1211 return enumeratorString;
1212}
1213
1214static
Chia-I Wuc278df82015-07-07 11:50:03 +08001215bool ValidateEnumerator(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001216{
Chia-I Wuc278df82015-07-07 11:50:03 +08001217 VkAttachmentViewCreateFlagBits allFlags = (VkAttachmentViewCreateFlagBits)(VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT |
1218 VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001219 if(enumerator & (~allFlags))
1220 {
1221 return false;
1222 }
1223
1224 return true;
1225}
1226
1227static
Chia-I Wuc278df82015-07-07 11:50:03 +08001228std::string EnumeratorString(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001229{
1230 if(!ValidateEnumerator(enumerator))
1231 {
1232 return "unrecognized enumerator";
1233 }
1234
1235 std::vector<std::string> strings;
Chia-I Wuc278df82015-07-07 11:50:03 +08001236 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001237 {
Chia-I Wuc278df82015-07-07 11:50:03 +08001238 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001239 }
Chia-I Wuc278df82015-07-07 11:50:03 +08001240 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001241 {
Chia-I Wuc278df82015-07-07 11:50:03 +08001242 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001243 }
1244
1245 std::string enumeratorString;
1246 for(auto const& string : strings)
1247 {
1248 enumeratorString += string;
1249
1250 if(string != strings.back())
1251 {
1252 enumeratorString += '|';
1253 }
1254 }
1255
1256 return enumeratorString;
1257}
1258
1259static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001260bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1261{
1262 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1263 VK_CHANNEL_B_BIT |
1264 VK_CHANNEL_G_BIT |
1265 VK_CHANNEL_R_BIT);
1266 if(enumerator & (~allFlags))
1267 {
1268 return false;
1269 }
1270
1271 return true;
1272}
1273
1274static
1275std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1276{
1277 if(!ValidateEnumerator(enumerator))
1278 {
1279 return "unrecognized enumerator";
1280 }
1281
1282 std::vector<std::string> strings;
1283 if(enumerator & VK_CHANNEL_A_BIT)
1284 {
1285 strings.push_back("VK_CHANNEL_A_BIT");
1286 }
1287 if(enumerator & VK_CHANNEL_B_BIT)
1288 {
1289 strings.push_back("VK_CHANNEL_B_BIT");
1290 }
1291 if(enumerator & VK_CHANNEL_G_BIT)
1292 {
1293 strings.push_back("VK_CHANNEL_G_BIT");
1294 }
1295 if(enumerator & VK_CHANNEL_R_BIT)
1296 {
1297 strings.push_back("VK_CHANNEL_R_BIT");
1298 }
1299
1300 std::string enumeratorString;
1301 for(auto const& string : strings)
1302 {
1303 enumeratorString += string;
1304
1305 if(string != strings.back())
1306 {
1307 enumeratorString += '|';
1308 }
1309 }
1310
1311 return enumeratorString;
1312}
1313
1314static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001315bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001316{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001317 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1318 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1319 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001320 if(enumerator & (~allFlags))
1321 {
1322 return false;
1323 }
1324
1325 return true;
1326}
1327
1328static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001329std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001330{
1331 if(!ValidateEnumerator(enumerator))
1332 {
1333 return "unrecognized enumerator";
1334 }
1335
1336 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001337 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001338 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001339 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1340 }
1341 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1342 {
1343 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1344 }
1345 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1346 {
1347 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001348 }
1349
1350 std::string enumeratorString;
1351 for(auto const& string : strings)
1352 {
1353 enumeratorString += string;
1354
1355 if(string != strings.back())
1356 {
1357 enumeratorString += '|';
1358 }
1359 }
1360
1361 return enumeratorString;
1362}
1363
1364static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001365bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001366{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001367 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1368 VK_SHADER_STAGE_FRAGMENT_BIT |
1369 VK_SHADER_STAGE_GEOMETRY_BIT |
1370 VK_SHADER_STAGE_COMPUTE_BIT |
1371 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1372 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1373 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001374 if(enumerator & (~allFlags))
1375 {
1376 return false;
1377 }
1378
1379 return true;
1380}
1381
1382static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001383std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001384{
1385 if(!ValidateEnumerator(enumerator))
1386 {
1387 return "unrecognized enumerator";
1388 }
1389
1390 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001391 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001392 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001393 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001394 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001395 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001396 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001397 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001398 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001399 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001400 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001401 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1402 }
1403 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1404 {
1405 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1406 }
1407 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1408 {
1409 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1410 }
1411 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1412 {
1413 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1414 }
1415 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1416 {
1417 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001418 }
1419
1420 std::string enumeratorString;
1421 for(auto const& string : strings)
1422 {
1423 enumeratorString += string;
1424
1425 if(string != strings.back())
1426 {
1427 enumeratorString += '|';
1428 }
1429 }
1430
1431 return enumeratorString;
1432}
1433
1434static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001435bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001436{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001438 if(enumerator & (~allFlags))
1439 {
1440 return false;
1441 }
1442
1443 return true;
1444}
1445
1446static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001448{
1449 if(!ValidateEnumerator(enumerator))
1450 {
1451 return "unrecognized enumerator";
1452 }
1453
1454 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001455 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001456 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001457 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_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(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001476{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001477 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1478 VK_PIPELINE_STAGE_HOST_BIT |
1479 VK_PIPELINE_STAGE_TRANSFER_BIT |
1480 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1481 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1482 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1483 VK_PIPELINE_STAGE_TRANSITION_BIT |
1484 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1485 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1486 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1487 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1488 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1489 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1490 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1491 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1492 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1493 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001494 if(enumerator & (~allFlags))
1495 {
1496 return false;
1497 }
1498
1499 return true;
1500}
1501
1502static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001503std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001504{
1505 if(!ValidateEnumerator(enumerator))
1506 {
1507 return "unrecognized enumerator";
1508 }
1509
1510 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001511 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001512 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001513 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001514 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001515 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001516 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001517 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001518 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001519 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001520 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001521 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001522 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001523 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001524 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001525 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001526 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001527 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001528 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001529 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001530 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001531 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001532 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001533 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001534 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001535 if(enumerator & VK_PIPELINE_STAGE_TRANSITION_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001536 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001537 strings.push_back("VK_PIPELINE_STAGE_TRANSITION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001538 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001539 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001540 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001541 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001542 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001543 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001544 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001545 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001546 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001547 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001548 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001549 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001550 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001551 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001552 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001553 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1554 }
1555 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1556 {
1557 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1558 }
1559 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1560 {
1561 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1562 }
1563 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1564 {
1565 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1566 }
1567 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1568 {
1569 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1570 }
1571 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1572 {
1573 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1574 }
1575 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1576 {
1577 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001578 }
1579
1580 std::string enumeratorString;
1581 for(auto const& string : strings)
1582 {
1583 enumeratorString += string;
1584
1585 if(string != strings.back())
1586 {
1587 enumeratorString += '|';
1588 }
1589 }
1590
1591 return enumeratorString;
1592}
1593
1594static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001595bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001596{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001597 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1598 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1599 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1600 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1601 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001602 if(enumerator & (~allFlags))
1603 {
1604 return false;
1605 }
1606
1607 return true;
1608}
1609
1610static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001611std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001612{
1613 if(!ValidateEnumerator(enumerator))
1614 {
1615 return "unrecognized enumerator";
1616 }
1617
1618 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001619 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001620 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001621 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001622 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001623 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001624 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001625 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001626 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001627 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001628 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001629 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1630 }
1631 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1632 {
1633 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1634 }
1635 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1636 {
1637 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001638 }
1639
1640 std::string enumeratorString;
1641 for(auto const& string : strings)
1642 {
1643 enumeratorString += string;
1644
1645 if(string != strings.back())
1646 {
1647 enumeratorString += '|';
1648 }
1649 }
1650
1651 return enumeratorString;
1652}
1653
1654static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001655bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001656{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001657 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1658 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1659 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1660 VK_MEMORY_INPUT_SHADER_READ_BIT |
1661 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1662 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1663 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1664 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1665 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1666 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001667 if(enumerator & (~allFlags))
1668 {
1669 return false;
1670 }
1671
1672 return true;
1673}
1674
1675static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001676std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001677{
1678 if(!ValidateEnumerator(enumerator))
1679 {
1680 return "unrecognized enumerator";
1681 }
1682
1683 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001684 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001685 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001686 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1687 }
1688 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1689 {
1690 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1691 }
1692 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1693 {
1694 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1695 }
1696 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1697 {
1698 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1699 }
1700 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1701 {
1702 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1703 }
1704 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1705 {
1706 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1707 }
1708 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1709 {
1710 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1711 }
1712 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1713 {
1714 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1715 }
1716 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1717 {
1718 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1719 }
1720 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1721 {
1722 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001723 }
1724
1725 std::string enumeratorString;
1726 for(auto const& string : strings)
1727 {
1728 enumeratorString += string;
1729
1730 if(string != strings.back())
1731 {
1732 enumeratorString += '|';
1733 }
1734 }
1735
1736 return enumeratorString;
1737}
1738
1739static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001740bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001741{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001742 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1743 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001744 if(enumerator & (~allFlags))
1745 {
1746 return false;
1747 }
1748
1749 return true;
1750}
1751
1752static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001753std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001754{
1755 if(!ValidateEnumerator(enumerator))
1756 {
1757 return "unrecognized enumerator";
1758 }
1759
1760 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001761 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001762 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001763 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001764 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001765 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001766 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001767 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001768 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001769
1770 std::string enumeratorString;
1771 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001772 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001773 enumeratorString += string;
1774
1775 if(string != strings.back())
1776 {
1777 enumeratorString += '|';
1778 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001779 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001780
1781 return enumeratorString;
1782}
1783
1784static
1785bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1786{
1787 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES);
1788 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001789 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001790 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001791 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001792
1793 return true;
1794}
1795
1796static
1797std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1798{
1799 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001800 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001801 return "unrecognized enumerator";
1802 }
1803
1804 std::vector<std::string> strings;
1805 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES)
1806 {
1807 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001808 }
1809
1810 std::string enumeratorString;
1811 for(auto const& string : strings)
1812 {
1813 enumeratorString += string;
1814
1815 if(string != strings.back())
1816 {
1817 enumeratorString += '|';
1818 }
1819 }
1820
1821 return enumeratorString;
1822}
1823
1824static
1825bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1826{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001827 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1828 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001829 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1830 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1831 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1832 if(enumerator & (~allFlags))
1833 {
1834 return false;
1835 }
1836
1837 return true;
1838}
1839
1840static
1841std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1842{
1843 if(!ValidateEnumerator(enumerator))
1844 {
1845 return "unrecognized enumerator";
1846 }
1847
1848 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001849 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1850 {
1851 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1852 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001853 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1854 {
1855 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1856 }
1857 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1858 {
1859 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1860 }
1861 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1862 {
1863 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1864 }
1865 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1866 {
1867 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1868 }
1869
1870 std::string enumeratorString;
1871 for(auto const& string : strings)
1872 {
1873 enumeratorString += string;
1874
1875 if(string != strings.back())
1876 {
1877 enumeratorString += '|';
1878 }
1879 }
1880
1881 return enumeratorString;
1882}
1883
1884static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001885bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001886{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001887 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001888 if(enumerator & (~allFlags))
1889 {
1890 return false;
1891 }
1892
1893 return true;
1894}
1895
1896static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001897std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001898{
1899 if(!ValidateEnumerator(enumerator))
1900 {
1901 return "unrecognized enumerator";
1902 }
1903
1904 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001905 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001906 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001907 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001908 }
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
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001924static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001925bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001926{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001927 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1928 VK_IMAGE_ASPECT_STENCIL_BIT |
1929 VK_IMAGE_ASPECT_DEPTH_BIT |
1930 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001931 if(enumerator & (~allFlags))
1932 {
1933 return false;
1934 }
1935
1936 return true;
1937}
1938
1939static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001940std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001941{
1942 if(!ValidateEnumerator(enumerator))
1943 {
1944 return "unrecognized enumerator";
1945 }
1946
1947 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001948 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001949 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001950 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1951 }
1952 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1953 {
1954 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1955 }
1956 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1957 {
1958 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1959 }
1960 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1961 {
1962 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1963 }
1964
1965 std::string enumeratorString;
1966 for(auto const& string : strings)
1967 {
1968 enumeratorString += string;
1969
1970 if(string != strings.back())
1971 {
1972 enumeratorString += '|';
1973 }
1974 }
1975
1976 return enumeratorString;
1977}
1978
1979static
1980bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1981{
1982 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1983 if(enumerator & (~allFlags))
1984 {
1985 return false;
1986 }
1987
1988 return true;
1989}
1990
1991static
1992std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1993{
1994 if(!ValidateEnumerator(enumerator))
1995 {
1996 return "unrecognized enumerator";
1997 }
1998
1999 std::vector<std::string> strings;
2000 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
2001 {
2002 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002003 }
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
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002019VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
2020 const VkInstanceCreateInfo* pCreateInfo,
2021 VkInstance* pInstance)
2022{
2023 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
2024 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
2025
2026 if (result == VK_SUCCESS) {
2027 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
2028 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06002029 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002030
2031 InitParamChecker(data);
2032 }
2033
2034 return result;
2035}
2036
2037VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(
2038 VkInstance instance)
2039{
2040 // Grab the key before the instance is destroyed.
2041 dispatch_key key = get_dispatch_key(instance);
2042 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
2043 VkResult result = pTable->DestroyInstance(instance);
2044
2045 // Clean up logging callback, if any
2046 layer_data *data = get_my_data_ptr(key, layer_data_map);
2047 if(data->logging_callback)
2048 {
2049 layer_destroy_msg_callback(data->report_data, data->logging_callback);
2050 }
2051
2052 layer_debug_report_destroy_instance(mid(instance));
2053 layer_data_map.erase(pTable);
2054
2055 pc_instance_table_map.erase(key);
2056 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2057
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002058 return result;
2059}
2060
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002061bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002062 VkInstance instance,
2063 uint32_t* pPhysicalDeviceCount,
2064 VkPhysicalDevice* pPhysicalDevices,
2065 VkResult result)
2066{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002067
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002068 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002069 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002070 }
2071
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002072 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002073 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002074 }
2075
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002076 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002077 {
2078 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002079 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2080 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002081 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002082
2083 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002084}
2085
2086VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
2087 VkInstance instance,
2088 uint32_t* pPhysicalDeviceCount,
2089 VkPhysicalDevice* pPhysicalDevices)
2090{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002091 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
2092
2093 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
2094
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002095 return result;
2096}
2097
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002098bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002099 VkPhysicalDevice physicalDevice,
2100 VkPhysicalDeviceFeatures* pFeatures,
2101 VkResult result)
2102{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002103
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002104 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002105 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002106 }
2107
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002108 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002109 {
2110 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002111 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2112 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002113 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002114
2115 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002116}
2117
2118VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
2119 VkPhysicalDevice physicalDevice,
2120 VkPhysicalDeviceFeatures* pFeatures)
2121{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002122 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
2123
2124 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
2125
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002126 return result;
2127}
2128
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002129bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002130 VkPhysicalDevice physicalDevice,
2131 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002132 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002133 VkResult result)
2134{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002135
2136 if(format < VK_FORMAT_BEGIN_RANGE ||
2137 format > VK_FORMAT_END_RANGE)
2138 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002139 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002140 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002141 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002142 }
2143
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002144 if(pFormatProperties != 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 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002150 std::string reason = "vkGetPhysicalDeviceFormatProperties 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
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002158VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002159 VkPhysicalDevice physicalDevice,
2160 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002161 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002162{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002163 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002164
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002165 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2166
2167 return result;
2168}
2169
2170bool PostGetPhysicalDeviceImageFormatProperties(
2171 VkPhysicalDevice physicalDevice,
2172 VkFormat format,
2173 VkImageType type,
2174 VkImageTiling tiling,
2175 VkImageUsageFlags usage,
2176 VkImageFormatProperties* pImageFormatProperties,
2177 VkResult result)
2178{
2179
2180 if(format < VK_FORMAT_BEGIN_RANGE ||
2181 format > VK_FORMAT_END_RANGE)
2182 {
2183 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2184 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2185 return false;
2186 }
2187
2188 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2189 type > VK_IMAGE_TYPE_END_RANGE)
2190 {
2191 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2192 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2193 return false;
2194 }
2195
2196 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2197 tiling > VK_IMAGE_TILING_END_RANGE)
2198 {
2199 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2200 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2201 return false;
2202 }
2203
2204
2205 if(pImageFormatProperties != nullptr)
2206 {
2207 }
2208
2209 if(result < VK_SUCCESS)
2210 {
2211 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2212 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2213 return false;
2214 }
2215
2216 return true;
2217}
2218
2219VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2220 VkPhysicalDevice physicalDevice,
2221 VkFormat format,
2222 VkImageType type,
2223 VkImageTiling tiling,
2224 VkImageUsageFlags usage,
2225 VkImageFormatProperties* pImageFormatProperties)
2226{
2227 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
2228
2229 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002230
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002231 return result;
2232}
2233
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002234bool PostGetPhysicalDeviceLimits(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002235 VkPhysicalDevice physicalDevice,
2236 VkPhysicalDeviceLimits* pLimits,
2237 VkResult result)
2238{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002239
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002240 if(pLimits != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002241 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002242 }
2243
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002244 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002245 {
2246 std::string reason = "vkGetPhysicalDeviceLimits parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002247 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2248 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002249 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002250
2251 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002252}
2253
2254VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
2255 VkPhysicalDevice physicalDevice,
2256 VkPhysicalDeviceLimits* pLimits)
2257{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002258 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceLimits(physicalDevice, pLimits);
2259
2260 PostGetPhysicalDeviceLimits(physicalDevice, pLimits, result);
2261
2262 return result;
2263}
2264
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002265bool PostGetPhysicalDeviceProperties(
2266 VkPhysicalDevice physicalDevice,
2267 VkPhysicalDeviceProperties* pProperties,
2268 VkResult result)
2269{
2270
2271 if(pProperties != nullptr)
2272 {
2273 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2274 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2275 {
2276 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2277 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2278 return false;
2279 }
2280 }
2281
2282 if(result < VK_SUCCESS)
2283 {
2284 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2285 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2286 return false;
2287 }
2288
2289 return true;
2290}
2291
2292VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2293 VkPhysicalDevice physicalDevice,
2294 VkPhysicalDeviceProperties* pProperties)
2295{
2296 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2297
2298 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2299
2300 return result;
2301}
2302
Cody Northropef72e2a2015-08-03 17:04:53 -06002303bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002304 VkPhysicalDevice physicalDevice,
2305 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002306 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002307 VkResult result)
2308{
2309
Cody Northropef72e2a2015-08-03 17:04:53 -06002310 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002311 {
2312 }
2313
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002314 if(pQueueProperties != nullptr)
2315 {
2316 }
2317
2318 if(result < VK_SUCCESS)
2319 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002320 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002321 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2322 return false;
2323 }
2324
2325 return true;
2326}
2327
2328VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2329 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002330 uint32_t* pCount,
2331 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002332{
Cody Northropef72e2a2015-08-03 17:04:53 -06002333 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002334
Cody Northropef72e2a2015-08-03 17:04:53 -06002335 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002336
2337 return result;
2338}
2339
2340bool PostGetPhysicalDeviceMemoryProperties(
2341 VkPhysicalDevice physicalDevice,
2342 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2343 VkResult result)
2344{
2345
2346 if(pMemoryProperties != nullptr)
2347 {
2348 }
2349
2350 if(result < VK_SUCCESS)
2351 {
2352 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2353 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2354 return false;
2355 }
2356
2357 return true;
2358}
2359
2360VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2361 VkPhysicalDevice physicalDevice,
2362 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2363{
2364 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2365
2366 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2367
2368 return result;
2369}
2370
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002371VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2372 VkPhysicalDevice physicalDevice,
2373 const VkDeviceCreateInfo* pCreateInfo,
2374 VkDevice* pDevice)
2375{
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002376 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002377 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2378 if(result == VK_SUCCESS)
2379 {
2380 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2381 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2382 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2383 }
2384
2385 return result;
2386}
2387
2388VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
2389 VkDevice device)
2390{
2391 layer_debug_report_destroy_device(device);
2392
2393 dispatch_key key = get_dispatch_key(device);
2394#if DISPATCH_MAP_DEBUG
2395 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2396#endif
2397
2398 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
2399 pc_device_table_map.erase(key);
2400 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2401
2402 return result;
2403}
2404
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002405bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002406 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002407 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002408 uint32_t queueIndex,
2409 VkQueue* pQueue,
2410 VkResult result)
2411{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002412
2413
2414
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002415 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002416 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002417 }
2418
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002419 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002420 {
2421 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002422 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2423 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002424 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002425
2426 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002427}
2428
2429VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2430 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002431 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002432 uint32_t queueIndex,
2433 VkQueue* pQueue)
2434{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002435 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002436
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002437 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002438
2439 return result;
2440}
2441
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002442bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002443 VkQueue queue,
2444 const VkCmdBuffer* pCmdBuffers)
2445{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002446 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002447 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002448 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002449
2450 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002451}
2452
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002453bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002454 VkQueue queue,
2455 uint32_t cmdBufferCount,
2456 VkFence fence,
2457 VkResult result)
2458{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002459
2460
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002461
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002462 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002463 {
2464 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002465 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2466 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002467 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002468
2469 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002470}
2471
2472VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2473 VkQueue queue,
2474 uint32_t cmdBufferCount,
2475 const VkCmdBuffer* pCmdBuffers,
2476 VkFence fence)
2477{
2478 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002479
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002480 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2481
2482 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2483
2484 return result;
2485}
2486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002487bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002488 VkQueue queue,
2489 VkResult result)
2490{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002491
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002492 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002493 {
2494 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002495 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2496 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002497 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002498
2499 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002500}
2501
2502VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2503 VkQueue queue)
2504{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002505 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2506
2507 PostQueueWaitIdle(queue, result);
2508
2509 return result;
2510}
2511
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002512bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002513 VkDevice device,
2514 VkResult result)
2515{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002516
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002517 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002518 {
2519 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002520 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2521 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002522 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002523
2524 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002525}
2526
2527VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2528 VkDevice device)
2529{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002530 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2531
2532 PostDeviceWaitIdle(device, result);
2533
2534 return result;
2535}
2536
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002537bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002538 VkDevice device,
2539 const VkMemoryAllocInfo* pAllocInfo)
2540{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002541 if(pAllocInfo != nullptr)
2542 {
2543 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002544 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002545 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002546 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002547 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002548 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002549 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002550
2551 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002552}
2553
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002554bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002555 VkDevice device,
2556 VkDeviceMemory* pMem,
2557 VkResult result)
2558{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002559
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002560 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002561 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002562 }
2563
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002564 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002565 {
2566 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002567 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2568 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002569 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002570
2571 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002572}
2573
2574VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2575 VkDevice device,
2576 const VkMemoryAllocInfo* pAllocInfo,
2577 VkDeviceMemory* pMem)
2578{
2579 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002581 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2582
2583 PostAllocMemory(device, pMem, result);
2584
2585 return result;
2586}
2587
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002588bool PostFreeMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002589 VkDevice device,
2590 VkDeviceMemory mem,
2591 VkResult result)
2592{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002593
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002594
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002595 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002596 {
2597 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002598 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2599 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002600 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002601
2602 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002603}
2604
2605VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2606 VkDevice device,
2607 VkDeviceMemory mem)
2608{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002609 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2610
2611 PostFreeMemory(device, mem, result);
2612
2613 return result;
2614}
2615
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002616bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002617 VkDevice device,
2618 VkDeviceMemory mem,
2619 VkDeviceSize offset,
2620 VkDeviceSize size,
2621 VkMemoryMapFlags flags,
2622 void** ppData,
2623 VkResult result)
2624{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002625
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002626
2627
2628
2629
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002630 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002631 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002632 }
2633
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002634 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002635 {
2636 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002637 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2638 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002639 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002640
2641 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002642}
2643
2644VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2645 VkDevice device,
2646 VkDeviceMemory mem,
2647 VkDeviceSize offset,
2648 VkDeviceSize size,
2649 VkMemoryMapFlags flags,
2650 void** ppData)
2651{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002652 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2653
2654 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2655
2656 return result;
2657}
2658
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002659bool PostUnmapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002660 VkDevice device,
2661 VkDeviceMemory mem,
2662 VkResult result)
2663{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002664
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002665
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002666 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002667 {
2668 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002669 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2670 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002671 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002672
2673 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002674}
2675
2676VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2677 VkDevice device,
2678 VkDeviceMemory mem)
2679{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002680 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2681
2682 PostUnmapMemory(device, mem, result);
2683
2684 return result;
2685}
2686
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002687bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002688 VkDevice device,
2689 const VkMappedMemoryRange* pMemRanges)
2690{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002691 if(pMemRanges != nullptr)
2692 {
2693 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002694 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002695 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002696 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002697 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002698 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002699 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002700
2701 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002702}
2703
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002704bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002705 VkDevice device,
2706 uint32_t memRangeCount,
2707 VkResult result)
2708{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002709
2710
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002711 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002712 {
2713 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2715 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002716 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002717
2718 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002719}
2720
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002721VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002722 VkDevice device,
2723 uint32_t memRangeCount,
2724 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002725{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002726 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002727
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002728 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002729
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002730 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2731
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002732 return result;
2733}
2734
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002735bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002736 VkDevice device,
2737 const VkMappedMemoryRange* pMemRanges)
2738{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002739 if(pMemRanges != nullptr)
2740 {
2741 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002742 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002743 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002744 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002745 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002746 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002747 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002748
2749 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002750}
2751
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002752bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002753 VkDevice device,
2754 uint32_t memRangeCount,
2755 VkResult result)
2756{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002757
2758
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002759 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002760 {
2761 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002762 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2763 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002764 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002765
2766 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002767}
2768
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002769VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002770 VkDevice device,
2771 uint32_t memRangeCount,
2772 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002773{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002774 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002775
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002776 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002777
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002778 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2779
Tony Barbour859ceab2015-04-16 19:23:13 -06002780 return result;
2781}
2782
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002783bool PostGetDeviceMemoryCommitment(
2784 VkDevice device,
2785 VkDeviceMemory memory,
2786 VkDeviceSize* pCommittedMemoryInBytes,
2787 VkResult result)
2788{
2789
2790
2791 if(pCommittedMemoryInBytes != nullptr)
2792 {
2793 }
2794
2795 if(result < VK_SUCCESS)
2796 {
2797 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2798 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2799 return false;
2800 }
2801
2802 return true;
2803}
2804
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002805VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002806 VkDevice device,
2807 VkDeviceMemory memory,
2808 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002809{
2810 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2811
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002812 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2813
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002814 return result;
2815}
2816
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002817bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002818 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002819 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002820 VkDeviceMemory mem,
2821 VkDeviceSize memOffset,
2822 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002823{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002824
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002825
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002826
2827
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002828 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002829 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002830 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2831 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2832 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002833 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002834
2835 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002836}
2837
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002838VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002839 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002840 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002841 VkDeviceMemory mem,
2842 VkDeviceSize memOffset)
2843{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002844 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002845
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002846 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002847
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002848 return result;
2849}
2850
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002851bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002852 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002853 VkImage image,
2854 VkDeviceMemory mem,
2855 VkDeviceSize memOffset,
2856 VkResult result)
2857{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002858
2859
2860
2861
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002862 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002863 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002864 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2865 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2866 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002867 }
2868
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002869 return true;
2870}
2871
2872VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2873 VkDevice device,
2874 VkImage image,
2875 VkDeviceMemory mem,
2876 VkDeviceSize memOffset)
2877{
2878 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2879
2880 PostBindImageMemory(device, image, mem, memOffset, result);
2881
2882 return result;
2883}
2884
2885bool PostGetBufferMemoryRequirements(
2886 VkDevice device,
2887 VkBuffer buffer,
2888 VkMemoryRequirements* pMemoryRequirements,
2889 VkResult result)
2890{
2891
2892
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002893 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002894 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002895 }
2896
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002897 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002898 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002899 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2900 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2901 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002902 }
2903
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002904 return true;
2905}
2906
2907VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2908 VkDevice device,
2909 VkBuffer buffer,
2910 VkMemoryRequirements* pMemoryRequirements)
2911{
2912 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2913
2914 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2915
2916 return result;
2917}
2918
2919bool PostGetImageMemoryRequirements(
2920 VkDevice device,
2921 VkImage image,
2922 VkMemoryRequirements* pMemoryRequirements,
2923 VkResult result)
2924{
2925
2926
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002927 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002928 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002929 }
2930
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002931 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002932 {
2933 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2935 return false;
2936 }
2937
2938 return true;
2939}
2940
2941VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2942 VkDevice device,
2943 VkImage image,
2944 VkMemoryRequirements* pMemoryRequirements)
2945{
2946 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2947
2948 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2949
2950 return result;
2951}
2952
2953bool PostGetImageSparseMemoryRequirements(
2954 VkDevice device,
2955 VkImage image,
2956 uint32_t* pNumRequirements,
2957 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2958 VkResult result)
2959{
2960
2961
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002962 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002963 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002964 }
2965
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002966 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002967 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002968 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2969 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2970 {
2971 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002972 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002973 return false;
2974 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002975 }
2976
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002977 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002978 {
2979 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2980 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2981 return false;
2982 }
2983
2984 return true;
2985}
2986
2987VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2988 VkDevice device,
2989 VkImage image,
2990 uint32_t* pNumRequirements,
2991 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2992{
2993 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2994
2995 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2996
2997 return result;
2998}
2999
3000bool PostGetPhysicalDeviceSparseImageFormatProperties(
3001 VkPhysicalDevice physicalDevice,
3002 VkFormat format,
3003 VkImageType type,
3004 uint32_t samples,
3005 VkImageUsageFlags usage,
3006 VkImageTiling tiling,
3007 uint32_t* pNumProperties,
3008 VkSparseImageFormatProperties* pProperties,
3009 VkResult result)
3010{
3011
3012 if(format < VK_FORMAT_BEGIN_RANGE ||
3013 format > VK_FORMAT_END_RANGE)
3014 {
3015 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003016 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003017 return false;
3018 }
3019
3020 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
3021 type > VK_IMAGE_TYPE_END_RANGE)
3022 {
3023 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003024 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003025 return false;
3026 }
3027
3028
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003029
3030 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3031 tiling > VK_IMAGE_TILING_END_RANGE)
3032 {
3033 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003034 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003035 return false;
3036 }
3037
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003038 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003039 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003040 }
3041
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003042 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003043 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003044 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3045 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
3046 {
3047 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003048 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003049 return false;
3050 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003051 }
3052
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003053 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003054 {
3055 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
3056 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3057 return false;
3058 }
3059
3060 return true;
3061}
3062
3063VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
3064 VkPhysicalDevice physicalDevice,
3065 VkFormat format,
3066 VkImageType type,
3067 uint32_t samples,
3068 VkImageUsageFlags usage,
3069 VkImageTiling tiling,
3070 uint32_t* pNumProperties,
3071 VkSparseImageFormatProperties* pProperties)
3072{
3073 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
3074
3075 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
3076
3077 return result;
3078}
3079
3080bool PreQueueBindSparseBufferMemory(
3081 VkQueue queue,
3082 const VkSparseMemoryBindInfo* pBindInfo)
3083{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003084 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003085 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003086 }
3087
3088 return true;
3089}
3090
3091bool PostQueueBindSparseBufferMemory(
3092 VkQueue queue,
3093 VkBuffer buffer,
3094 uint32_t numBindings,
3095 VkResult result)
3096{
3097
3098
3099
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003100 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003101 {
3102 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
3103 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3104 return false;
3105 }
3106
3107 return true;
3108}
3109
3110VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
3111 VkQueue queue,
3112 VkBuffer buffer,
3113 uint32_t numBindings,
3114 const VkSparseMemoryBindInfo* pBindInfo)
3115{
3116 PreQueueBindSparseBufferMemory(queue, pBindInfo);
3117
3118 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
3119
3120 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
3121
3122 return result;
3123}
3124
3125bool PreQueueBindSparseImageOpaqueMemory(
3126 VkQueue queue,
3127 const VkSparseMemoryBindInfo* pBindInfo)
3128{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003129 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003130 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003131 }
3132
3133 return true;
3134}
3135
3136bool PostQueueBindSparseImageOpaqueMemory(
3137 VkQueue queue,
3138 VkImage image,
3139 uint32_t numBindings,
3140 VkResult result)
3141{
3142
3143
3144
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003145 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003146 {
3147 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
3148 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3149 return false;
3150 }
3151
3152 return true;
3153}
3154
3155VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
3156 VkQueue queue,
3157 VkImage image,
3158 uint32_t numBindings,
3159 const VkSparseMemoryBindInfo* pBindInfo)
3160{
3161 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
3162
3163 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
3164
3165 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
3166
3167 return result;
3168}
3169
3170bool PreQueueBindSparseImageMemory(
3171 VkQueue queue,
3172 const VkSparseImageMemoryBindInfo* pBindInfo)
3173{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003174 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003175 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003176 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3177 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
3178 {
3179 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003180 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003181 return false;
3182 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003183 }
3184
3185 return true;
3186}
3187
3188bool PostQueueBindSparseImageMemory(
3189 VkQueue queue,
3190 VkImage image,
3191 uint32_t numBindings,
3192 VkResult result)
3193{
3194
3195
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003196
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003197 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003198 {
3199 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003200 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3201 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003202 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003203
3204 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003205}
3206
3207VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003208 VkQueue queue,
3209 VkImage image,
3210 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003211 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003212{
3213 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003214
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003215 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003216
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003217 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003218
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003219 return result;
3220}
3221
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003222bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003223 VkDevice device,
3224 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003225{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003226 if(pCreateInfo != nullptr)
3227 {
3228 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003229 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003230 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003231 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003232 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003233 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003234 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003235
3236 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003237}
3238
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003239bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003240 VkDevice device,
3241 VkFence* pFence,
3242 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003243{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003244
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003245 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003246 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003247 }
3248
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003249 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003250 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003251 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003252 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3253 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003254 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003255
3256 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003257}
3258
3259VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3260 VkDevice device,
3261 const VkFenceCreateInfo* pCreateInfo,
3262 VkFence* pFence)
3263{
3264 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003265
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003266 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3267
3268 PostCreateFence(device, pFence, result);
3269
3270 return result;
3271}
3272
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003273bool PostDestroyFence(
3274 VkDevice device,
3275 VkFence fence,
3276 VkResult result)
3277{
3278
3279
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003280 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003281 {
3282 std::string reason = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3283 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3284 return false;
3285 }
3286
3287 return true;
3288}
3289
3290VK_LAYER_EXPORT VkResult VKAPI vkDestroyFence(
3291 VkDevice device,
3292 VkFence fence)
3293{
3294 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3295
3296 PostDestroyFence(device, fence, result);
3297
3298 return result;
3299}
3300
3301bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003302 VkDevice device,
3303 const VkFence* pFences)
3304{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003305 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003306 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003307 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003308
3309 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003310}
3311
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003312bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003313 VkDevice device,
3314 uint32_t fenceCount,
3315 VkResult result)
3316{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003317
3318
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003319 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003320 {
3321 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003322 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3323 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003324 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003325
3326 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003327}
3328
3329VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3330 VkDevice device,
3331 uint32_t fenceCount,
3332 const VkFence* pFences)
3333{
3334 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003335
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003336 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3337
3338 PostResetFences(device, fenceCount, result);
3339
3340 return result;
3341}
3342
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003343bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003344 VkDevice device,
3345 VkFence fence,
3346 VkResult result)
3347{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003348
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003349
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003350 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003351 {
3352 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003353 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3354 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003355 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003356
3357 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003358}
3359
3360VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3361 VkDevice device,
3362 VkFence fence)
3363{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003364 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3365
3366 PostGetFenceStatus(device, fence, result);
3367
3368 return result;
3369}
3370
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003371bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003372 VkDevice device,
3373 const VkFence* pFences)
3374{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003375 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003376 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003377 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003378
3379 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003380}
3381
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003382bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003383 VkDevice device,
3384 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003385 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003386 uint64_t timeout,
3387 VkResult result)
3388{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003389
3390
3391
3392
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003393 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003394 {
3395 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003396 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3397 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003398 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003399
3400 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003401}
3402
3403VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3404 VkDevice device,
3405 uint32_t fenceCount,
3406 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003407 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003408 uint64_t timeout)
3409{
3410 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003411
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003412 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3413
3414 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3415
3416 return result;
3417}
3418
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003419bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003420 VkDevice device,
3421 const VkSemaphoreCreateInfo* pCreateInfo)
3422{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003423 if(pCreateInfo != nullptr)
3424 {
3425 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003426 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003427 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003428 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003429 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003430 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003431 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003432
3433 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003434}
3435
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003436bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003437 VkDevice device,
3438 VkSemaphore* pSemaphore,
3439 VkResult result)
3440{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003442 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003443 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003444 }
3445
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003446 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003447 {
3448 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003449 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3450 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003451 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003452
3453 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003454}
3455
3456VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3457 VkDevice device,
3458 const VkSemaphoreCreateInfo* pCreateInfo,
3459 VkSemaphore* pSemaphore)
3460{
3461 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003462
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003463 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3464
3465 PostCreateSemaphore(device, pSemaphore, result);
3466
3467 return result;
3468}
3469
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003470bool PostDestroySemaphore(
3471 VkDevice device,
3472 VkSemaphore semaphore,
3473 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003474{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003475
3476
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003477 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003478 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003479 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3480 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3481 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003482 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003483
3484 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003485}
3486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003487VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3488 VkDevice device,
3489 VkSemaphore semaphore)
3490{
3491 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3492
3493 PostDestroySemaphore(device, semaphore, result);
3494
3495 return result;
3496}
3497
3498bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003499 VkQueue queue,
3500 VkSemaphore semaphore,
3501 VkResult result)
3502{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003503
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003504
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003505 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003506 {
3507 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003508 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3509 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003510 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003511
3512 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003513}
3514
3515VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3516 VkQueue queue,
3517 VkSemaphore semaphore)
3518{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003519 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3520
3521 PostQueueSignalSemaphore(queue, semaphore, result);
3522
3523 return result;
3524}
3525
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003526bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527 VkQueue queue,
3528 VkSemaphore semaphore,
3529 VkResult result)
3530{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003531
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003532
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003533 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003534 {
3535 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003536 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3537 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003538 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003539
3540 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003541}
3542
3543VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3544 VkQueue queue,
3545 VkSemaphore semaphore)
3546{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003547 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3548
3549 PostQueueWaitSemaphore(queue, semaphore, result);
3550
3551 return result;
3552}
3553
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003554bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003555 VkDevice device,
3556 const VkEventCreateInfo* pCreateInfo)
3557{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003558 if(pCreateInfo != nullptr)
3559 {
3560 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003561 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003562 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003563 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003564 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003565 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003566 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003567
3568 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003569}
3570
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003571bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572 VkDevice device,
3573 VkEvent* pEvent,
3574 VkResult result)
3575{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003576
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003577 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003578 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003579 }
3580
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003581 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003582 {
3583 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003584 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3585 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003586 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003587
3588 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003589}
3590
3591VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3592 VkDevice device,
3593 const VkEventCreateInfo* pCreateInfo,
3594 VkEvent* pEvent)
3595{
3596 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003597
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003598 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3599
3600 PostCreateEvent(device, pEvent, result);
3601
3602 return result;
3603}
3604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003605bool PostDestroyEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003606 VkDevice device,
3607 VkEvent event,
3608 VkResult result)
3609{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003610
3611
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003612 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003613 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003614 std::string reason = "vkDestroyEvent parameter, VkResult result, is " + EnumeratorString(result);
3615 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3616 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003617 }
3618
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003619 return true;
3620}
3621
3622VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3623 VkDevice device,
3624 VkEvent event)
3625{
3626 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3627
3628 PostDestroyEvent(device, event, result);
3629
3630 return result;
3631}
3632
3633bool PostGetEventStatus(
3634 VkDevice device,
3635 VkEvent event,
3636 VkResult result)
3637{
3638
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003639
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003640 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003641 {
3642 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003643 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3644 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003645 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003646
3647 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003648}
3649
3650VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3651 VkDevice device,
3652 VkEvent event)
3653{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003654 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3655
3656 PostGetEventStatus(device, event, result);
3657
3658 return result;
3659}
3660
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003661bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003662 VkDevice device,
3663 VkEvent event,
3664 VkResult result)
3665{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003666
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003667
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003668 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003669 {
3670 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003671 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3672 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003673 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003674
3675 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003676}
3677
3678VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3679 VkDevice device,
3680 VkEvent event)
3681{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003682 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3683
3684 PostSetEvent(device, event, result);
3685
3686 return result;
3687}
3688
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003689bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003690 VkDevice device,
3691 VkEvent event,
3692 VkResult result)
3693{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003694
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003695
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003696 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003697 {
3698 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003699 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3700 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003701 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003702
3703 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003704}
3705
3706VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3707 VkDevice device,
3708 VkEvent event)
3709{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003710 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3711
3712 PostResetEvent(device, event, result);
3713
3714 return result;
3715}
3716
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003717bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003718 VkDevice device,
3719 const VkQueryPoolCreateInfo* pCreateInfo)
3720{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003721 if(pCreateInfo != nullptr)
3722 {
3723 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003724 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003725 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003726 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003727 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003728 }
3729 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3730 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3731 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003732 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003733 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003734 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003735 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003736 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003737
3738 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003739}
3740
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003741bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003742 VkDevice device,
3743 VkQueryPool* pQueryPool,
3744 VkResult result)
3745{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003746
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003747 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003748 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003749 }
3750
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003751 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003752 {
3753 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003754 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3755 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003756 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003757
3758 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003759}
3760
3761VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3762 VkDevice device,
3763 const VkQueryPoolCreateInfo* pCreateInfo,
3764 VkQueryPool* pQueryPool)
3765{
3766 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003768 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3769
3770 PostCreateQueryPool(device, pQueryPool, result);
3771
3772 return result;
3773}
3774
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003775bool PostDestroyQueryPool(
3776 VkDevice device,
3777 VkQueryPool queryPool,
3778 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003779{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003780
3781
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003782 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003783 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003784 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3785 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3786 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003787 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003788
3789 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003790}
3791
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003792VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3793 VkDevice device,
3794 VkQueryPool queryPool)
3795{
3796 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3797
3798 PostDestroyQueryPool(device, queryPool, result);
3799
3800 return result;
3801}
3802
3803bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003804 VkDevice device,
3805 VkQueryPool queryPool,
3806 uint32_t startQuery,
3807 uint32_t queryCount,
3808 size_t* pDataSize,
3809 void* pData,
3810 VkQueryResultFlags flags,
3811 VkResult result)
3812{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003813
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003814
3815
3816
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003817 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003818 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003819 }
3820
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003821 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003822 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003823 }
3824
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003825
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003826 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003827 {
3828 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003829 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3830 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003831 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003832
3833 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003834}
3835
3836VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3837 VkDevice device,
3838 VkQueryPool queryPool,
3839 uint32_t startQuery,
3840 uint32_t queryCount,
3841 size_t* pDataSize,
3842 void* pData,
3843 VkQueryResultFlags flags)
3844{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003845 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3846
3847 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3848
3849 return result;
3850}
3851
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003852bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003853 VkDevice device,
3854 const VkBufferCreateInfo* pCreateInfo)
3855{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003856 if(pCreateInfo != nullptr)
3857 {
3858 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003859 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003860 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003861 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003862 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003863 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003864 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3865 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003866 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003867 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003868 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003869 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003870 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003871 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003872 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003873 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003874 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003875
3876 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003877}
3878
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003879bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003880 VkDevice device,
3881 VkBuffer* pBuffer,
3882 VkResult result)
3883{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003884
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003885 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003886 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003887 }
3888
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003889 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003890 {
3891 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3893 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003894 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003895
3896 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003897}
3898
3899VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3900 VkDevice device,
3901 const VkBufferCreateInfo* pCreateInfo,
3902 VkBuffer* pBuffer)
3903{
3904 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003905
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003906 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3907
3908 PostCreateBuffer(device, pBuffer, result);
3909
3910 return result;
3911}
3912
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003913bool PostDestroyBuffer(
3914 VkDevice device,
3915 VkBuffer buffer,
3916 VkResult result)
3917{
3918
3919
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003920 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003921 {
3922 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3923 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3924 return false;
3925 }
3926
3927 return true;
3928}
3929
3930VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3931 VkDevice device,
3932 VkBuffer buffer)
3933{
3934 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
3935
3936 PostDestroyBuffer(device, buffer, result);
3937
3938 return result;
3939}
3940
3941bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003942 VkDevice device,
3943 const VkBufferViewCreateInfo* pCreateInfo)
3944{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003945 if(pCreateInfo != nullptr)
3946 {
3947 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003948 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003950 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003951 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003952 }
3953 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3954 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3955 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003956 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003957 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003958 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003959 }
3960 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3961 pCreateInfo->format > VK_FORMAT_END_RANGE)
3962 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003963 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003964 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003965 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003966 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003967 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003968
3969 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003970}
3971
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003972bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003973 VkDevice device,
3974 VkBufferView* pView,
3975 VkResult result)
3976{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003977
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003978 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003979 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003980 }
3981
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003982 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003983 {
3984 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003985 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3986 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003987 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003988
3989 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003990}
3991
3992VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3993 VkDevice device,
3994 const VkBufferViewCreateInfo* pCreateInfo,
3995 VkBufferView* pView)
3996{
3997 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003998
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003999 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
4000
4001 PostCreateBufferView(device, pView, result);
4002
4003 return result;
4004}
4005
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004006bool PostDestroyBufferView(
4007 VkDevice device,
4008 VkBufferView bufferView,
4009 VkResult result)
4010{
4011
4012
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004013 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004014 {
4015 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
4016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4017 return false;
4018 }
4019
4020 return true;
4021}
4022
4023VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
4024 VkDevice device,
4025 VkBufferView bufferView)
4026{
4027 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
4028
4029 PostDestroyBufferView(device, bufferView, result);
4030
4031 return result;
4032}
4033
4034bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004035 VkDevice device,
4036 const VkImageCreateInfo* pCreateInfo)
4037{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004038 if(pCreateInfo != nullptr)
4039 {
4040 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004041 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004042 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004043 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004044 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004045 }
4046 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
4047 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
4048 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004049 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004050 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004051 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004052 }
4053 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4054 pCreateInfo->format > VK_FORMAT_END_RANGE)
4055 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004056 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004057 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004058 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004059 }
4060 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
4061 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
4062 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004063 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004064 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004065 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004066 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004067 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
4068 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004069 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004070 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4071 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004072 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004073 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004074 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004075 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004076 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004077 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004078
4079 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004080}
4081
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004082bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004083 VkDevice device,
4084 VkImage* pImage,
4085 VkResult result)
4086{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004087
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004088 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004089 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004090 }
4091
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004092 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004093 {
4094 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004095 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4096 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004097 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004098
4099 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004100}
4101
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004102VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
4103 VkDevice device,
4104 const VkImageCreateInfo* pCreateInfo,
4105 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004106{
4107 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004108
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004109 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
4110
4111 PostCreateImage(device, pImage, result);
4112
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004113 return result;
4114}
4115
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004116bool PostDestroyImage(
4117 VkDevice device,
4118 VkImage image,
4119 VkResult result)
4120{
4121
4122
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004123 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004124 {
4125 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
4126 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4127 return false;
4128 }
4129
4130 return true;
4131}
4132
4133VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
4134 VkDevice device,
4135 VkImage image)
4136{
4137 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
4138
4139 PostDestroyImage(device, image, result);
4140
4141 return result;
4142}
4143
4144bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004145 VkDevice device,
4146 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004147{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004148 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004149 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004150 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4151 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4152 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004153 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004154 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004155 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004156 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004157 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004158
4159 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004160}
4161
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004162bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004163 VkDevice device,
4164 VkImage image,
4165 VkSubresourceLayout* pLayout,
4166 VkResult result)
4167{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004168
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004169
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004170 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004171 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004172 }
4173
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004174 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004175 {
4176 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004177 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4178 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004179 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004180
4181 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004182}
4183
4184VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4185 VkDevice device,
4186 VkImage image,
4187 const VkImageSubresource* pSubresource,
4188 VkSubresourceLayout* pLayout)
4189{
4190 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004191
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004192 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4193
4194 PostGetImageSubresourceLayout(device, image, pLayout, result);
4195
4196 return result;
4197}
4198
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004199bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004200 VkDevice device,
4201 const VkImageViewCreateInfo* pCreateInfo)
4202{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004203 if(pCreateInfo != nullptr)
4204 {
4205 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004206 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004207 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004208 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004209 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004210 }
4211 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4212 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4213 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004214 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004215 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004216 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004217 }
4218 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4219 pCreateInfo->format > VK_FORMAT_END_RANGE)
4220 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004222 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004223 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004224 }
4225 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4226 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4227 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004228 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004229 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004230 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004231 }
4232 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4233 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4234 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004236 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004237 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004238 }
4239 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4240 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4241 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004243 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004244 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004245 }
4246 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4247 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4248 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004249 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004250 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004251 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004252 }
4253 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4254 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4255 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004256 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004257 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004258 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004259 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004260 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004261
4262 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004263}
4264
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004265bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004266 VkDevice device,
4267 VkImageView* pView,
4268 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004269{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004270
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004271 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004272 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004273 }
4274
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004275 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004276 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004277 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004278 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4279 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004280 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004281
4282 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004283}
4284
4285VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4286 VkDevice device,
4287 const VkImageViewCreateInfo* pCreateInfo,
4288 VkImageView* pView)
4289{
4290 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004291
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004292 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4293
4294 PostCreateImageView(device, pView, result);
4295
4296 return result;
4297}
4298
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004299bool PostDestroyImageView(
4300 VkDevice device,
4301 VkImageView imageView,
4302 VkResult result)
4303{
4304
4305
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004306 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004307 {
4308 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4309 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4310 return false;
4311 }
4312
4313 return true;
4314}
4315
4316VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4317 VkDevice device,
4318 VkImageView imageView)
4319{
4320 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4321
4322 PostDestroyImageView(device, imageView, result);
4323
4324 return result;
4325}
4326
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004327bool PreCreateAttachmentView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004328 VkDevice device,
Chia-I Wuc278df82015-07-07 11:50:03 +08004329 const VkAttachmentViewCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004330{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004331 if(pCreateInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004332 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004333 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_ATTACHMENT_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004334 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004335 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4336 "vkCreateAttachmentView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4337 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004338 }
4339 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4340 pCreateInfo->format > VK_FORMAT_END_RANGE)
4341 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004342 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4343 "vkCreateAttachmentView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
4344 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004345 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004346 }
4347
4348 return true;
4349}
4350
4351bool PostCreateAttachmentView(
4352 VkDevice device,
4353 VkAttachmentView* pView,
4354 VkResult result)
4355{
4356
4357 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004358 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004359 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004360
4361 if(result < VK_SUCCESS)
4362 {
4363 std::string reason = "vkCreateAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4365 return false;
4366 }
4367
4368 return true;
4369}
4370
4371VK_LAYER_EXPORT VkResult VKAPI vkCreateAttachmentView(
4372 VkDevice device,
4373 const VkAttachmentViewCreateInfo* pCreateInfo,
4374 VkAttachmentView* pView)
4375{
4376 PreCreateAttachmentView(device, pCreateInfo);
4377
4378 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateAttachmentView(device, pCreateInfo, pView);
4379
4380 PostCreateAttachmentView(device, pView, result);
4381
4382 return result;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004383}
4384
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004385bool PostDestroyAttachmentView(
4386 VkDevice device,
4387 VkAttachmentView attachmentView,
4388 VkResult result)
4389{
4390
4391
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004392 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004393 {
4394 std::string reason = "vkDestroyAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4395 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4396 return false;
4397 }
4398
4399 return true;
4400}
4401
4402VK_LAYER_EXPORT VkResult VKAPI vkDestroyAttachmentView(
4403 VkDevice device,
4404 VkAttachmentView attachmentView)
4405{
4406 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyAttachmentView(device, attachmentView);
4407
4408 PostDestroyAttachmentView(device, attachmentView, result);
4409
4410 return result;
4411}
4412
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004413bool PostDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004414 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004415 VkShaderModule shaderModule,
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004416 VkResult result)
4417{
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004418
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004419
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004420 if(result < VK_SUCCESS)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004421 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004422 std::string reason = "vkDestroyShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4423 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4424 return false;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004425 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004426
4427 return true;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004428}
4429
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004430VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004431 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004432 VkShaderModule shaderModule)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004433{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004434 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004435
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004436 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004437
4438 return result;
4439}
4440
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004441bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004442 VkDevice device,
4443 const VkShaderCreateInfo* pCreateInfo)
4444{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004445 if(pCreateInfo != nullptr)
4446 {
4447 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004448 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004449 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004450 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004451 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004452 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004453 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004454 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004455 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004456 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004457
4458 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004459}
4460
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004461bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004462 VkDevice device,
4463 VkShader* pShader,
4464 VkResult result)
4465{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004466
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004467 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004468 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004469 }
4470
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004471 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004472 {
4473 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004474 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4475 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004476 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004477
4478 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004479}
4480
4481VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4482 VkDevice device,
4483 const VkShaderCreateInfo* pCreateInfo,
4484 VkShader* pShader)
4485{
4486 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004487
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004488 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4489
4490 PostCreateShader(device, pShader, result);
4491
4492 return result;
4493}
4494
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004495bool PostDestroyShader(
4496 VkDevice device,
4497 VkShader shader,
4498 VkResult result)
4499{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004500
4501
4502 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004503 {
4504 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4505 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4506 return false;
4507 }
4508
4509 return true;
4510}
4511
4512VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4513 VkDevice device,
4514 VkShader shader)
4515{
4516 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4517
4518 PostDestroyShader(device, shader, result);
4519
4520 return result;
4521}
4522
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004523bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004524 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004525 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004526{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004527 if(pCreateInfo != nullptr)
4528 {
4529 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004530 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004531 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004532 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004533 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004534 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004535 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004536 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004537 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004538 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004539
4540 return true;
4541}
4542
4543bool PostCreatePipelineCache(
4544 VkDevice device,
4545 VkPipelineCache* pPipelineCache,
4546 VkResult result)
4547{
4548
4549 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004550 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004551 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004552
4553 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004554 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004555 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004556 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4557 return false;
4558 }
4559
4560 return true;
4561}
4562
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004563VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06004564 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004565 const VkPipelineCacheCreateInfo* pCreateInfo,
4566 VkPipelineCache* pPipelineCache)
4567{
4568 PreCreatePipelineCache(device, pCreateInfo);
4569
4570 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4571
4572 PostCreatePipelineCache(device, pPipelineCache, result);
4573
4574 return result;
4575}
4576
4577bool PostDestroyPipelineCache(
4578 VkDevice device,
4579 VkPipelineCache pipelineCache,
Tony Barboure307f582015-07-10 15:29:03 -06004580 VkResult result)
4581{
4582
Tony Barboure307f582015-07-10 15:29:03 -06004583
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004584 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004585 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004586 std::string reason = "vkDestroyPipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004587 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4588 return false;
4589 }
4590
4591 return true;
4592}
4593
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004594VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineCache(
4595 VkDevice device,
4596 VkPipelineCache pipelineCache)
4597{
4598 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache);
4599
4600 PostDestroyPipelineCache(device, pipelineCache, result);
4601
4602 return result;
4603}
4604
4605bool PostGetPipelineCacheSize(
4606 VkDevice device,
4607 VkPipelineCache pipelineCache)
4608{
4609
4610
4611 return true;
4612}
4613
4614VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4615 VkDevice device,
4616 VkPipelineCache pipelineCache)
4617{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004618 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004619
4620 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004621
4622 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004623}
4624
4625bool PostGetPipelineCacheData(
4626 VkDevice device,
4627 VkPipelineCache pipelineCache,
4628 void* pData,
4629 VkResult result)
4630{
4631
4632
4633 if(pData != nullptr)
4634 {
4635 }
4636
4637 if(result < VK_SUCCESS)
4638 {
4639 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4640 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4641 return false;
4642 }
4643
4644 return true;
4645}
4646
4647VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4648 VkDevice device,
4649 VkPipelineCache pipelineCache,
4650 void* pData)
4651{
4652 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4653
4654 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4655
4656 return result;
4657}
4658
4659bool PreMergePipelineCaches(
4660 VkDevice device,
4661 const VkPipelineCache* pSrcCaches)
4662{
4663 if(pSrcCaches != nullptr)
4664 {
4665 }
4666
4667 return true;
4668}
4669
4670bool PostMergePipelineCaches(
4671 VkDevice device,
4672 VkPipelineCache destCache,
4673 uint32_t srcCacheCount,
4674 VkResult result)
4675{
4676
4677
4678
4679 if(result < VK_SUCCESS)
4680 {
4681 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4682 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4683 return false;
4684 }
4685
4686 return true;
4687}
4688
4689VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4690 VkDevice device,
4691 VkPipelineCache destCache,
4692 uint32_t srcCacheCount,
4693 const VkPipelineCache* pSrcCaches)
4694{
4695 PreMergePipelineCaches(device, pSrcCaches);
4696
4697 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4698
4699 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4700
4701 return result;
4702}
4703
4704bool PreCreateGraphicsPipelines(
4705 VkDevice device,
4706 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4707{
4708 if(pCreateInfos != nullptr)
4709 {
4710 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4711 {
4712 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4713 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4714 return false;
4715 }
4716 if(pCreateInfos->pStages != nullptr)
4717 {
4718 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4719 {
4720 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4721 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4722 return false;
4723 }
4724 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4725 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4726 {
4727 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4728 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4729 return false;
4730 }
4731 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4732 {
4733 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4734 {
4735 }
4736 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4737 {
4738 }
4739 }
4740 }
4741 if(pCreateInfos->pVertexInputState != nullptr)
4742 {
4743 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4744 {
4745 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4746 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4747 return false;
4748 }
4749 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4750 {
4751 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4752 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4753 {
4754 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4755 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4756 return false;
4757 }
4758 }
4759 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4760 {
4761 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4762 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4763 {
4764 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4765 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4766 return false;
4767 }
4768 }
4769 }
4770 if(pCreateInfos->pInputAssemblyState != nullptr)
4771 {
4772 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4773 {
4774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4775 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4776 return false;
4777 }
4778 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4779 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4780 {
4781 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4782 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4783 return false;
4784 }
4785 }
4786 if(pCreateInfos->pTessellationState != nullptr)
4787 {
4788 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4789 {
4790 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4791 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4792 return false;
4793 }
4794 }
4795 if(pCreateInfos->pViewportState != nullptr)
4796 {
4797 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4798 {
4799 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4800 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4801 return false;
4802 }
4803 }
4804 if(pCreateInfos->pRasterState != nullptr)
4805 {
4806 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4807 {
4808 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4809 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4810 return false;
4811 }
4812 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4813 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4814 {
4815 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4816 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4817 return false;
4818 }
4819 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4820 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4821 {
4822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4823 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4824 return false;
4825 }
4826 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4827 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4828 {
4829 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4830 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4831 return false;
4832 }
4833 }
4834 if(pCreateInfos->pMultisampleState != nullptr)
4835 {
4836 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4837 {
4838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4839 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4840 return false;
4841 }
4842 }
4843 if(pCreateInfos->pDepthStencilState != nullptr)
4844 {
4845 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4846 {
4847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4848 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4849 return false;
4850 }
4851 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4852 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4853 {
4854 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4855 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4856 return false;
4857 }
4858 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4859 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4860 {
4861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4862 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4863 return false;
4864 }
4865 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4866 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4867 {
4868 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4869 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4870 return false;
4871 }
4872 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4873 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4874 {
4875 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4876 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4877 return false;
4878 }
4879 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4880 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4881 {
4882 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4883 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4884 return false;
4885 }
4886 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4887 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4888 {
4889 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4890 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4891 return false;
4892 }
4893 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4894 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4895 {
4896 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4897 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4898 return false;
4899 }
4900 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4901 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4902 {
4903 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4904 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4905 return false;
4906 }
4907 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4908 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4909 {
4910 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4911 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4912 return false;
4913 }
4914 }
4915 if(pCreateInfos->pColorBlendState != nullptr)
4916 {
4917 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4918 {
4919 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4920 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4921 return false;
4922 }
4923 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4924 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4925 {
4926 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4927 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4928 return false;
4929 }
4930 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4931 {
4932 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4933 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4934 {
4935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4936 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4937 return false;
4938 }
4939 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4940 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4941 {
4942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4943 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4944 return false;
4945 }
4946 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4947 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4948 {
4949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4950 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4951 return false;
4952 }
4953 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4954 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4955 {
4956 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4957 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4958 return false;
4959 }
4960 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4961 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4962 {
4963 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4964 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4965 return false;
4966 }
4967 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4968 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4969 {
4970 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4971 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4972 return false;
4973 }
4974 }
4975 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004976 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4977 {
4978 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4979 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4980 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004981 }
4982
4983 return true;
4984}
4985
4986bool PostCreateGraphicsPipelines(
4987 VkDevice device,
4988 VkPipelineCache pipelineCache,
4989 uint32_t count,
4990 VkPipeline* pPipelines,
4991 VkResult result)
4992{
4993
4994
4995
4996 if(pPipelines != nullptr)
4997 {
4998 }
4999
5000 if(result < VK_SUCCESS)
5001 {
5002 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
5003 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5004 return false;
5005 }
5006
5007 return true;
5008}
5009
5010VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
5011 VkDevice device,
5012 VkPipelineCache pipelineCache,
5013 uint32_t count,
5014 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5015 VkPipeline* pPipelines)
5016{
5017 PreCreateGraphicsPipelines(device, pCreateInfos);
5018
5019 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5020
5021 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
5022
5023 return result;
5024}
5025
5026bool PreCreateComputePipelines(
5027 VkDevice device,
5028 const VkComputePipelineCreateInfo* pCreateInfos)
5029{
5030 if(pCreateInfos != nullptr)
5031 {
5032 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
5033 {
5034 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5035 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
5036 return false;
5037 }
5038 if(pCreateInfos->cs.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
5039 {
5040 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5041 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
5042 return false;
5043 }
5044 if(pCreateInfos->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5045 pCreateInfos->cs.stage > VK_SHADER_STAGE_END_RANGE)
5046 {
5047 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5048 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
5049 return false;
5050 }
5051 if(pCreateInfos->cs.pSpecializationInfo != nullptr)
5052 {
5053 if(pCreateInfos->cs.pSpecializationInfo->pMap != nullptr)
5054 {
5055 }
5056 if(pCreateInfos->cs.pSpecializationInfo->pData != nullptr)
5057 {
5058 }
5059 }
5060 }
5061
5062 return true;
5063}
5064
5065bool PostCreateComputePipelines(
5066 VkDevice device,
5067 VkPipelineCache pipelineCache,
5068 uint32_t count,
5069 VkPipeline* pPipelines,
5070 VkResult result)
5071{
5072
5073
5074
5075 if(pPipelines != nullptr)
5076 {
5077 }
5078
5079 if(result < VK_SUCCESS)
5080 {
5081 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
5082 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5083 return false;
5084 }
5085
5086 return true;
5087}
5088
5089VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
5090 VkDevice device,
5091 VkPipelineCache pipelineCache,
5092 uint32_t count,
5093 const VkComputePipelineCreateInfo* pCreateInfos,
5094 VkPipeline* pPipelines)
5095{
5096 PreCreateComputePipelines(device, pCreateInfos);
5097
5098 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5099
5100 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
5101
5102 return result;
5103}
5104
Tony Barboure307f582015-07-10 15:29:03 -06005105bool PostDestroyPipeline(
5106 VkDevice device,
5107 VkPipeline pipeline,
5108 VkResult result)
5109{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005110
5111
5112 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06005113 {
5114 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
5115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5116 return false;
5117 }
5118
5119 return true;
5120}
5121
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005122VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5123 VkDevice device,
5124 VkPipeline pipeline)
5125{
5126 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5127
5128 PostDestroyPipeline(device, pipeline, result);
5129
5130 return result;
5131}
5132
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005133bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005134 VkDevice device,
5135 const VkPipelineLayoutCreateInfo* pCreateInfo)
5136{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005137 if(pCreateInfo != nullptr)
5138 {
5139 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005140 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005141 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005142 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5143 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005144 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005145 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005146 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005147 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005148 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005149 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005150 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005151 }
5152
5153 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005154}
5155
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005156bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005157 VkDevice device,
5158 VkPipelineLayout* pPipelineLayout,
5159 VkResult result)
5160{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005161
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005162 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005163 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005164 }
5165
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005166 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005167 {
5168 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5170 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005171 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005172
5173 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005174}
5175
5176VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5177 VkDevice device,
5178 const VkPipelineLayoutCreateInfo* pCreateInfo,
5179 VkPipelineLayout* pPipelineLayout)
5180{
5181 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005182
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005183 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5184
5185 PostCreatePipelineLayout(device, pPipelineLayout, result);
5186
5187 return result;
5188}
5189
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005190bool PostDestroyPipelineLayout(
5191 VkDevice device,
5192 VkPipelineLayout pipelineLayout,
5193 VkResult result)
5194{
5195
5196
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005197 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005198 {
5199 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5200 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5201 return false;
5202 }
5203
5204 return true;
5205}
5206
5207VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5208 VkDevice device,
5209 VkPipelineLayout pipelineLayout)
5210{
5211 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5212
5213 PostDestroyPipelineLayout(device, pipelineLayout, result);
5214
5215 return result;
5216}
5217
5218bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005219 VkDevice device,
5220 const VkSamplerCreateInfo* pCreateInfo)
5221{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005222 if(pCreateInfo != nullptr)
5223 {
5224 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005225 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005226 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005227 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005228 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005229 }
5230 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5231 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5232 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005233 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005234 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005235 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005236 }
5237 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5238 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5239 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005240 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005241 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005242 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005243 }
5244 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5245 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5246 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005247 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005248 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005249 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005250 }
5251 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5252 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5253 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005254 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005255 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005256 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005257 }
5258 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5259 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5260 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005262 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005263 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005264 }
5265 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5266 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5267 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005268 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005269 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005270 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005271 }
5272 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5273 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5274 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005275 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005276 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005277 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005278 }
5279 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5280 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5281 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005283 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005284 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005285 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005286 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005287
5288 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005289}
5290
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005291bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005292 VkDevice device,
5293 VkSampler* pSampler,
5294 VkResult result)
5295{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005296
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005297 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005298 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005299 }
5300
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005301 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005302 {
5303 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005304 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5305 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005306 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005307
5308 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005309}
5310
5311VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5312 VkDevice device,
5313 const VkSamplerCreateInfo* pCreateInfo,
5314 VkSampler* pSampler)
5315{
5316 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005317
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005318 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5319
5320 PostCreateSampler(device, pSampler, result);
5321
5322 return result;
5323}
5324
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005325bool PostDestroySampler(
5326 VkDevice device,
5327 VkSampler sampler,
5328 VkResult result)
5329{
5330
5331
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005332 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005333 {
5334 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5335 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5336 return false;
5337 }
5338
5339 return true;
5340}
5341
5342VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5343 VkDevice device,
5344 VkSampler sampler)
5345{
5346 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5347
5348 PostDestroySampler(device, sampler, result);
5349
5350 return result;
5351}
5352
5353bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005354 VkDevice device,
5355 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5356{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005357 if(pCreateInfo != nullptr)
5358 {
5359 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005360 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005361 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005362 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005363 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005364 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005365 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005366 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005367 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5368 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5369 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005370 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005371 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005372 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005373 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005374 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005375 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005376 }
5377 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005378 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005379
5380 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005381}
5382
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005383bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005384 VkDevice device,
5385 VkDescriptorSetLayout* pSetLayout,
5386 VkResult result)
5387{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005388
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005389 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005390 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005391 }
5392
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005393 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005394 {
5395 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005396 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5397 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005398 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005399
5400 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005401}
5402
5403VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5404 VkDevice device,
5405 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5406 VkDescriptorSetLayout* pSetLayout)
5407{
5408 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005409
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005410 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5411
5412 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5413
5414 return result;
5415}
5416
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005417bool PostDestroyDescriptorSetLayout(
5418 VkDevice device,
5419 VkDescriptorSetLayout descriptorSetLayout,
5420 VkResult result)
5421{
5422
5423
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005424 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005425 {
5426 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5427 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5428 return false;
5429 }
5430
5431 return true;
5432}
5433
5434VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5435 VkDevice device,
5436 VkDescriptorSetLayout descriptorSetLayout)
5437{
5438 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5439
5440 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5441
5442 return result;
5443}
5444
5445bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005446 VkDevice device,
5447 const VkDescriptorPoolCreateInfo* pCreateInfo)
5448{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005449 if(pCreateInfo != nullptr)
5450 {
5451 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005452 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005453 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005454 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005455 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005456 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005457 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005458 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005459 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5460 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5461 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005462 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005463 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005464 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005465 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005466 }
5467 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005468
5469 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005470}
5471
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005472bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005473 VkDevice device,
5474 VkDescriptorPoolUsage poolUsage,
5475 uint32_t maxSets,
5476 VkDescriptorPool* pDescriptorPool,
5477 VkResult result)
5478{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005479
5480 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5481 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5482 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005483 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005484 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005485 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005486 }
5487
5488
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005489 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005490 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005491 }
5492
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005493 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005494 {
5495 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005496 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5497 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005498 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005499
5500 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005501}
5502
5503VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5504 VkDevice device,
5505 VkDescriptorPoolUsage poolUsage,
5506 uint32_t maxSets,
5507 const VkDescriptorPoolCreateInfo* pCreateInfo,
5508 VkDescriptorPool* pDescriptorPool)
5509{
5510 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005511
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005512 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5513
5514 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5515
5516 return result;
5517}
5518
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005519bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005520 VkDevice device,
5521 VkDescriptorPool descriptorPool,
5522 VkResult result)
5523{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005524
5525
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005526 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005527 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005528 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5529 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5530 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005531 }
5532
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005533 return true;
5534}
5535
5536VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5537 VkDevice device,
5538 VkDescriptorPool descriptorPool)
5539{
5540 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5541
5542 PostDestroyDescriptorPool(device, descriptorPool, result);
5543
5544 return result;
5545}
5546
5547bool PostResetDescriptorPool(
5548 VkDevice device,
5549 VkDescriptorPool descriptorPool,
5550 VkResult result)
5551{
5552
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005553
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005554 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005555 {
5556 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005557 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5558 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005559 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005560
5561 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005562}
5563
5564VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5565 VkDevice device,
5566 VkDescriptorPool descriptorPool)
5567{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005568 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5569
5570 PostResetDescriptorPool(device, descriptorPool, result);
5571
5572 return result;
5573}
5574
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005575bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005576 VkDevice device,
5577 const VkDescriptorSetLayout* pSetLayouts)
5578{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005579 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005580 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005581 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005582
5583 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005584}
5585
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005586bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005587 VkDevice device,
5588 VkDescriptorPool descriptorPool,
5589 VkDescriptorSetUsage setUsage,
5590 uint32_t count,
5591 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005592 VkResult result)
5593{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005594
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005595
5596 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5597 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5598 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005599 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005600 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005601 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005602 }
5603
5604
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005605 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005606 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005607 }
5608
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005609 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005610 {
5611 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005612 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5613 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005614 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005615
5616 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005617}
5618
5619VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5620 VkDevice device,
5621 VkDescriptorPool descriptorPool,
5622 VkDescriptorSetUsage setUsage,
5623 uint32_t count,
5624 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06005625 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005626{
5627 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005628
Cody Northropc8aa4a52015-08-03 12:47:29 -06005629 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005630
Cody Northropc8aa4a52015-08-03 12:47:29 -06005631 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005632
5633 return result;
5634}
5635
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005636bool PreFreeDescriptorSets(
5637 VkDevice device,
5638 const VkDescriptorSet* pDescriptorSets)
5639{
5640 if(pDescriptorSets != nullptr)
5641 {
5642 }
5643
5644 return true;
5645}
5646
5647bool PostFreeDescriptorSets(
5648 VkDevice device,
5649 VkDescriptorPool descriptorPool,
5650 uint32_t count,
5651 VkResult result)
5652{
5653
5654
5655
5656 if(result < VK_SUCCESS)
5657 {
5658 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5659 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5660 return false;
5661 }
5662
5663 return true;
5664}
5665
5666VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
5667 VkDevice device,
5668 VkDescriptorPool descriptorPool,
5669 uint32_t count,
5670 const VkDescriptorSet* pDescriptorSets)
5671{
5672 PreFreeDescriptorSets(device, pDescriptorSets);
5673
5674 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
5675
5676 PostFreeDescriptorSets(device, descriptorPool, count, result);
5677
5678 return result;
5679}
5680
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005681bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005682 VkDevice device,
5683 const VkWriteDescriptorSet* pDescriptorWrites,
5684 const VkCopyDescriptorSet* pDescriptorCopies)
5685{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005686 if(pDescriptorWrites != nullptr)
5687 {
5688 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005689 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005690 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005691 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005692 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005693 }
5694 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5695 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5696 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005697 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005698 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005699 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005700 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005701 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005702 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005703 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5704 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5705 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005706 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005707 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005708 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005709 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005710 }
5711 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005712
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005713 if(pDescriptorCopies != nullptr)
5714 {
5715 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005716 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005717 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005718 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005719 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005720 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005721 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005722
5723 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005724}
5725
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005726bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005727 VkDevice device,
5728 uint32_t writeCount,
5729 uint32_t copyCount,
5730 VkResult result)
5731{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005732
5733
5734
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005735 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005736 {
5737 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005738 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5739 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005740 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005741
5742 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005743}
5744
5745VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
5746 VkDevice device,
5747 uint32_t writeCount,
5748 const VkWriteDescriptorSet* pDescriptorWrites,
5749 uint32_t copyCount,
5750 const VkCopyDescriptorSet* pDescriptorCopies)
5751{
5752 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005753
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005754 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
5755
5756 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
5757
5758 return result;
5759}
5760
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005761bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005762 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005763 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005764{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005765 if(pCreateInfo != nullptr)
5766 {
5767 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005768 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005769 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005770 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005771 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005773 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005774 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005775 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005776 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005777 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005778 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005779 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005780
5781 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005782}
5783
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005784bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005785 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005786 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005787 VkResult result)
5788{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005789
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005790 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005791 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005792 }
5793
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005794 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005795 {
5796 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005797 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5798 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005799 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005800
5801 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802}
5803
5804VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5805 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005806 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5807 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005808{
5809 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005810
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005811 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5812
5813 PostCreateDynamicViewportState(device, pState, result);
5814
5815 return result;
5816}
5817
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005818bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005819 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005820 VkDynamicViewportState dynamicViewportState,
5821 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005822{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005823
5824
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005825 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005826 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005827 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
5828 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5829 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005830 }
5831
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005832 return true;
5833}
5834
5835VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
5836 VkDevice device,
5837 VkDynamicViewportState dynamicViewportState)
5838{
5839 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
5840
5841 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
5842
5843 return result;
5844}
5845
Cody Northrope4bc6942015-08-26 10:01:32 -06005846bool PreCreateDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005847 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005848 const VkDynamicLineWidthStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005849{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005850 if(pCreateInfo != nullptr)
5851 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005852 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005853 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005854 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005855 "vkCreateDynamicLineWidthState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005856 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005857 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005858 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005859
5860 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005861}
5862
Cody Northrope4bc6942015-08-26 10:01:32 -06005863bool PostCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005864 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005865 VkDynamicLineWidthState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005866 VkResult result)
5867{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005868
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005869 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005870 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005871 }
5872
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005873 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005874 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005875 std::string reason = "vkCreateDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005876 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5877 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005878 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005879
5880 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005881}
5882
Cody Northrope4bc6942015-08-26 10:01:32 -06005883VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005884 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005885 const VkDynamicLineWidthStateCreateInfo* pCreateInfo,
5886 VkDynamicLineWidthState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005887{
Cody Northrope4bc6942015-08-26 10:01:32 -06005888 PreCreateDynamicLineWidthState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005889
Cody Northrope4bc6942015-08-26 10:01:32 -06005890 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005891
Cody Northrope4bc6942015-08-26 10:01:32 -06005892 PostCreateDynamicLineWidthState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005893
5894 return result;
5895}
5896
Cody Northrope4bc6942015-08-26 10:01:32 -06005897bool PostDestroyDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005898 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005899 VkDynamicLineWidthState dynamicLineWidthState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005900 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005901{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005902
5903
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005904 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005905 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005906 std::string reason = "vkDestroyDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005907 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5908 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005909 }
5910
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005911 return true;
5912}
5913
Cody Northrope4bc6942015-08-26 10:01:32 -06005914VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005915 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005916 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005917{
Cody Northrope4bc6942015-08-26 10:01:32 -06005918 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicLineWidthState(device, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005919
Cody Northrope4bc6942015-08-26 10:01:32 -06005920 PostDestroyDynamicLineWidthState(device, dynamicLineWidthState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005921
5922 return result;
5923}
5924
Cody Northrope4bc6942015-08-26 10:01:32 -06005925bool PreCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005926 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005927 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo)
Cody Northropf5bd2252015-08-17 11:10:49 -06005928{
5929 if(pCreateInfo != nullptr)
5930 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005931 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO)
Cody Northropf5bd2252015-08-17 11:10:49 -06005932 {
5933 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005934 "vkCreateDynamicDepthBiasState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Cody Northropf5bd2252015-08-17 11:10:49 -06005935 return false;
5936 }
5937 }
5938
5939 return true;
5940}
5941
Cody Northrope4bc6942015-08-26 10:01:32 -06005942bool PostCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005943 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005944 VkDynamicDepthBiasState* pState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005945 VkResult result)
5946{
5947
5948 if(pState != nullptr)
5949 {
5950 }
5951
5952 if(result < VK_SUCCESS)
5953 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005954 std::string reason = "vkCreateDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5956 return false;
5957 }
5958
5959 return true;
5960}
5961
Cody Northrope4bc6942015-08-26 10:01:32 -06005962VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005963 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005964 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo,
5965 VkDynamicDepthBiasState* pState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005966{
Cody Northrope4bc6942015-08-26 10:01:32 -06005967 PreCreateDynamicDepthBiasState(device, pCreateInfo);
Cody Northropf5bd2252015-08-17 11:10:49 -06005968
Cody Northrope4bc6942015-08-26 10:01:32 -06005969 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005970
Cody Northrope4bc6942015-08-26 10:01:32 -06005971 PostCreateDynamicDepthBiasState(device, pState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005972
5973 return result;
5974}
5975
Cody Northrope4bc6942015-08-26 10:01:32 -06005976bool PostDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005977 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005978 VkDynamicDepthBiasState dynamicDepthBiasState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005979 VkResult result)
5980{
5981
5982
5983 if(result < VK_SUCCESS)
5984 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005985 std::string reason = "vkDestroyDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005986 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5987 return false;
5988 }
5989
5990 return true;
5991}
5992
Cody Northrope4bc6942015-08-26 10:01:32 -06005993VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005994 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005995 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005996{
Cody Northrope4bc6942015-08-26 10:01:32 -06005997 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBiasState(device, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005998
Cody Northrope4bc6942015-08-26 10:01:32 -06005999 PostDestroyDynamicDepthBiasState(device, dynamicDepthBiasState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006000
6001 return result;
6002}
6003
Cody Northrope4bc6942015-08-26 10:01:32 -06006004bool PreCreateDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006005 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006006 const VkDynamicBlendStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006007{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006008 if(pCreateInfo != nullptr)
6009 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006010 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006011 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006012 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06006013 "vkCreateDynamicBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006014 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006015 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006016 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006017
6018 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006019}
6020
Cody Northrope4bc6942015-08-26 10:01:32 -06006021bool PostCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006022 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006023 VkDynamicBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006024 VkResult result)
6025{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006026
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006027 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006028 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006029 }
6030
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006031 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006032 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006033 std::string reason = "vkCreateDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006034 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6035 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006036 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006037
6038 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006039}
6040
Cody Northrope4bc6942015-08-26 10:01:32 -06006041VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006042 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006043 const VkDynamicBlendStateCreateInfo* pCreateInfo,
6044 VkDynamicBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006045{
Cody Northrope4bc6942015-08-26 10:01:32 -06006046 PreCreateDynamicBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006047
Cody Northrope4bc6942015-08-26 10:01:32 -06006048 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006049
Cody Northrope4bc6942015-08-26 10:01:32 -06006050 PostCreateDynamicBlendState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006051
6052 return result;
6053}
6054
Cody Northrope4bc6942015-08-26 10:01:32 -06006055bool PostDestroyDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006056 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006057 VkDynamicBlendState dynamicBlendState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006058 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006059{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006060
6061
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006062 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006063 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006064 std::string reason = "vkDestroyDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006065 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6066 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006067 }
6068
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006069 return true;
6070}
6071
Cody Northrope4bc6942015-08-26 10:01:32 -06006072VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006073 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006074 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006075{
Cody Northrope4bc6942015-08-26 10:01:32 -06006076 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicBlendState(device, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006077
Cody Northrope4bc6942015-08-26 10:01:32 -06006078 PostDestroyDynamicBlendState(device, dynamicBlendState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006079
6080 return result;
6081}
6082
Cody Northrope4bc6942015-08-26 10:01:32 -06006083bool PreCreateDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006084 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006085 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006086{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006087 if(pCreateInfo != nullptr)
6088 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006089 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006090 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006091 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06006092 "vkCreateDynamicDepthBoundsState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006093 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006094 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006095 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006096
6097 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006098}
6099
Cody Northrope4bc6942015-08-26 10:01:32 -06006100bool PostCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006101 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006102 VkDynamicDepthBoundsState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006103 VkResult result)
6104{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006105
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006106 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006107 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006108 }
6109
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006110 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006111 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006112 std::string reason = "vkCreateDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006113 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6114 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006115 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006116
6117 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006118}
6119
Cody Northrope4bc6942015-08-26 10:01:32 -06006120VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006121 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006122 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo,
6123 VkDynamicDepthBoundsState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006124{
Cody Northrope4bc6942015-08-26 10:01:32 -06006125 PreCreateDynamicDepthBoundsState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006126
Cody Northrope4bc6942015-08-26 10:01:32 -06006127 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006128
Cody Northrope4bc6942015-08-26 10:01:32 -06006129 PostCreateDynamicDepthBoundsState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006130
6131 return result;
6132}
6133
Cody Northrope4bc6942015-08-26 10:01:32 -06006134bool PostDestroyDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006135 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006136 VkDynamicDepthBoundsState dynamicDepthBoundsState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006137 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006138{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006139 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006140 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006141 std::string reason = "vkDestroyDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006142 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6143 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006144 }
6145
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006146 return true;
6147}
6148
Cody Northrope4bc6942015-08-26 10:01:32 -06006149VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006150 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006151 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006152{
Cody Northrope4bc6942015-08-26 10:01:32 -06006153 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006154
Cody Northrope4bc6942015-08-26 10:01:32 -06006155 PostDestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState, result);
Cody Northrop2605cb02015-08-18 15:21:16 -06006156
6157 return result;
6158}
6159
6160bool PreCreateDynamicStencilState(
6161 VkDevice device,
6162 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
6163 const VkDynamicStencilStateCreateInfo* pCreateInfoBack)
6164{
6165 if(pCreateInfoFront != nullptr)
6166 {
6167 if(pCreateInfoFront->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
6168 {
6169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6170 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoFront->sType, is an invalid enumerator");
6171 return false;
6172 }
6173 }
6174
6175 if(pCreateInfoBack != nullptr)
6176 {
6177 if(pCreateInfoBack->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
6178 {
6179 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6180 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoBack->sType, is an invalid enumerator");
6181 return false;
6182 }
6183 }
6184
6185 return true;
6186}
6187
6188bool PostCreateDynamicStencilState(
6189 VkDevice device,
6190 VkDynamicStencilState* pState,
6191 VkResult result)
6192{
6193
6194 if(pState != nullptr)
6195 {
6196 }
6197
6198 if(result < VK_SUCCESS)
6199 {
6200 std::string reason = "vkCreateDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6201 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6202 return false;
6203 }
6204
6205 return true;
6206}
6207
6208VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
6209 VkDevice device,
6210 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
6211 const VkDynamicStencilStateCreateInfo* pCreateInfoBack,
6212 VkDynamicStencilState* pState)
6213{
6214 PreCreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack);
6215
6216 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
6217
6218 PostCreateDynamicStencilState(device, pState, result);
6219
6220 return result;
6221}
6222
6223bool PostDestroyDynamicStencilState(
6224 VkDevice device,
6225 VkDynamicStencilState dynamicStencilState,
6226 VkResult result)
6227{
6228 if(result < VK_SUCCESS)
6229 {
6230 std::string reason = "vkDestroyDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6231 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6232 return false;
6233 }
6234
6235 return true;
6236}
6237
6238VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicStencilState(
6239 VkDevice device,
6240 VkDynamicStencilState dynamicStencilState)
6241{
6242 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicStencilState(device, dynamicStencilState);
6243
6244 PostDestroyDynamicStencilState(device, dynamicStencilState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006245
6246 return result;
6247}
6248
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006249bool PreCreateFramebuffer(
6250 VkDevice device,
6251 const VkFramebufferCreateInfo* pCreateInfo)
6252{
6253 if(pCreateInfo != nullptr)
6254 {
6255 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
6256 {
6257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6258 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6259 return false;
6260 }
6261 if(pCreateInfo->pAttachments != nullptr)
6262 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006263 }
6264 }
6265
6266 return true;
6267}
6268
6269bool PostCreateFramebuffer(
6270 VkDevice device,
6271 VkFramebuffer* pFramebuffer,
6272 VkResult result)
6273{
6274
6275 if(pFramebuffer != nullptr)
6276 {
6277 }
6278
6279 if(result < VK_SUCCESS)
6280 {
6281 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6283 return false;
6284 }
6285
6286 return true;
6287}
6288
6289VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
6290 VkDevice device,
6291 const VkFramebufferCreateInfo* pCreateInfo,
6292 VkFramebuffer* pFramebuffer)
6293{
6294 PreCreateFramebuffer(device, pCreateInfo);
6295
6296 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
6297
6298 PostCreateFramebuffer(device, pFramebuffer, result);
6299
6300 return result;
6301}
6302
6303bool PostDestroyFramebuffer(
6304 VkDevice device,
6305 VkFramebuffer framebuffer,
6306 VkResult result)
6307{
6308
6309
6310 if(result < VK_SUCCESS)
6311 {
6312 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6313 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6314 return false;
6315 }
6316
6317 return true;
6318}
6319
6320VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
6321 VkDevice device,
6322 VkFramebuffer framebuffer)
6323{
6324 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
6325
6326 PostDestroyFramebuffer(device, framebuffer, result);
6327
6328 return result;
6329}
6330
6331bool PreCreateRenderPass(
6332 VkDevice device,
6333 const VkRenderPassCreateInfo* pCreateInfo)
6334{
6335 if(pCreateInfo != nullptr)
6336 {
6337 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
6338 {
6339 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6340 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6341 return false;
6342 }
6343 if(pCreateInfo->pAttachments != nullptr)
6344 {
6345 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
6346 {
6347 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6348 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
6349 return false;
6350 }
6351 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
6352 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
6353 {
6354 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6355 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
6356 return false;
6357 }
6358 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6359 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6360 {
6361 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6362 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
6363 return false;
6364 }
6365 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6366 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6367 {
6368 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6369 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
6370 return false;
6371 }
6372 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6373 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6374 {
6375 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6376 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
6377 return false;
6378 }
6379 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6380 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6381 {
6382 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6383 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
6384 return false;
6385 }
6386 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6387 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
6388 {
6389 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6390 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
6391 return false;
6392 }
6393 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6394 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
6395 {
6396 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6397 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
6398 return false;
6399 }
6400 }
6401 if(pCreateInfo->pSubpasses != nullptr)
6402 {
6403 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
6404 {
6405 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6406 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
6407 return false;
6408 }
6409 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6410 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6411 {
6412 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6413 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
6414 return false;
6415 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006416 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006417 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006418 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6419 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006420 {
6421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006422 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006423 return false;
6424 }
6425 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006426 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006427 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006428 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6429 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006430 {
6431 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006432 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006433 return false;
6434 }
6435 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006436 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006437 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006438 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6439 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006440 {
6441 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006442 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006443 return false;
6444 }
6445 }
6446 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6447 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
6448 {
6449 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6450 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
6451 return false;
6452 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006453 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006454 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006455 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6456 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006457 {
6458 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006459 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006460 return false;
6461 }
6462 }
6463 }
6464 if(pCreateInfo->pDependencies != nullptr)
6465 {
6466 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
6467 {
6468 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6469 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
6470 return false;
6471 }
6472 }
6473 }
6474
6475 return true;
6476}
6477
6478bool PostCreateRenderPass(
6479 VkDevice device,
6480 VkRenderPass* pRenderPass,
6481 VkResult result)
6482{
6483
6484 if(pRenderPass != nullptr)
6485 {
6486 }
6487
6488 if(result < VK_SUCCESS)
6489 {
6490 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6491 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6492 return false;
6493 }
6494
6495 return true;
6496}
6497
6498VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
6499 VkDevice device,
6500 const VkRenderPassCreateInfo* pCreateInfo,
6501 VkRenderPass* pRenderPass)
6502{
6503 PreCreateRenderPass(device, pCreateInfo);
6504
6505 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
6506
6507 PostCreateRenderPass(device, pRenderPass, result);
6508
6509 return result;
6510}
6511
6512bool PostDestroyRenderPass(
6513 VkDevice device,
6514 VkRenderPass renderPass,
6515 VkResult result)
6516{
6517
6518
6519 if(result < VK_SUCCESS)
6520 {
6521 std::string reason = "vkDestroyRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6522 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6523 return false;
6524 }
6525
6526 return true;
6527}
6528
6529VK_LAYER_EXPORT VkResult VKAPI vkDestroyRenderPass(
6530 VkDevice device,
6531 VkRenderPass renderPass)
6532{
6533 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass);
6534
6535 PostDestroyRenderPass(device, renderPass, result);
6536
6537 return result;
6538}
6539
6540bool PostGetRenderAreaGranularity(
6541 VkDevice device,
6542 VkRenderPass renderPass,
6543 VkExtent2D* pGranularity,
6544 VkResult result)
6545{
6546
6547
6548 if(pGranularity != nullptr)
6549 {
6550 }
6551
6552 if(result < VK_SUCCESS)
6553 {
6554 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
6555 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6556 return false;
6557 }
6558
6559 return true;
6560}
6561
6562VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
6563 VkDevice device,
6564 VkRenderPass renderPass,
6565 VkExtent2D* pGranularity)
6566{
6567 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
6568
6569 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
6570
6571 return result;
6572}
6573
6574bool PreCreateCommandPool(
6575 VkDevice device,
6576 const VkCmdPoolCreateInfo* pCreateInfo)
6577{
6578 if(pCreateInfo != nullptr)
6579 {
6580 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
6581 {
6582 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6583 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6584 return false;
6585 }
6586 }
6587
6588 return true;
6589}
6590
6591bool PostCreateCommandPool(
6592 VkDevice device,
6593 VkCmdPool* pCmdPool,
6594 VkResult result)
6595{
6596
6597 if(pCmdPool != nullptr)
6598 {
6599 }
6600
6601 if(result < VK_SUCCESS)
6602 {
6603 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6604 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6605 return false;
6606 }
6607
6608 return true;
6609}
6610
6611VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
6612 VkDevice device,
6613 const VkCmdPoolCreateInfo* pCreateInfo,
6614 VkCmdPool* pCmdPool)
6615{
6616 PreCreateCommandPool(device, pCreateInfo);
6617
6618 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
6619
6620 PostCreateCommandPool(device, pCmdPool, result);
6621
6622 return result;
6623}
6624
6625bool PostDestroyCommandPool(
6626 VkDevice device,
6627 VkCmdPool cmdPool,
6628 VkResult result)
6629{
6630
6631
6632 if(result < VK_SUCCESS)
6633 {
6634 std::string reason = "vkDestroyCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6635 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6636 return false;
6637 }
6638
6639 return true;
6640}
6641
6642VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandPool(
6643 VkDevice device,
6644 VkCmdPool cmdPool)
6645{
6646 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, cmdPool);
6647
6648 PostDestroyCommandPool(device, cmdPool, result);
6649
6650 return result;
6651}
6652
6653bool PostResetCommandPool(
6654 VkDevice device,
6655 VkCmdPool cmdPool,
6656 VkCmdPoolResetFlags flags,
6657 VkResult result)
6658{
6659
6660
6661
6662 if(result < VK_SUCCESS)
6663 {
6664 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6665 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6666 return false;
6667 }
6668
6669 return true;
6670}
6671
6672VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
6673 VkDevice device,
6674 VkCmdPool cmdPool,
6675 VkCmdPoolResetFlags flags)
6676{
6677 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
6678
6679 PostResetCommandPool(device, cmdPool, flags, result);
6680
6681 return result;
6682}
6683
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006684bool PreCreateCommandBuffer(
6685 VkDevice device,
6686 const VkCmdBufferCreateInfo* pCreateInfo)
6687{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006688 if(pCreateInfo != nullptr)
6689 {
6690 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006691 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006692 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006693 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006694 return false;
6695 }
6696 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6697 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6698 {
6699 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006700 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006701 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006702 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006703 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006704
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006705 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006706}
6707
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006708bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006709 VkDevice device,
6710 VkCmdBuffer* pCmdBuffer,
6711 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006712{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006713
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006714 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006715 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006716 }
6717
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006718 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006719 {
6720 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006721 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6722 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006723 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006724
6725 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006726}
6727
6728VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6729 VkDevice device,
6730 const VkCmdBufferCreateInfo* pCreateInfo,
6731 VkCmdBuffer* pCmdBuffer)
6732{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006733 PreCreateCommandBuffer(device, pCreateInfo);
6734
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006735 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6736
6737 PostCreateCommandBuffer(device, pCmdBuffer, result);
6738
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006739 return result;
6740}
6741
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006742bool PostDestroyCommandBuffer(
6743 VkDevice device,
6744 VkCmdBuffer commandBuffer,
6745 VkResult result)
6746{
6747
6748
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006749 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006750 {
6751 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6752 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6753 return false;
6754 }
6755
6756 return true;
6757}
6758
6759VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6760 VkDevice device,
6761 VkCmdBuffer commandBuffer)
6762{
6763 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6764
6765 PostDestroyCommandBuffer(device, commandBuffer, result);
6766
6767 return result;
6768}
6769
6770bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006771 VkCmdBuffer cmdBuffer,
6772 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006773{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006774 if(pBeginInfo != nullptr)
6775 {
6776 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006777 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006778 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006779 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006780 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006781 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006782 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006783
6784 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006785}
6786
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006787bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006788 VkCmdBuffer cmdBuffer,
6789 VkResult result)
6790{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006791
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006792 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006793 {
6794 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006795 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6796 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006797 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006798
6799 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006800}
6801
6802VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6803 VkCmdBuffer cmdBuffer,
6804 const VkCmdBufferBeginInfo* pBeginInfo)
6805{
6806 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006807
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006808 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6809
6810 PostBeginCommandBuffer(cmdBuffer, result);
6811
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006812 return result;
6813}
6814
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006815bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006816 VkCmdBuffer cmdBuffer,
6817 VkResult result)
6818{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006819
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006820 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006821 {
6822 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006823 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6824 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006825 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006826
6827 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006828}
6829
6830VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6831 VkCmdBuffer cmdBuffer)
6832{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006833 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6834
6835 PostEndCommandBuffer(cmdBuffer, result);
6836
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006837 return result;
6838}
6839
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006840bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006841 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006842 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006843 VkResult result)
6844{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006845
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006846
6847 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006848 {
6849 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006850 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6851 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006852 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006853
6854 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006855}
6856
6857VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006858 VkCmdBuffer cmdBuffer,
6859 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006860{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006861 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006862
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006863 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006864
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006865 return result;
6866}
6867
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006868bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006869 VkCmdBuffer cmdBuffer,
6870 VkPipelineBindPoint pipelineBindPoint,
6871 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006872{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006873
6874 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6875 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6876 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006877 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006878 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006879 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006880 }
6881
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006882
6883 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006884}
6885
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006886VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6887 VkCmdBuffer cmdBuffer,
6888 VkPipelineBindPoint pipelineBindPoint,
6889 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006890{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006891 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6892
6893 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6894}
6895
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006896bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006897 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006898 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006899{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006900
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006901
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006902 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006903}
6904
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006905VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006906 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006907 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006908{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006909 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006910
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006911 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006912}
6913
Cody Northrope4bc6942015-08-26 10:01:32 -06006914bool PostCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006915 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006916 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006917{
6918
6919
6920 return true;
6921}
6922
Cody Northrope4bc6942015-08-26 10:01:32 -06006923VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006924 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006925 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006926{
Cody Northrope4bc6942015-08-26 10:01:32 -06006927 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006928
Cody Northrope4bc6942015-08-26 10:01:32 -06006929 PostCmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006930}
6931
Cody Northrope4bc6942015-08-26 10:01:32 -06006932bool PostCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006933 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006934 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006935{
6936
6937
6938 return true;
6939}
6940
Cody Northrope4bc6942015-08-26 10:01:32 -06006941VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006942 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006943 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006944{
Cody Northrope4bc6942015-08-26 10:01:32 -06006945 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006946
Cody Northrope4bc6942015-08-26 10:01:32 -06006947 PostCmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006948}
6949
Cody Northrope4bc6942015-08-26 10:01:32 -06006950bool PostCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006951 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006952 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006953{
6954
6955
6956 return true;
6957}
6958
Cody Northrope4bc6942015-08-26 10:01:32 -06006959VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006960 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006961 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006962{
Cody Northrope4bc6942015-08-26 10:01:32 -06006963 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006964
Cody Northrope4bc6942015-08-26 10:01:32 -06006965 PostCmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006966}
6967
Cody Northrope4bc6942015-08-26 10:01:32 -06006968bool PostCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006969 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006970 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006971{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006972 return true;
6973}
6974
Cody Northrope4bc6942015-08-26 10:01:32 -06006975VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006976 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006977 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006978{
Cody Northrope4bc6942015-08-26 10:01:32 -06006979 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006980
Cody Northrope4bc6942015-08-26 10:01:32 -06006981 PostCmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Cody Northrop2605cb02015-08-18 15:21:16 -06006982}
6983
6984bool PostCmdBindDynamicStencilState(
6985 VkCmdBuffer cmdBuffer,
6986 VkDynamicStencilState dynamicStencilState)
6987{
6988 return true;
6989}
6990
6991VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(
6992 VkCmdBuffer cmdBuffer,
6993 VkDynamicStencilState dynamicStencilState)
6994{
6995 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
6996
6997 PostCmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006998}
6999
7000bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007001 VkCmdBuffer cmdBuffer,
7002 const VkDescriptorSet* pDescriptorSets,
7003 const uint32_t* pDynamicOffsets)
7004{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007005 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007006 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007007 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007008
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007009 if(pDynamicOffsets != nullptr)
7010 {
7011 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007012
7013 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007014}
7015
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007016bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007017 VkCmdBuffer cmdBuffer,
7018 VkPipelineBindPoint pipelineBindPoint,
7019 VkPipelineLayout layout,
7020 uint32_t firstSet,
7021 uint32_t setCount,
7022 uint32_t dynamicOffsetCount)
7023{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007024
7025 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
7026 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
7027 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007028 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007029 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007030 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007031 }
7032
7033
7034
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007035
7036
7037 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007038}
7039
7040VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
7041 VkCmdBuffer cmdBuffer,
7042 VkPipelineBindPoint pipelineBindPoint,
7043 VkPipelineLayout layout,
7044 uint32_t firstSet,
7045 uint32_t setCount,
7046 const VkDescriptorSet* pDescriptorSets,
7047 uint32_t dynamicOffsetCount,
7048 const uint32_t* pDynamicOffsets)
7049{
7050 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007051
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007052 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
7053
7054 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
7055}
7056
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007057bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007058 VkCmdBuffer cmdBuffer,
7059 VkBuffer buffer,
7060 VkDeviceSize offset,
7061 VkIndexType indexType)
7062{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007063
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007064
7065
7066 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
7067 indexType > VK_INDEX_TYPE_END_RANGE)
7068 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007069 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007070 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007071 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007072 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007073
7074 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007075}
7076
7077VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
7078 VkCmdBuffer cmdBuffer,
7079 VkBuffer buffer,
7080 VkDeviceSize offset,
7081 VkIndexType indexType)
7082{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007083 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7084
7085 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7086}
7087
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007088bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007089 VkCmdBuffer cmdBuffer,
7090 const VkBuffer* pBuffers,
7091 const VkDeviceSize* pOffsets)
7092{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007093 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007094 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007095 }
7096
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007097 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007098 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007099 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007100
7101 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007102}
7103
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007104bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007105 VkCmdBuffer cmdBuffer,
7106 uint32_t startBinding,
7107 uint32_t bindingCount)
7108{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007109
7110
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007111
7112 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007113}
7114
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06007115VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007116 VkCmdBuffer cmdBuffer,
7117 uint32_t startBinding,
7118 uint32_t bindingCount,
7119 const VkBuffer* pBuffers,
7120 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007121{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007122 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007123
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007124 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
7125
7126 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007127}
7128
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007129bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007130 VkCmdBuffer cmdBuffer,
7131 uint32_t firstVertex,
7132 uint32_t vertexCount,
7133 uint32_t firstInstance,
7134 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007135{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007136
7137
7138
7139
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007140
7141 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007142}
7143
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007144VK_LAYER_EXPORT void VKAPI vkCmdDraw(
7145 VkCmdBuffer cmdBuffer,
7146 uint32_t firstVertex,
7147 uint32_t vertexCount,
7148 uint32_t firstInstance,
7149 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007150{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007151 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
7152
7153 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007154}
7155
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007156bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007157 VkCmdBuffer cmdBuffer,
7158 uint32_t firstIndex,
7159 uint32_t indexCount,
7160 int32_t vertexOffset,
7161 uint32_t firstInstance,
7162 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007163{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007164
7165
7166
7167
7168
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007169
7170 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007171}
7172
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007173VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7174 VkCmdBuffer cmdBuffer,
7175 uint32_t firstIndex,
7176 uint32_t indexCount,
7177 int32_t vertexOffset,
7178 uint32_t firstInstance,
7179 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007180{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007181 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7182
7183 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7184}
7185
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007186bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007187 VkCmdBuffer cmdBuffer,
7188 VkBuffer buffer,
7189 VkDeviceSize offset,
7190 uint32_t count,
7191 uint32_t stride)
7192{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007193
7194
7195
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007196
7197
7198 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007199}
7200
7201VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7202 VkCmdBuffer cmdBuffer,
7203 VkBuffer buffer,
7204 VkDeviceSize offset,
7205 uint32_t count,
7206 uint32_t stride)
7207{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007208 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7209
7210 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7211}
7212
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007213bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007214 VkCmdBuffer cmdBuffer,
7215 VkBuffer buffer,
7216 VkDeviceSize offset,
7217 uint32_t count,
7218 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007219{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007220
7221
7222
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007223
7224
7225 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007226}
7227
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007228VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7229 VkCmdBuffer cmdBuffer,
7230 VkBuffer buffer,
7231 VkDeviceSize offset,
7232 uint32_t count,
7233 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007234{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007235 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7236
7237 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7238}
7239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007240bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007241 VkCmdBuffer cmdBuffer,
7242 uint32_t x,
7243 uint32_t y,
7244 uint32_t z)
7245{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007246
7247
7248
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007249
7250 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007251}
7252
7253VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7254 VkCmdBuffer cmdBuffer,
7255 uint32_t x,
7256 uint32_t y,
7257 uint32_t z)
7258{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007259 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7260
7261 PostCmdDispatch(cmdBuffer, x, y, z);
7262}
7263
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007264bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007265 VkCmdBuffer cmdBuffer,
7266 VkBuffer buffer,
7267 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007268{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007269
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007270
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007271
7272 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007273}
7274
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007275VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7276 VkCmdBuffer cmdBuffer,
7277 VkBuffer buffer,
7278 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007279{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007280 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7281
7282 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007283}
7284
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007285bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007286 VkCmdBuffer cmdBuffer,
7287 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007288{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007289 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007290 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007291 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007292
7293 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007294}
7295
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007296bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007297 VkCmdBuffer cmdBuffer,
7298 VkBuffer srcBuffer,
7299 VkBuffer destBuffer,
7300 uint32_t regionCount)
7301{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007302
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007303
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007304
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007305
7306 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007307}
7308
7309VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7310 VkCmdBuffer cmdBuffer,
7311 VkBuffer srcBuffer,
7312 VkBuffer destBuffer,
7313 uint32_t regionCount,
7314 const VkBufferCopy* pRegions)
7315{
7316 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007317
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007318 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7319
7320 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7321}
7322
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007323bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007324 VkCmdBuffer cmdBuffer,
7325 const VkImageCopy* pRegions)
7326{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007327 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007328 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007329 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7330 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7331 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007332 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007333 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007334 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007335 }
7336 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7337 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7338 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007339 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007340 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007341 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007342 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007343 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007344
7345 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007346}
7347
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007348bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007349 VkCmdBuffer cmdBuffer,
7350 VkImage srcImage,
7351 VkImageLayout srcImageLayout,
7352 VkImage destImage,
7353 VkImageLayout destImageLayout,
7354 uint32_t regionCount)
7355{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007356
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007357
7358 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7359 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7360 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007361 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007362 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007363 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007364 }
7365
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007366
7367 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7368 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7369 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007370 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007371 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007372 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007373 }
7374
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007375
7376 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007377}
7378
7379VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7380 VkCmdBuffer cmdBuffer,
7381 VkImage srcImage,
7382 VkImageLayout srcImageLayout,
7383 VkImage destImage,
7384 VkImageLayout destImageLayout,
7385 uint32_t regionCount,
7386 const VkImageCopy* pRegions)
7387{
7388 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007389
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007390 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7391
7392 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7393}
7394
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007395bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007396 VkCmdBuffer cmdBuffer,
7397 const VkImageBlit* pRegions)
7398{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007399 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007400 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007401 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7402 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_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 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007406 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007407 }
7408 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7409 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7410 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007411 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007412 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007413 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007414 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007415 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007416
7417 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007418}
7419
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007420bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007421 VkCmdBuffer cmdBuffer,
7422 VkImage srcImage,
7423 VkImageLayout srcImageLayout,
7424 VkImage destImage,
7425 VkImageLayout destImageLayout,
7426 uint32_t regionCount,
7427 VkTexFilter filter)
7428{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007429
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007430
7431 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7432 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7433 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007434 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007435 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007436 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007437 }
7438
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007439
7440 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7441 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7442 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007443 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007444 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007445 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007446 }
7447
7448
7449 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7450 filter > VK_TEX_FILTER_END_RANGE)
7451 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007452 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007453 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007454 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007455 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007456
7457 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007458}
7459
7460VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7461 VkCmdBuffer cmdBuffer,
7462 VkImage srcImage,
7463 VkImageLayout srcImageLayout,
7464 VkImage destImage,
7465 VkImageLayout destImageLayout,
7466 uint32_t regionCount,
7467 const VkImageBlit* pRegions,
7468 VkTexFilter filter)
7469{
7470 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007471
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007472 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7473
7474 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7475}
7476
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007477bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007478 VkCmdBuffer cmdBuffer,
7479 const VkBufferImageCopy* pRegions)
7480{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007481 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007482 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007483 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7484 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7485 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007486 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007487 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007488 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007489 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007490 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007491
7492 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007493}
7494
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007495bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007496 VkCmdBuffer cmdBuffer,
7497 VkBuffer srcBuffer,
7498 VkImage destImage,
7499 VkImageLayout destImageLayout,
7500 uint32_t regionCount)
7501{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007502
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007503
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007504
7505 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7506 destImageLayout > VK_IMAGE_LAYOUT_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 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007510 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007511 }
7512
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007513
7514 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007515}
7516
7517VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7518 VkCmdBuffer cmdBuffer,
7519 VkBuffer srcBuffer,
7520 VkImage destImage,
7521 VkImageLayout destImageLayout,
7522 uint32_t regionCount,
7523 const VkBufferImageCopy* pRegions)
7524{
7525 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007526
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007527 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7528
7529 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7530}
7531
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007532bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007533 VkCmdBuffer cmdBuffer,
7534 const VkBufferImageCopy* pRegions)
7535{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007536 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007537 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007538 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7539 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7540 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007541 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007542 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007543 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007544 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007545 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007546
7547 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007548}
7549
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007550bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007551 VkCmdBuffer cmdBuffer,
7552 VkImage srcImage,
7553 VkImageLayout srcImageLayout,
7554 VkBuffer destBuffer,
7555 uint32_t regionCount)
7556{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007557
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007558
7559 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7560 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7561 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007562 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007563 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007564 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007565 }
7566
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007567
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007568
7569 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007570}
7571
7572VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7573 VkCmdBuffer cmdBuffer,
7574 VkImage srcImage,
7575 VkImageLayout srcImageLayout,
7576 VkBuffer destBuffer,
7577 uint32_t regionCount,
7578 const VkBufferImageCopy* pRegions)
7579{
7580 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007581
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007582 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7583
7584 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7585}
7586
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007587bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007588 VkCmdBuffer cmdBuffer,
7589 const uint32_t* pData)
7590{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007591 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007592 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007593 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007594
7595 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007596}
7597
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007598bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007599 VkCmdBuffer cmdBuffer,
7600 VkBuffer destBuffer,
7601 VkDeviceSize destOffset,
7602 VkDeviceSize dataSize)
7603{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007604
7605
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007606
7607
7608 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007609}
7610
7611VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7612 VkCmdBuffer cmdBuffer,
7613 VkBuffer destBuffer,
7614 VkDeviceSize destOffset,
7615 VkDeviceSize dataSize,
7616 const uint32_t* pData)
7617{
7618 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007619
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007620 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7621
7622 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7623}
7624
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007625bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007626 VkCmdBuffer cmdBuffer,
7627 VkBuffer destBuffer,
7628 VkDeviceSize destOffset,
7629 VkDeviceSize fillSize,
7630 uint32_t data)
7631{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007632
7633
7634
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007635
7636
7637 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007638}
7639
7640VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7641 VkCmdBuffer cmdBuffer,
7642 VkBuffer destBuffer,
7643 VkDeviceSize destOffset,
7644 VkDeviceSize fillSize,
7645 uint32_t data)
7646{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007647 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7648
7649 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7650}
7651
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007652bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007653 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007654 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007655 const VkImageSubresourceRange* pRanges)
7656{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007657 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007658 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007659 }
7660
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007661 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007662 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007663 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7664 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7665 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007666 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007667 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007668 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007669 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007670 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007671
7672 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007673}
7674
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007675bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007676 VkCmdBuffer cmdBuffer,
7677 VkImage image,
7678 VkImageLayout imageLayout,
7679 uint32_t rangeCount)
7680{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007681
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007682
7683 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7684 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7685 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007686 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007687 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007688 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007689 }
7690
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007691
7692 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007693}
7694
7695VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7696 VkCmdBuffer cmdBuffer,
7697 VkImage image,
7698 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007699 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007700 uint32_t rangeCount,
7701 const VkImageSubresourceRange* pRanges)
7702{
7703 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007704
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007705 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7706
7707 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7708}
7709
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007710bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007711 VkCmdBuffer cmdBuffer,
7712 const VkImageSubresourceRange* pRanges)
7713{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007714 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007715 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007716 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7717 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7718 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007719 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007720 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007721 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007722 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007723 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007724
7725 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007726}
7727
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007728bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007729 VkCmdBuffer cmdBuffer,
7730 VkImage image,
7731 VkImageLayout imageLayout,
7732 float depth,
7733 uint32_t stencil,
7734 uint32_t rangeCount)
7735{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007736
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007737
7738 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7739 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7740 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007741 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007742 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007743 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007744 }
7745
7746
7747
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007748
7749 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007750}
7751
Chris Forbes2951d7d2015-06-22 17:21:59 +12007752VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007753 VkCmdBuffer cmdBuffer,
7754 VkImage image,
7755 VkImageLayout imageLayout,
7756 float depth,
7757 uint32_t stencil,
7758 uint32_t rangeCount,
7759 const VkImageSubresourceRange* pRanges)
7760{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007761 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007762
Chris Forbes2951d7d2015-06-22 17:21:59 +12007763 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007764
Chris Forbes2951d7d2015-06-22 17:21:59 +12007765 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007766}
7767
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007768bool PreCmdClearColorAttachment(
7769 VkCmdBuffer cmdBuffer,
7770 const VkClearColorValue* pColor,
7771 const VkRect3D* pRects)
7772{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007773 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007774 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007775 }
7776
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007777 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007778 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007779 }
7780
7781 return true;
7782}
7783
7784bool PostCmdClearColorAttachment(
7785 VkCmdBuffer cmdBuffer,
7786 uint32_t colorAttachment,
7787 VkImageLayout imageLayout,
7788 uint32_t rectCount)
7789{
7790
7791
7792 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7793 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7794 {
7795 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007796 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007797 return false;
7798 }
7799
7800
7801 return true;
7802}
7803
7804VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7805 VkCmdBuffer cmdBuffer,
7806 uint32_t colorAttachment,
7807 VkImageLayout imageLayout,
7808 const VkClearColorValue* pColor,
7809 uint32_t rectCount,
7810 const VkRect3D* pRects)
7811{
7812 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7813
7814 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7815
7816 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7817}
7818
7819bool PreCmdClearDepthStencilAttachment(
7820 VkCmdBuffer cmdBuffer,
7821 const VkRect3D* pRects)
7822{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007823 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007824 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007825 }
7826
7827 return true;
7828}
7829
7830bool PostCmdClearDepthStencilAttachment(
7831 VkCmdBuffer cmdBuffer,
7832 VkImageAspectFlags imageAspectMask,
7833 VkImageLayout imageLayout,
7834 float depth,
7835 uint32_t stencil,
7836 uint32_t rectCount)
7837{
7838
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007839
7840 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7841 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7842 {
7843 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007844 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007845 return false;
7846 }
7847
7848
7849
7850
7851 return true;
7852}
7853
7854VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7855 VkCmdBuffer cmdBuffer,
7856 VkImageAspectFlags imageAspectMask,
7857 VkImageLayout imageLayout,
7858 float depth,
7859 uint32_t stencil,
7860 uint32_t rectCount,
7861 const VkRect3D* pRects)
7862{
7863 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7864
7865 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7866
7867 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7868}
7869
7870bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007871 VkCmdBuffer cmdBuffer,
7872 const VkImageResolve* pRegions)
7873{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007874 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007875 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007876 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7877 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7878 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007879 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007880 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007881 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007882 }
7883 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7884 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7885 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007886 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007887 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007888 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007889 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007890 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007891
7892 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007893}
7894
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007895bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007896 VkCmdBuffer cmdBuffer,
7897 VkImage srcImage,
7898 VkImageLayout srcImageLayout,
7899 VkImage destImage,
7900 VkImageLayout destImageLayout,
7901 uint32_t regionCount)
7902{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007903
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007904
7905 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7906 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7907 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007908 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007909 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007910 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007911 }
7912
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007913
7914 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7915 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7916 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007917 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007918 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007919 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007920 }
7921
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007922
7923 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007924}
7925
7926VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7927 VkCmdBuffer cmdBuffer,
7928 VkImage srcImage,
7929 VkImageLayout srcImageLayout,
7930 VkImage destImage,
7931 VkImageLayout destImageLayout,
7932 uint32_t regionCount,
7933 const VkImageResolve* pRegions)
7934{
7935 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007936
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007937 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7938
7939 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7940}
7941
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007942bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007943 VkCmdBuffer cmdBuffer,
7944 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007945 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007946{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007947
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007948
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007949
7950 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007951}
7952
7953VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7954 VkCmdBuffer cmdBuffer,
7955 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007956 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007957{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007958 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007959
Tony Barbourc2e987e2015-06-29 16:20:35 -06007960 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007961}
7962
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007963bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007964 VkCmdBuffer cmdBuffer,
7965 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007966 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007967{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007968
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007969
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007970
7971 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007972}
7973
7974VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7975 VkCmdBuffer cmdBuffer,
7976 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007977 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007978{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007979 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007980
Tony Barbourc2e987e2015-06-29 16:20:35 -06007981 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007982}
7983
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007984bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007985 VkCmdBuffer cmdBuffer,
7986 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007987 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007988{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007989 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007990 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007991 }
7992
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007993 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007994 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007995 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007996
7997 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007998}
7999
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008000bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008001 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008002 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008003 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008004 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008005 uint32_t memBarrierCount)
8006{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008007
Tony Barbourc2e987e2015-06-29 16:20:35 -06008008
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008009
8010
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008011
8012 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008013}
8014
8015VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
8016 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008017 uint32_t eventCount,
8018 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008019 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008020 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008021 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06008022 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008023{
8024 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008025
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008026 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008027
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008028 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008029}
8030
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008031bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008032 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008033 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008034{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008035 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008036 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008037 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008038
8039 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008040}
8041
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008042bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008043 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008044 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008045 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06008046 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008047 uint32_t memBarrierCount)
8048{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008049
Tony Barbourc2e987e2015-06-29 16:20:35 -06008050
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008051
8052
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008053
8054 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008055}
8056
8057VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
8058 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008059 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008060 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06008061 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008062 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008063 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008064{
Tony Barbourc2e987e2015-06-29 16:20:35 -06008065 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008066
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008067 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008068
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008069 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008070}
8071
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008072bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008073 VkCmdBuffer cmdBuffer,
8074 VkQueryPool queryPool,
8075 uint32_t slot,
8076 VkQueryControlFlags flags)
8077{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008078
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008079
8080
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008081
8082 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008083}
8084
8085VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
8086 VkCmdBuffer cmdBuffer,
8087 VkQueryPool queryPool,
8088 uint32_t slot,
8089 VkQueryControlFlags flags)
8090{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008091 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8092
8093 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8094}
8095
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008096bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008097 VkCmdBuffer cmdBuffer,
8098 VkQueryPool queryPool,
8099 uint32_t slot)
8100{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008101
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008102
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008103
8104 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008105}
8106
8107VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
8108 VkCmdBuffer cmdBuffer,
8109 VkQueryPool queryPool,
8110 uint32_t slot)
8111{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008112 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
8113
8114 PostCmdEndQuery(cmdBuffer, queryPool, slot);
8115}
8116
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008117bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008118 VkCmdBuffer cmdBuffer,
8119 VkQueryPool queryPool,
8120 uint32_t startQuery,
8121 uint32_t queryCount)
8122{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008123
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008124
8125
8126
8127 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008128}
8129
8130VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8131 VkCmdBuffer cmdBuffer,
8132 VkQueryPool queryPool,
8133 uint32_t startQuery,
8134 uint32_t queryCount)
8135{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008136 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8137
8138 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8139}
8140
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008141bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008142 VkCmdBuffer cmdBuffer,
8143 VkTimestampType timestampType,
8144 VkBuffer destBuffer,
8145 VkDeviceSize destOffset)
8146{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008147
8148 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8149 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8150 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008151 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008152 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008153 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008154 }
8155
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008156
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008157
8158 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008159}
8160
8161VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8162 VkCmdBuffer cmdBuffer,
8163 VkTimestampType timestampType,
8164 VkBuffer destBuffer,
8165 VkDeviceSize destOffset)
8166{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008167 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8168
8169 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8170}
8171
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008172bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008173 VkCmdBuffer cmdBuffer,
8174 VkQueryPool queryPool,
8175 uint32_t startQuery,
8176 uint32_t queryCount,
8177 VkBuffer destBuffer,
8178 VkDeviceSize destOffset,
8179 VkDeviceSize destStride,
8180 VkQueryResultFlags flags)
8181{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008182
8183
8184
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008185
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008186
8187
8188
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008189
8190 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008191}
8192
Jeremy Hayescf469132015-04-17 10:36:53 -06008193VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008194 VkCmdBuffer cmdBuffer,
8195 VkQueryPool queryPool,
8196 uint32_t startQuery,
8197 uint32_t queryCount,
8198 VkBuffer destBuffer,
8199 VkDeviceSize destOffset,
8200 VkDeviceSize destStride,
8201 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06008202{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008203 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8204
8205 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06008206}
8207
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008208bool PreCmdPushConstants(
8209 VkCmdBuffer cmdBuffer,
8210 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008211{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008212 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008213 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008214 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008215
8216 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008217}
8218
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008219bool PostCmdPushConstants(
8220 VkCmdBuffer cmdBuffer,
8221 VkPipelineLayout layout,
8222 VkShaderStageFlags stageFlags,
8223 uint32_t start,
8224 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008225{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008226
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008227
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008228
8229
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008230
8231 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008232}
8233
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008234VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
8235 VkCmdBuffer cmdBuffer,
8236 VkPipelineLayout layout,
8237 VkShaderStageFlags stageFlags,
8238 uint32_t start,
8239 uint32_t length,
8240 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008241{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008242 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008243
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008244 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008245
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008246 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008247}
8248
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008249bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008250 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008251 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008252{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008253 if(pRenderPassBegin != nullptr)
8254 {
8255 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008256 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008257 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008258 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008259 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008260 }
Cody Northropc332eef2015-08-04 11:51:03 -06008261 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008262 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008263 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06008264 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008265
8266 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008267}
8268
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008269bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008270 VkCmdBuffer cmdBuffer,
8271 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008272{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008273
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008274 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8275 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
8276 {
8277 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8278 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8279 return false;
8280 }
8281
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008282 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008283}
8284
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008285VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8286 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008287 const VkRenderPassBeginInfo* pRenderPassBegin,
8288 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008289{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008290 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8291
Chia-I Wuc278df82015-07-07 11:50:03 +08008292 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008293
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008294 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008295}
8296
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008297bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08008298 VkCmdBuffer cmdBuffer,
8299 VkRenderPassContents contents)
8300{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008301
8302 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008303 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008304 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008305 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008306 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8307 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008308 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008309
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008310 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08008311}
8312
8313VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8314 VkCmdBuffer cmdBuffer,
8315 VkRenderPassContents contents)
8316{
Chia-I Wuc278df82015-07-07 11:50:03 +08008317 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8318
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008319 PostCmdNextSubpass(cmdBuffer, contents);
8320}
8321
8322bool PostCmdEndRenderPass(
8323 VkCmdBuffer cmdBuffer)
8324{
8325
8326 return true;
8327}
8328
8329VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
8330 VkCmdBuffer cmdBuffer)
8331{
8332 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8333
8334 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08008335}
8336
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008337bool PreCmdExecuteCommands(
8338 VkCmdBuffer cmdBuffer,
8339 const VkCmdBuffer* pCmdBuffers)
8340{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008341 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008342 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008343 }
8344
8345 return true;
8346}
8347
8348bool PostCmdExecuteCommands(
8349 VkCmdBuffer cmdBuffer,
8350 uint32_t cmdBuffersCount)
8351{
8352
8353
8354 return true;
8355}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008356
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008357VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008358 VkCmdBuffer cmdBuffer,
8359 uint32_t cmdBuffersCount,
8360 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008361{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008362 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8363
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008364 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8365
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008366 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008367}
8368
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008369VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008370{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008371 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008372 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008373 }
8374
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008375 /* loader uses this to force layer initialization; device object is wrapped */
8376 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008377 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008378 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008379 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008380
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008381 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008382 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008383 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008384 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008385 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008386 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008387 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008388 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008389 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008390 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008391 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008392 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008393 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008394 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008395 if (!strcmp(funcName, "vkFreeMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008396 return (PFN_vkVoidFunction) vkFreeMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008397 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008398 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008399 if (!strcmp(funcName, "vkUnmapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008400 return (PFN_vkVoidFunction) vkUnmapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008401 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008402 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008403 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008404 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008405 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008406 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008407 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008408 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008409 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008410 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008411 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008412 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008413 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008414 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008415 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008416 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008417 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008418 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008419 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008420 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008421 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008422 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008423 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008424 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008425 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008426 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008427 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008428 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008429 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008430 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008431 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008432 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008433 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008434 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008435 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008436 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008437 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008438 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008439 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008440 return (PFN_vkVoidFunction) vkCreateImageView;
Chia-I Wuc278df82015-07-07 11:50:03 +08008441 if (!strcmp(funcName, "vkCreateAttachmentView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008442 return (PFN_vkVoidFunction) vkCreateAttachmentView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008443 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008444 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008445 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008446 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008447 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008448 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008449 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008450 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008451 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008452 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008453 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008454 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008455 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008456 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008457 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008458 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008459 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008460 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008461 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008462 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Cody Northrope4bc6942015-08-26 10:01:32 -06008463 if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
8464 return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
8465 if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
8466 return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
8467 if (!strcmp(funcName, "vkCreateDynamicBlendState"))
8468 return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
8469 if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
8470 return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
Cody Northrop2605cb02015-08-18 15:21:16 -06008471 if (!strcmp(funcName, "vkCreateDynamicStencilState"))
8472 return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008473 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008474 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008475 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008476 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008477 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008478 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008479 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008480 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008481 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008482 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008483 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008484 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008485 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008486 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008487 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008488 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008489 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008490 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008491 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008492 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008493 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008494 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008495 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008496 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008497 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008498 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008499 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008500 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008501 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008502 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008503 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008504 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008505 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008506 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008507 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008508 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008509 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008510 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008511 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008512 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008513 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008514 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008515 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008516 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008517 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008518 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008519 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008520 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008521 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008522 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008523 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008524 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008525 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008526 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008527 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008528 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008529 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008530 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008531 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008532 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008533 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008534 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008535 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008536 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008537 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008538 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008539 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008540 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008541 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008542 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008543 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008544 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008545
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008546 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008547 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008548 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008549 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008550 }
8551}
8552
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008553VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008554{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008555 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008556 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008557 }
8558
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008559 /* loader uses this to force layer initialization; instance object is wrapped */
8560 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008561 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008562 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008563 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008564
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008565 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008566 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008567 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008568 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008569 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008570 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008571 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008572 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008573 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008574 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06008575 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008576 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008577 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008578 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008579 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008580 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008581 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008582 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008583 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008584 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008585 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008586 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008587
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008588 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008589 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008590 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008591 return fptr;
8592
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008593 {
8594 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8595 return NULL;
8596 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8597 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008598}