blob: fef0f84fee63e7511615eb8c54bec4452291da39 [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 |
509 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT |
510 VK_IMAGE_USAGE_GENERAL);
511 if(enumerator & (~allFlags))
512 {
513 return false;
514 }
515
516 return true;
517}
518
519static
520std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
521{
522 if(!ValidateEnumerator(enumerator))
523 {
524 return "unrecognized enumerator";
525 }
526
527 std::vector<std::string> strings;
528 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
529 {
530 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
531 }
532 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
533 {
534 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
535 }
536 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
537 {
538 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
539 }
540 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
541 {
542 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
543 }
544 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
545 {
546 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
547 }
548 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
549 {
550 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
551 }
552 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
553 {
554 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
555 }
556 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
557 {
558 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
559 }
560 if(enumerator & VK_IMAGE_USAGE_GENERAL)
561 {
562 strings.push_back("VK_IMAGE_USAGE_GENERAL");
563 }
564
565 std::string enumeratorString;
566 for(auto const& string : strings)
567 {
568 enumeratorString += string;
569
570 if(string != strings.back())
571 {
572 enumeratorString += '|';
573 }
574 }
575
576 return enumeratorString;
577}
578
579static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600580bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
581{
582 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
583 VK_QUEUE_DMA_BIT |
584 VK_QUEUE_COMPUTE_BIT |
585 VK_QUEUE_SPARSE_MEMMGR_BIT |
586 VK_QUEUE_GRAPHICS_BIT);
587 if(enumerator & (~allFlags))
588 {
589 return false;
590 }
591
592 return true;
593}
594
595static
596std::string EnumeratorString(VkQueueFlagBits const& enumerator)
597{
598 if(!ValidateEnumerator(enumerator))
599 {
600 return "unrecognized enumerator";
601 }
602
603 std::vector<std::string> strings;
604 if(enumerator & VK_QUEUE_EXTENDED_BIT)
605 {
606 strings.push_back("VK_QUEUE_EXTENDED_BIT");
607 }
608 if(enumerator & VK_QUEUE_DMA_BIT)
609 {
610 strings.push_back("VK_QUEUE_DMA_BIT");
611 }
612 if(enumerator & VK_QUEUE_COMPUTE_BIT)
613 {
614 strings.push_back("VK_QUEUE_COMPUTE_BIT");
615 }
616 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
617 {
618 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
619 }
620 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
621 {
622 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
623 }
624
625 std::string enumeratorString;
626 for(auto const& string : strings)
627 {
628 enumeratorString += string;
629
630 if(string != strings.back())
631 {
632 enumeratorString += '|';
633 }
634 }
635
636 return enumeratorString;
637}
638
639static
640bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
641{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600642 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
643 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600644 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
645 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
646 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
647 VK_MEMORY_PROPERTY_DEVICE_ONLY);
648 if(enumerator & (~allFlags))
649 {
650 return false;
651 }
652
653 return true;
654}
655
656static
657std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
658{
659 if(!ValidateEnumerator(enumerator))
660 {
661 return "unrecognized enumerator";
662 }
663
664 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600665 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
666 {
667 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
668 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600669 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
670 {
671 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
672 }
673 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
674 {
675 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
676 }
677 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
678 {
679 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
680 }
681 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
682 {
683 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
684 }
685 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
686 {
687 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
688 }
689
690 std::string enumeratorString;
691 for(auto const& string : strings)
692 {
693 enumeratorString += string;
694
695 if(string != strings.back())
696 {
697 enumeratorString += '|';
698 }
699 }
700
701 return enumeratorString;
702}
703
704static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600705bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600706{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600707 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600708 if(enumerator & (~allFlags))
709 {
710 return false;
711 }
712
713 return true;
714}
715
716static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600717std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600718{
719 if(!ValidateEnumerator(enumerator))
720 {
721 return "unrecognized enumerator";
722 }
723
724 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600725 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600726 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600727 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600728 }
729
730 std::string enumeratorString;
731 for(auto const& string : strings)
732 {
733 enumeratorString += string;
734
735 if(string != strings.back())
736 {
737 enumeratorString += '|';
738 }
739 }
740
741 return enumeratorString;
742}
743
744static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600745bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
746{
747 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
748 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
749 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
750 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600751 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600752 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600753 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600754
755 return true;
756}
757
758static
759std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
760{
761 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600762 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600763 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600764 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600765
766 std::vector<std::string> strings;
767 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600768 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600769 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600770 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600771 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600772 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600773 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600774 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600775 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600776 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600777 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600778 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600779
780 std::string enumeratorString;
781 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600782 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600783 enumeratorString += string;
784
785 if(string != strings.back())
786 {
787 enumeratorString += '|';
788 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600789 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600790
791 return enumeratorString;
792}
793
794static
795bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
796{
797 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
798 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600799 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600800 return false;
801 }
802
803 return true;
804}
805
806static
807std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
808{
809 if(!ValidateEnumerator(enumerator))
810 {
811 return "unrecognized enumerator";
812 }
813
814 std::vector<std::string> strings;
815 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
816 {
817 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
818 }
819
820 std::string enumeratorString;
821 for(auto const& string : strings)
822 {
823 enumeratorString += string;
824
825 if(string != strings.back())
826 {
827 enumeratorString += '|';
828 }
829 }
830
831 return enumeratorString;
832}
833
834static
835bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
836{
837 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
838 if(enumerator & (~allFlags))
839 {
840 return false;
841 }
842
843 return true;
844}
845
846static
847std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
848{
849 if(!ValidateEnumerator(enumerator))
850 {
851 return "unrecognized enumerator";
852 }
853
854 std::vector<std::string> strings;
855 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
856 {
857 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
858 }
859
860 std::string enumeratorString;
861 for(auto const& string : strings)
862 {
863 enumeratorString += string;
864
865 if(string != strings.back())
866 {
867 enumeratorString += '|';
868 }
869 }
870
871 return enumeratorString;
872}
873
874static
875bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
876{
877 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
878 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
879 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
880 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
881 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
882 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
883 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
884 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
885 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
886 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
887 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
888 if(enumerator & (~allFlags))
889 {
890 return false;
891 }
892
893 return true;
894}
895
896static
897std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
898{
899 if(!ValidateEnumerator(enumerator))
900 {
901 return "unrecognized enumerator";
902 }
903
904 std::vector<std::string> strings;
905 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
906 {
907 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
908 }
909 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
910 {
911 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
912 }
913 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
914 {
915 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
916 }
917 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
918 {
919 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
920 }
921 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
922 {
923 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
924 }
925 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
926 {
927 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
928 }
929 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
930 {
931 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
932 }
933 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
934 {
935 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
936 }
937 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
938 {
939 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
940 }
941 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
942 {
943 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
944 }
945 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
946 {
947 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
948 }
949
950 std::string enumeratorString;
951 for(auto const& string : strings)
952 {
953 enumeratorString += string;
954
955 if(string != strings.back())
956 {
957 enumeratorString += '|';
958 }
959 }
960
961 return enumeratorString;
962}
963
964static
965bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
966{
967 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
968 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
969 VK_QUERY_RESULT_WAIT_BIT |
970 VK_QUERY_RESULT_64_BIT |
971 VK_QUERY_RESULT_DEFAULT);
972 if(enumerator & (~allFlags))
973 {
974 return false;
975 }
976
977 return true;
978}
979
980static
981std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
982{
983 if(!ValidateEnumerator(enumerator))
984 {
985 return "unrecognized enumerator";
986 }
987
988 std::vector<std::string> strings;
989 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
990 {
991 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
992 }
993 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
994 {
995 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
996 }
997 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
998 {
999 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
1000 }
1001 if(enumerator & VK_QUERY_RESULT_64_BIT)
1002 {
1003 strings.push_back("VK_QUERY_RESULT_64_BIT");
1004 }
1005 if(enumerator & VK_QUERY_RESULT_DEFAULT)
1006 {
1007 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001008 }
1009
1010 std::string enumeratorString;
1011 for(auto const& string : strings)
1012 {
1013 enumeratorString += string;
1014
1015 if(string != strings.back())
1016 {
1017 enumeratorString += '|';
1018 }
1019 }
1020
1021 return enumeratorString;
1022}
1023
1024static
1025bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
1026{
1027 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
1028 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
1029 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
1030 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
1031 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
1032 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
1033 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
1034 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
1035 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
1036 VK_BUFFER_USAGE_GENERAL);
1037 if(enumerator & (~allFlags))
1038 {
1039 return false;
1040 }
1041
1042 return true;
1043}
1044
1045static
1046std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
1047{
1048 if(!ValidateEnumerator(enumerator))
1049 {
1050 return "unrecognized enumerator";
1051 }
1052
1053 std::vector<std::string> strings;
1054 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
1055 {
1056 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
1057 }
1058 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
1059 {
1060 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
1061 }
1062 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
1063 {
1064 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
1065 }
1066 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
1067 {
1068 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
1069 }
1070 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
1071 {
1072 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
1073 }
1074 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
1075 {
1076 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
1077 }
1078 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
1079 {
1080 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
1081 }
1082 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
1083 {
1084 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
1085 }
1086 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
1087 {
1088 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
1089 }
1090 if(enumerator & VK_BUFFER_USAGE_GENERAL)
1091 {
1092 strings.push_back("VK_BUFFER_USAGE_GENERAL");
1093 }
1094
1095 std::string enumeratorString;
1096 for(auto const& string : strings)
1097 {
1098 enumeratorString += string;
1099
1100 if(string != strings.back())
1101 {
1102 enumeratorString += '|';
1103 }
1104 }
1105
1106 return enumeratorString;
1107}
1108
1109static
1110bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
1111{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001112 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
1113 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
1114 VK_BUFFER_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001115 if(enumerator & (~allFlags))
1116 {
1117 return false;
1118 }
1119
1120 return true;
1121}
1122
1123static
1124std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
1125{
1126 if(!ValidateEnumerator(enumerator))
1127 {
1128 return "unrecognized enumerator";
1129 }
1130
1131 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001132 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1133 {
1134 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1135 }
1136 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1137 {
1138 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1139 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001140 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
1141 {
1142 strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT");
1143 }
1144
1145 std::string enumeratorString;
1146 for(auto const& string : strings)
1147 {
1148 enumeratorString += string;
1149
1150 if(string != strings.back())
1151 {
1152 enumeratorString += '|';
1153 }
1154 }
1155
1156 return enumeratorString;
1157}
1158
1159static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001160bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1161{
1162 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001163 VK_IMAGE_CREATE_INVARIANT_DATA_BIT |
1164 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1165 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001166 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001167 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001168 if(enumerator & (~allFlags))
1169 {
1170 return false;
1171 }
1172
1173 return true;
1174}
1175
1176static
1177std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1178{
1179 if(!ValidateEnumerator(enumerator))
1180 {
1181 return "unrecognized enumerator";
1182 }
1183
1184 std::vector<std::string> strings;
1185 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1186 {
1187 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1188 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001189 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
1190 {
1191 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
1192 }
1193 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1194 {
1195 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1196 }
1197 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1198 {
1199 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1200 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001201 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1202 {
1203 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1204 }
1205 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
1206 {
1207 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
1208 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001209
1210 std::string enumeratorString;
1211 for(auto const& string : strings)
1212 {
1213 enumeratorString += string;
1214
1215 if(string != strings.back())
1216 {
1217 enumeratorString += '|';
1218 }
1219 }
1220
1221 return enumeratorString;
1222}
1223
1224static
Chia-I Wuc278df82015-07-07 11:50:03 +08001225bool ValidateEnumerator(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001226{
Chia-I Wuc278df82015-07-07 11:50:03 +08001227 VkAttachmentViewCreateFlagBits allFlags = (VkAttachmentViewCreateFlagBits)(VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT |
1228 VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001229 if(enumerator & (~allFlags))
1230 {
1231 return false;
1232 }
1233
1234 return true;
1235}
1236
1237static
Chia-I Wuc278df82015-07-07 11:50:03 +08001238std::string EnumeratorString(VkAttachmentViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001239{
1240 if(!ValidateEnumerator(enumerator))
1241 {
1242 return "unrecognized enumerator";
1243 }
1244
1245 std::vector<std::string> strings;
Chia-I Wuc278df82015-07-07 11:50:03 +08001246 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001247 {
Chia-I Wuc278df82015-07-07 11:50:03 +08001248 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001249 }
Chia-I Wuc278df82015-07-07 11:50:03 +08001250 if(enumerator & VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001251 {
Chia-I Wuc278df82015-07-07 11:50:03 +08001252 strings.push_back("VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001253 }
1254
1255 std::string enumeratorString;
1256 for(auto const& string : strings)
1257 {
1258 enumeratorString += string;
1259
1260 if(string != strings.back())
1261 {
1262 enumeratorString += '|';
1263 }
1264 }
1265
1266 return enumeratorString;
1267}
1268
1269static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001270bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1271{
1272 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1273 VK_CHANNEL_B_BIT |
1274 VK_CHANNEL_G_BIT |
1275 VK_CHANNEL_R_BIT);
1276 if(enumerator & (~allFlags))
1277 {
1278 return false;
1279 }
1280
1281 return true;
1282}
1283
1284static
1285std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1286{
1287 if(!ValidateEnumerator(enumerator))
1288 {
1289 return "unrecognized enumerator";
1290 }
1291
1292 std::vector<std::string> strings;
1293 if(enumerator & VK_CHANNEL_A_BIT)
1294 {
1295 strings.push_back("VK_CHANNEL_A_BIT");
1296 }
1297 if(enumerator & VK_CHANNEL_B_BIT)
1298 {
1299 strings.push_back("VK_CHANNEL_B_BIT");
1300 }
1301 if(enumerator & VK_CHANNEL_G_BIT)
1302 {
1303 strings.push_back("VK_CHANNEL_G_BIT");
1304 }
1305 if(enumerator & VK_CHANNEL_R_BIT)
1306 {
1307 strings.push_back("VK_CHANNEL_R_BIT");
1308 }
1309
1310 std::string enumeratorString;
1311 for(auto const& string : strings)
1312 {
1313 enumeratorString += string;
1314
1315 if(string != strings.back())
1316 {
1317 enumeratorString += '|';
1318 }
1319 }
1320
1321 return enumeratorString;
1322}
1323
1324static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001325bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001326{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001327 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1328 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1329 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001330 if(enumerator & (~allFlags))
1331 {
1332 return false;
1333 }
1334
1335 return true;
1336}
1337
1338static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001339std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001340{
1341 if(!ValidateEnumerator(enumerator))
1342 {
1343 return "unrecognized enumerator";
1344 }
1345
1346 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001347 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001348 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001349 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1350 }
1351 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1352 {
1353 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1354 }
1355 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1356 {
1357 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001358 }
1359
1360 std::string enumeratorString;
1361 for(auto const& string : strings)
1362 {
1363 enumeratorString += string;
1364
1365 if(string != strings.back())
1366 {
1367 enumeratorString += '|';
1368 }
1369 }
1370
1371 return enumeratorString;
1372}
1373
1374static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001375bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001376{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001377 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1378 VK_SHADER_STAGE_FRAGMENT_BIT |
1379 VK_SHADER_STAGE_GEOMETRY_BIT |
1380 VK_SHADER_STAGE_COMPUTE_BIT |
1381 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1382 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1383 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001384 if(enumerator & (~allFlags))
1385 {
1386 return false;
1387 }
1388
1389 return true;
1390}
1391
1392static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001393std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001394{
1395 if(!ValidateEnumerator(enumerator))
1396 {
1397 return "unrecognized enumerator";
1398 }
1399
1400 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001401 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001402 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001403 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001404 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001405 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001406 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001407 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001408 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001409 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001410 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001411 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1412 }
1413 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1414 {
1415 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1416 }
1417 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1418 {
1419 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1420 }
1421 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1422 {
1423 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1424 }
1425 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1426 {
1427 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001428 }
1429
1430 std::string enumeratorString;
1431 for(auto const& string : strings)
1432 {
1433 enumeratorString += string;
1434
1435 if(string != strings.back())
1436 {
1437 enumeratorString += '|';
1438 }
1439 }
1440
1441 return enumeratorString;
1442}
1443
1444static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001445bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001446{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001448 if(enumerator & (~allFlags))
1449 {
1450 return false;
1451 }
1452
1453 return true;
1454}
1455
1456static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001457std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001458{
1459 if(!ValidateEnumerator(enumerator))
1460 {
1461 return "unrecognized enumerator";
1462 }
1463
1464 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001465 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001466 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001467 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001468 }
1469
1470 std::string enumeratorString;
1471 for(auto const& string : strings)
1472 {
1473 enumeratorString += string;
1474
1475 if(string != strings.back())
1476 {
1477 enumeratorString += '|';
1478 }
1479 }
1480
1481 return enumeratorString;
1482}
1483
1484static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001485bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001486{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001487 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1488 VK_PIPELINE_STAGE_HOST_BIT |
1489 VK_PIPELINE_STAGE_TRANSFER_BIT |
1490 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1491 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1492 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1493 VK_PIPELINE_STAGE_TRANSITION_BIT |
1494 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1495 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1496 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1497 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1498 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1499 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1500 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1501 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1502 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1503 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001504 if(enumerator & (~allFlags))
1505 {
1506 return false;
1507 }
1508
1509 return true;
1510}
1511
1512static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001513std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001514{
1515 if(!ValidateEnumerator(enumerator))
1516 {
1517 return "unrecognized enumerator";
1518 }
1519
1520 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001521 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001522 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001523 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001524 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001525 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001526 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001527 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001528 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001529 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001530 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001531 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001532 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001533 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001534 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001535 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001536 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001537 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001538 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001539 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001540 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001541 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001542 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001543 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001544 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001545 if(enumerator & VK_PIPELINE_STAGE_TRANSITION_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001546 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001547 strings.push_back("VK_PIPELINE_STAGE_TRANSITION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001548 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001549 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001550 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001551 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001552 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001553 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001554 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001555 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001556 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001557 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001558 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001559 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001560 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001561 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001562 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001563 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1564 }
1565 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1566 {
1567 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1568 }
1569 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1570 {
1571 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1572 }
1573 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1574 {
1575 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1576 }
1577 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1578 {
1579 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1580 }
1581 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1582 {
1583 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1584 }
1585 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1586 {
1587 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001588 }
1589
1590 std::string enumeratorString;
1591 for(auto const& string : strings)
1592 {
1593 enumeratorString += string;
1594
1595 if(string != strings.back())
1596 {
1597 enumeratorString += '|';
1598 }
1599 }
1600
1601 return enumeratorString;
1602}
1603
1604static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001605bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001606{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001607 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1608 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1609 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1610 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1611 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001612 if(enumerator & (~allFlags))
1613 {
1614 return false;
1615 }
1616
1617 return true;
1618}
1619
1620static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001621std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001622{
1623 if(!ValidateEnumerator(enumerator))
1624 {
1625 return "unrecognized enumerator";
1626 }
1627
1628 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001629 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001630 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001631 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001632 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001633 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001634 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001635 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001636 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001637 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001638 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001639 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1640 }
1641 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1642 {
1643 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1644 }
1645 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1646 {
1647 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001648 }
1649
1650 std::string enumeratorString;
1651 for(auto const& string : strings)
1652 {
1653 enumeratorString += string;
1654
1655 if(string != strings.back())
1656 {
1657 enumeratorString += '|';
1658 }
1659 }
1660
1661 return enumeratorString;
1662}
1663
1664static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001665bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001666{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001667 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1668 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1669 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1670 VK_MEMORY_INPUT_SHADER_READ_BIT |
1671 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1672 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1673 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1674 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1675 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1676 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001677 if(enumerator & (~allFlags))
1678 {
1679 return false;
1680 }
1681
1682 return true;
1683}
1684
1685static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001686std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001687{
1688 if(!ValidateEnumerator(enumerator))
1689 {
1690 return "unrecognized enumerator";
1691 }
1692
1693 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001694 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001695 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001696 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1697 }
1698 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1699 {
1700 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1701 }
1702 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1703 {
1704 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1705 }
1706 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1707 {
1708 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1709 }
1710 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1711 {
1712 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1713 }
1714 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1715 {
1716 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1717 }
1718 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1719 {
1720 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1721 }
1722 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1723 {
1724 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1725 }
1726 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1727 {
1728 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1729 }
1730 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1731 {
1732 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001733 }
1734
1735 std::string enumeratorString;
1736 for(auto const& string : strings)
1737 {
1738 enumeratorString += string;
1739
1740 if(string != strings.back())
1741 {
1742 enumeratorString += '|';
1743 }
1744 }
1745
1746 return enumeratorString;
1747}
1748
1749static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001750bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001751{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001752 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1753 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001754 if(enumerator & (~allFlags))
1755 {
1756 return false;
1757 }
1758
1759 return true;
1760}
1761
1762static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001763std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001764{
1765 if(!ValidateEnumerator(enumerator))
1766 {
1767 return "unrecognized enumerator";
1768 }
1769
1770 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001771 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001772 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001773 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001774 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001775 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001776 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001777 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001778 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001779
1780 std::string enumeratorString;
1781 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001782 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001783 enumeratorString += string;
1784
1785 if(string != strings.back())
1786 {
1787 enumeratorString += '|';
1788 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001789 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001790
1791 return enumeratorString;
1792}
1793
1794static
1795bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1796{
1797 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES);
1798 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001799 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001800 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001801 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001802
1803 return true;
1804}
1805
1806static
1807std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1808{
1809 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001810 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001811 return "unrecognized enumerator";
1812 }
1813
1814 std::vector<std::string> strings;
1815 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES)
1816 {
1817 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001818 }
1819
1820 std::string enumeratorString;
1821 for(auto const& string : strings)
1822 {
1823 enumeratorString += string;
1824
1825 if(string != strings.back())
1826 {
1827 enumeratorString += '|';
1828 }
1829 }
1830
1831 return enumeratorString;
1832}
1833
1834static
1835bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1836{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001837 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1838 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001839 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1840 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1841 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1842 if(enumerator & (~allFlags))
1843 {
1844 return false;
1845 }
1846
1847 return true;
1848}
1849
1850static
1851std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1852{
1853 if(!ValidateEnumerator(enumerator))
1854 {
1855 return "unrecognized enumerator";
1856 }
1857
1858 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001859 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1860 {
1861 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1862 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001863 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1864 {
1865 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1866 }
1867 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1868 {
1869 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1870 }
1871 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1872 {
1873 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1874 }
1875 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1876 {
1877 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1878 }
1879
1880 std::string enumeratorString;
1881 for(auto const& string : strings)
1882 {
1883 enumeratorString += string;
1884
1885 if(string != strings.back())
1886 {
1887 enumeratorString += '|';
1888 }
1889 }
1890
1891 return enumeratorString;
1892}
1893
1894static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001895bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001896{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001897 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001898 if(enumerator & (~allFlags))
1899 {
1900 return false;
1901 }
1902
1903 return true;
1904}
1905
1906static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001907std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001908{
1909 if(!ValidateEnumerator(enumerator))
1910 {
1911 return "unrecognized enumerator";
1912 }
1913
1914 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001915 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001916 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001917 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001918 }
1919
1920 std::string enumeratorString;
1921 for(auto const& string : strings)
1922 {
1923 enumeratorString += string;
1924
1925 if(string != strings.back())
1926 {
1927 enumeratorString += '|';
1928 }
1929 }
1930
1931 return enumeratorString;
1932}
1933
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001934static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001935bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001936{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001937 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1938 VK_IMAGE_ASPECT_STENCIL_BIT |
1939 VK_IMAGE_ASPECT_DEPTH_BIT |
1940 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001941 if(enumerator & (~allFlags))
1942 {
1943 return false;
1944 }
1945
1946 return true;
1947}
1948
1949static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001950std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001951{
1952 if(!ValidateEnumerator(enumerator))
1953 {
1954 return "unrecognized enumerator";
1955 }
1956
1957 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001958 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001959 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001960 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1961 }
1962 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1963 {
1964 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1965 }
1966 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1967 {
1968 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1969 }
1970 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1971 {
1972 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1973 }
1974
1975 std::string enumeratorString;
1976 for(auto const& string : strings)
1977 {
1978 enumeratorString += string;
1979
1980 if(string != strings.back())
1981 {
1982 enumeratorString += '|';
1983 }
1984 }
1985
1986 return enumeratorString;
1987}
1988
1989static
1990bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1991{
1992 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1993 if(enumerator & (~allFlags))
1994 {
1995 return false;
1996 }
1997
1998 return true;
1999}
2000
2001static
2002std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
2003{
2004 if(!ValidateEnumerator(enumerator))
2005 {
2006 return "unrecognized enumerator";
2007 }
2008
2009 std::vector<std::string> strings;
2010 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
2011 {
2012 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002013 }
2014
2015 std::string enumeratorString;
2016 for(auto const& string : strings)
2017 {
2018 enumeratorString += string;
2019
2020 if(string != strings.back())
2021 {
2022 enumeratorString += '|';
2023 }
2024 }
2025
2026 return enumeratorString;
2027}
2028
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002029VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
2030 const VkInstanceCreateInfo* pCreateInfo,
2031 VkInstance* pInstance)
2032{
2033 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
2034 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
2035
2036 if (result == VK_SUCCESS) {
2037 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
2038 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06002039 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002040
2041 InitParamChecker(data);
2042 }
2043
2044 return result;
2045}
2046
2047VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(
2048 VkInstance instance)
2049{
2050 // Grab the key before the instance is destroyed.
2051 dispatch_key key = get_dispatch_key(instance);
2052 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
2053 VkResult result = pTable->DestroyInstance(instance);
2054
2055 // Clean up logging callback, if any
2056 layer_data *data = get_my_data_ptr(key, layer_data_map);
2057 if(data->logging_callback)
2058 {
2059 layer_destroy_msg_callback(data->report_data, data->logging_callback);
2060 }
2061
2062 layer_debug_report_destroy_instance(mid(instance));
2063 layer_data_map.erase(pTable);
2064
2065 pc_instance_table_map.erase(key);
2066 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2067
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002068 return result;
2069}
2070
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002071bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002072 VkInstance instance,
2073 uint32_t* pPhysicalDeviceCount,
2074 VkPhysicalDevice* pPhysicalDevices,
2075 VkResult result)
2076{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002077
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002078 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002079 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002080 }
2081
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002082 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002083 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002084 }
2085
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002086 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002087 {
2088 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002089 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2090 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002091 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002092
2093 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002094}
2095
2096VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
2097 VkInstance instance,
2098 uint32_t* pPhysicalDeviceCount,
2099 VkPhysicalDevice* pPhysicalDevices)
2100{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002101 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
2102
2103 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
2104
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002105 return result;
2106}
2107
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002108bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002109 VkPhysicalDevice physicalDevice,
2110 VkPhysicalDeviceFeatures* pFeatures,
2111 VkResult result)
2112{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002113
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002114 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002115 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002116 }
2117
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002118 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002119 {
2120 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002121 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2122 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002123 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002124
2125 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002126}
2127
2128VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
2129 VkPhysicalDevice physicalDevice,
2130 VkPhysicalDeviceFeatures* pFeatures)
2131{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002132 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
2133
2134 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
2135
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002136 return result;
2137}
2138
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002139bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002140 VkPhysicalDevice physicalDevice,
2141 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002142 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002143 VkResult result)
2144{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002145
2146 if(format < VK_FORMAT_BEGIN_RANGE ||
2147 format > VK_FORMAT_END_RANGE)
2148 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002149 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002150 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002151 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002152 }
2153
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002154 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002155 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002156 }
2157
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002158 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002159 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002160 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002161 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2162 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002163 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002164
2165 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002166}
2167
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002168VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002169 VkPhysicalDevice physicalDevice,
2170 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002171 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002172{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002173 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002174
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002175 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2176
2177 return result;
2178}
2179
2180bool PostGetPhysicalDeviceImageFormatProperties(
2181 VkPhysicalDevice physicalDevice,
2182 VkFormat format,
2183 VkImageType type,
2184 VkImageTiling tiling,
2185 VkImageUsageFlags usage,
2186 VkImageFormatProperties* pImageFormatProperties,
2187 VkResult result)
2188{
2189
2190 if(format < VK_FORMAT_BEGIN_RANGE ||
2191 format > VK_FORMAT_END_RANGE)
2192 {
2193 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2194 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2195 return false;
2196 }
2197
2198 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2199 type > VK_IMAGE_TYPE_END_RANGE)
2200 {
2201 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2202 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2203 return false;
2204 }
2205
2206 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2207 tiling > VK_IMAGE_TILING_END_RANGE)
2208 {
2209 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2210 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2211 return false;
2212 }
2213
2214
2215 if(pImageFormatProperties != nullptr)
2216 {
2217 }
2218
2219 if(result < VK_SUCCESS)
2220 {
2221 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2222 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2223 return false;
2224 }
2225
2226 return true;
2227}
2228
2229VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2230 VkPhysicalDevice physicalDevice,
2231 VkFormat format,
2232 VkImageType type,
2233 VkImageTiling tiling,
2234 VkImageUsageFlags usage,
2235 VkImageFormatProperties* pImageFormatProperties)
2236{
2237 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
2238
2239 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002240
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002241 return result;
2242}
2243
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002244bool PostGetPhysicalDeviceLimits(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002245 VkPhysicalDevice physicalDevice,
2246 VkPhysicalDeviceLimits* pLimits,
2247 VkResult result)
2248{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002249
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002250 if(pLimits != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002251 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002252 }
2253
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002254 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002255 {
2256 std::string reason = "vkGetPhysicalDeviceLimits parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002257 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2258 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002259 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002260
2261 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002262}
2263
2264VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
2265 VkPhysicalDevice physicalDevice,
2266 VkPhysicalDeviceLimits* pLimits)
2267{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002268 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceLimits(physicalDevice, pLimits);
2269
2270 PostGetPhysicalDeviceLimits(physicalDevice, pLimits, result);
2271
2272 return result;
2273}
2274
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002275bool PostGetPhysicalDeviceProperties(
2276 VkPhysicalDevice physicalDevice,
2277 VkPhysicalDeviceProperties* pProperties,
2278 VkResult result)
2279{
2280
2281 if(pProperties != nullptr)
2282 {
2283 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2284 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2285 {
2286 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2287 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2288 return false;
2289 }
2290 }
2291
2292 if(result < VK_SUCCESS)
2293 {
2294 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2295 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2296 return false;
2297 }
2298
2299 return true;
2300}
2301
2302VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2303 VkPhysicalDevice physicalDevice,
2304 VkPhysicalDeviceProperties* pProperties)
2305{
2306 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2307
2308 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2309
2310 return result;
2311}
2312
Cody Northropef72e2a2015-08-03 17:04:53 -06002313bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002314 VkPhysicalDevice physicalDevice,
2315 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002316 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002317 VkResult result)
2318{
2319
Cody Northropef72e2a2015-08-03 17:04:53 -06002320 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002321 {
2322 }
2323
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002324 if(pQueueProperties != nullptr)
2325 {
2326 }
2327
2328 if(result < VK_SUCCESS)
2329 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002330 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002331 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2332 return false;
2333 }
2334
2335 return true;
2336}
2337
2338VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2339 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002340 uint32_t* pCount,
2341 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002342{
Cody Northropef72e2a2015-08-03 17:04:53 -06002343 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002344
Cody Northropef72e2a2015-08-03 17:04:53 -06002345 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002346
2347 return result;
2348}
2349
2350bool PostGetPhysicalDeviceMemoryProperties(
2351 VkPhysicalDevice physicalDevice,
2352 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2353 VkResult result)
2354{
2355
2356 if(pMemoryProperties != nullptr)
2357 {
2358 }
2359
2360 if(result < VK_SUCCESS)
2361 {
2362 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2363 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2364 return false;
2365 }
2366
2367 return true;
2368}
2369
2370VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2371 VkPhysicalDevice physicalDevice,
2372 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2373{
2374 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2375
2376 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2377
2378 return result;
2379}
2380
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002381VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2382 VkPhysicalDevice physicalDevice,
2383 const VkDeviceCreateInfo* pCreateInfo,
2384 VkDevice* pDevice)
2385{
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002386 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002387 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2388 if(result == VK_SUCCESS)
2389 {
2390 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2391 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2392 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2393 }
2394
2395 return result;
2396}
2397
2398VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
2399 VkDevice device)
2400{
2401 layer_debug_report_destroy_device(device);
2402
2403 dispatch_key key = get_dispatch_key(device);
2404#if DISPATCH_MAP_DEBUG
2405 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2406#endif
2407
2408 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
2409 pc_device_table_map.erase(key);
2410 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2411
2412 return result;
2413}
2414
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002415bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002416 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002417 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002418 uint32_t queueIndex,
2419 VkQueue* pQueue,
2420 VkResult result)
2421{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002422
2423
2424
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002425 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002426 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002427 }
2428
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002429 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002430 {
2431 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002432 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2433 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002434 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002435
2436 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002437}
2438
2439VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2440 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002441 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002442 uint32_t queueIndex,
2443 VkQueue* pQueue)
2444{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002445 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002446
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002447 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002448
2449 return result;
2450}
2451
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002452bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002453 VkQueue queue,
2454 const VkCmdBuffer* pCmdBuffers)
2455{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002456 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002457 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002458 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002459
2460 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002461}
2462
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002463bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002464 VkQueue queue,
2465 uint32_t cmdBufferCount,
2466 VkFence fence,
2467 VkResult result)
2468{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002469
2470
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002471
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002472 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002473 {
2474 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002475 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2476 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002477 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002478
2479 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002480}
2481
2482VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2483 VkQueue queue,
2484 uint32_t cmdBufferCount,
2485 const VkCmdBuffer* pCmdBuffers,
2486 VkFence fence)
2487{
2488 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002489
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002490 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2491
2492 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2493
2494 return result;
2495}
2496
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002497bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002498 VkQueue queue,
2499 VkResult result)
2500{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002501
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002502 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002503 {
2504 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002505 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2506 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002507 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002508
2509 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002510}
2511
2512VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2513 VkQueue queue)
2514{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002515 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2516
2517 PostQueueWaitIdle(queue, result);
2518
2519 return result;
2520}
2521
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002522bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002523 VkDevice device,
2524 VkResult result)
2525{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002526
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002527 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002528 {
2529 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002530 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2531 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002532 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002533
2534 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002535}
2536
2537VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2538 VkDevice device)
2539{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002540 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2541
2542 PostDeviceWaitIdle(device, result);
2543
2544 return result;
2545}
2546
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002547bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002548 VkDevice device,
2549 const VkMemoryAllocInfo* pAllocInfo)
2550{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002551 if(pAllocInfo != nullptr)
2552 {
2553 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002554 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002555 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002556 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002557 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002558 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002559 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002560
2561 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002562}
2563
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002564bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002565 VkDevice device,
2566 VkDeviceMemory* pMem,
2567 VkResult result)
2568{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002569
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002570 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002571 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002572 }
2573
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002574 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002575 {
2576 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002577 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2578 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002579 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580
2581 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002582}
2583
2584VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2585 VkDevice device,
2586 const VkMemoryAllocInfo* pAllocInfo,
2587 VkDeviceMemory* pMem)
2588{
2589 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002590
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002591 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2592
2593 PostAllocMemory(device, pMem, result);
2594
2595 return result;
2596}
2597
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002598bool PostFreeMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002599 VkDevice device,
2600 VkDeviceMemory mem,
2601 VkResult result)
2602{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002603
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002604
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002605 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002606 {
2607 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002608 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2609 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002610 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002611
2612 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002613}
2614
2615VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2616 VkDevice device,
2617 VkDeviceMemory mem)
2618{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002619 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2620
2621 PostFreeMemory(device, mem, result);
2622
2623 return result;
2624}
2625
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002626bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002627 VkDevice device,
2628 VkDeviceMemory mem,
2629 VkDeviceSize offset,
2630 VkDeviceSize size,
2631 VkMemoryMapFlags flags,
2632 void** ppData,
2633 VkResult result)
2634{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002635
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002636
2637
2638
2639
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002640 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002641 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002642 }
2643
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002644 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002645 {
2646 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002647 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2648 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002649 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002650
2651 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002652}
2653
2654VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2655 VkDevice device,
2656 VkDeviceMemory mem,
2657 VkDeviceSize offset,
2658 VkDeviceSize size,
2659 VkMemoryMapFlags flags,
2660 void** ppData)
2661{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002662 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2663
2664 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2665
2666 return result;
2667}
2668
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002669bool PostUnmapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002670 VkDevice device,
2671 VkDeviceMemory mem,
2672 VkResult result)
2673{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002674
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002675
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002676 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002677 {
2678 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002679 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2680 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002681 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002682
2683 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002684}
2685
2686VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2687 VkDevice device,
2688 VkDeviceMemory mem)
2689{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002690 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2691
2692 PostUnmapMemory(device, mem, result);
2693
2694 return result;
2695}
2696
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002697bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002698 VkDevice device,
2699 const VkMappedMemoryRange* pMemRanges)
2700{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002701 if(pMemRanges != nullptr)
2702 {
2703 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002704 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002705 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002706 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002707 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002708 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002709 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002710
2711 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002712}
2713
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002714bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002715 VkDevice device,
2716 uint32_t memRangeCount,
2717 VkResult result)
2718{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002719
2720
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002721 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002722 {
2723 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002724 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2725 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002726 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002727
2728 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002729}
2730
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002731VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002732 VkDevice device,
2733 uint32_t memRangeCount,
2734 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002735{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002736 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002737
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002738 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002739
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002740 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2741
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002742 return result;
2743}
2744
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002745bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002746 VkDevice device,
2747 const VkMappedMemoryRange* pMemRanges)
2748{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002749 if(pMemRanges != nullptr)
2750 {
2751 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002752 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002753 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002754 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002755 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002756 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002757 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002758
2759 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002760}
2761
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002762bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002763 VkDevice device,
2764 uint32_t memRangeCount,
2765 VkResult result)
2766{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002767
2768
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002769 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002770 {
2771 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002772 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2773 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002774 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002775
2776 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002777}
2778
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002779VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002780 VkDevice device,
2781 uint32_t memRangeCount,
2782 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002783{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002784 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002785
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002786 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002787
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002788 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2789
Tony Barbour859ceab2015-04-16 19:23:13 -06002790 return result;
2791}
2792
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002793bool PostGetDeviceMemoryCommitment(
2794 VkDevice device,
2795 VkDeviceMemory memory,
2796 VkDeviceSize* pCommittedMemoryInBytes,
2797 VkResult result)
2798{
2799
2800
2801 if(pCommittedMemoryInBytes != nullptr)
2802 {
2803 }
2804
2805 if(result < VK_SUCCESS)
2806 {
2807 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2808 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2809 return false;
2810 }
2811
2812 return true;
2813}
2814
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002815VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002816 VkDevice device,
2817 VkDeviceMemory memory,
2818 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002819{
2820 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2821
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002822 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2823
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002824 return result;
2825}
2826
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002827bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002828 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002829 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002830 VkDeviceMemory mem,
2831 VkDeviceSize memOffset,
2832 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002833{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002834
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002835
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002836
2837
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002838 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002839 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002840 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2841 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2842 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002843 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002844
2845 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002846}
2847
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002848VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002849 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002850 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002851 VkDeviceMemory mem,
2852 VkDeviceSize memOffset)
2853{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002854 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002855
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002856 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002857
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002858 return result;
2859}
2860
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002861bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002862 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002863 VkImage image,
2864 VkDeviceMemory mem,
2865 VkDeviceSize memOffset,
2866 VkResult result)
2867{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002868
2869
2870
2871
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002872 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002873 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002874 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2875 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2876 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002877 }
2878
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002879 return true;
2880}
2881
2882VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2883 VkDevice device,
2884 VkImage image,
2885 VkDeviceMemory mem,
2886 VkDeviceSize memOffset)
2887{
2888 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2889
2890 PostBindImageMemory(device, image, mem, memOffset, result);
2891
2892 return result;
2893}
2894
2895bool PostGetBufferMemoryRequirements(
2896 VkDevice device,
2897 VkBuffer buffer,
2898 VkMemoryRequirements* pMemoryRequirements,
2899 VkResult result)
2900{
2901
2902
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002903 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002904 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002905 }
2906
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002907 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002908 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002909 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2910 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2911 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002912 }
2913
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002914 return true;
2915}
2916
2917VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2918 VkDevice device,
2919 VkBuffer buffer,
2920 VkMemoryRequirements* pMemoryRequirements)
2921{
2922 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2923
2924 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2925
2926 return result;
2927}
2928
2929bool PostGetImageMemoryRequirements(
2930 VkDevice device,
2931 VkImage image,
2932 VkMemoryRequirements* pMemoryRequirements,
2933 VkResult result)
2934{
2935
2936
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002937 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002938 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002939 }
2940
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002941 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002942 {
2943 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2944 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2945 return false;
2946 }
2947
2948 return true;
2949}
2950
2951VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2952 VkDevice device,
2953 VkImage image,
2954 VkMemoryRequirements* pMemoryRequirements)
2955{
2956 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2957
2958 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2959
2960 return result;
2961}
2962
2963bool PostGetImageSparseMemoryRequirements(
2964 VkDevice device,
2965 VkImage image,
2966 uint32_t* pNumRequirements,
2967 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2968 VkResult result)
2969{
2970
2971
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002972 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002973 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002974 }
2975
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002976 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002977 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002978 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2979 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2980 {
2981 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002982 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002983 return false;
2984 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002985 }
2986
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002987 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002988 {
2989 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2990 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2991 return false;
2992 }
2993
2994 return true;
2995}
2996
2997VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2998 VkDevice device,
2999 VkImage image,
3000 uint32_t* pNumRequirements,
3001 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
3002{
3003 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
3004
3005 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
3006
3007 return result;
3008}
3009
3010bool PostGetPhysicalDeviceSparseImageFormatProperties(
3011 VkPhysicalDevice physicalDevice,
3012 VkFormat format,
3013 VkImageType type,
3014 uint32_t samples,
3015 VkImageUsageFlags usage,
3016 VkImageTiling tiling,
3017 uint32_t* pNumProperties,
3018 VkSparseImageFormatProperties* pProperties,
3019 VkResult result)
3020{
3021
3022 if(format < VK_FORMAT_BEGIN_RANGE ||
3023 format > VK_FORMAT_END_RANGE)
3024 {
3025 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003026 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003027 return false;
3028 }
3029
3030 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
3031 type > VK_IMAGE_TYPE_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, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003035 return false;
3036 }
3037
3038
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003039
3040 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3041 tiling > VK_IMAGE_TILING_END_RANGE)
3042 {
3043 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003044 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003045 return false;
3046 }
3047
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003048 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003049 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003050 }
3051
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003052 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003053 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003054 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3055 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
3056 {
3057 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003058 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003059 return false;
3060 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003061 }
3062
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003063 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003064 {
3065 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
3066 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3067 return false;
3068 }
3069
3070 return true;
3071}
3072
3073VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
3074 VkPhysicalDevice physicalDevice,
3075 VkFormat format,
3076 VkImageType type,
3077 uint32_t samples,
3078 VkImageUsageFlags usage,
3079 VkImageTiling tiling,
3080 uint32_t* pNumProperties,
3081 VkSparseImageFormatProperties* pProperties)
3082{
3083 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
3084
3085 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
3086
3087 return result;
3088}
3089
3090bool PreQueueBindSparseBufferMemory(
3091 VkQueue queue,
3092 const VkSparseMemoryBindInfo* pBindInfo)
3093{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003094 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003095 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003096 }
3097
3098 return true;
3099}
3100
3101bool PostQueueBindSparseBufferMemory(
3102 VkQueue queue,
3103 VkBuffer buffer,
3104 uint32_t numBindings,
3105 VkResult result)
3106{
3107
3108
3109
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003110 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003111 {
3112 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
3113 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3114 return false;
3115 }
3116
3117 return true;
3118}
3119
3120VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
3121 VkQueue queue,
3122 VkBuffer buffer,
3123 uint32_t numBindings,
3124 const VkSparseMemoryBindInfo* pBindInfo)
3125{
3126 PreQueueBindSparseBufferMemory(queue, pBindInfo);
3127
3128 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
3129
3130 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
3131
3132 return result;
3133}
3134
3135bool PreQueueBindSparseImageOpaqueMemory(
3136 VkQueue queue,
3137 const VkSparseMemoryBindInfo* pBindInfo)
3138{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003139 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003140 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003141 }
3142
3143 return true;
3144}
3145
3146bool PostQueueBindSparseImageOpaqueMemory(
3147 VkQueue queue,
3148 VkImage image,
3149 uint32_t numBindings,
3150 VkResult result)
3151{
3152
3153
3154
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003155 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003156 {
3157 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
3158 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3159 return false;
3160 }
3161
3162 return true;
3163}
3164
3165VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
3166 VkQueue queue,
3167 VkImage image,
3168 uint32_t numBindings,
3169 const VkSparseMemoryBindInfo* pBindInfo)
3170{
3171 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
3172
3173 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
3174
3175 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
3176
3177 return result;
3178}
3179
3180bool PreQueueBindSparseImageMemory(
3181 VkQueue queue,
3182 const VkSparseImageMemoryBindInfo* pBindInfo)
3183{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003184 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003185 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003186 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3187 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
3188 {
3189 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003190 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003191 return false;
3192 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003193 }
3194
3195 return true;
3196}
3197
3198bool PostQueueBindSparseImageMemory(
3199 VkQueue queue,
3200 VkImage image,
3201 uint32_t numBindings,
3202 VkResult result)
3203{
3204
3205
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003206
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003207 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003208 {
3209 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003210 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3211 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003212 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003213
3214 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003215}
3216
3217VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003218 VkQueue queue,
3219 VkImage image,
3220 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003221 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003222{
3223 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003224
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003225 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003226
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003227 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003228
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003229 return result;
3230}
3231
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003232bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003233 VkDevice device,
3234 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003235{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003236 if(pCreateInfo != nullptr)
3237 {
3238 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003239 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003240 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003241 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003242 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003243 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003244 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003245
3246 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003247}
3248
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003249bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003250 VkDevice device,
3251 VkFence* pFence,
3252 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003253{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003254
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003255 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003256 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003257 }
3258
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003259 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003260 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003261 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003262 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3263 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003264 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003265
3266 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003267}
3268
3269VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3270 VkDevice device,
3271 const VkFenceCreateInfo* pCreateInfo,
3272 VkFence* pFence)
3273{
3274 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003275
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003276 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3277
3278 PostCreateFence(device, pFence, result);
3279
3280 return result;
3281}
3282
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003283bool PostDestroyFence(
3284 VkDevice device,
3285 VkFence fence,
3286 VkResult result)
3287{
3288
3289
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003290 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003291 {
3292 std::string reason = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3293 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3294 return false;
3295 }
3296
3297 return true;
3298}
3299
3300VK_LAYER_EXPORT VkResult VKAPI vkDestroyFence(
3301 VkDevice device,
3302 VkFence fence)
3303{
3304 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3305
3306 PostDestroyFence(device, fence, result);
3307
3308 return result;
3309}
3310
3311bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003312 VkDevice device,
3313 const VkFence* pFences)
3314{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003315 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003316 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003317 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003318
3319 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003320}
3321
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003322bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003323 VkDevice device,
3324 uint32_t fenceCount,
3325 VkResult result)
3326{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003327
3328
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003329 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003330 {
3331 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003332 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3333 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003334 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003335
3336 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003337}
3338
3339VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3340 VkDevice device,
3341 uint32_t fenceCount,
3342 const VkFence* pFences)
3343{
3344 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003345
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003346 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3347
3348 PostResetFences(device, fenceCount, result);
3349
3350 return result;
3351}
3352
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003353bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003354 VkDevice device,
3355 VkFence fence,
3356 VkResult result)
3357{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003358
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003359
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003360 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003361 {
3362 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003363 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3364 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003365 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003366
3367 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003368}
3369
3370VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3371 VkDevice device,
3372 VkFence fence)
3373{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003374 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3375
3376 PostGetFenceStatus(device, fence, result);
3377
3378 return result;
3379}
3380
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003381bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003382 VkDevice device,
3383 const VkFence* pFences)
3384{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003385 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003386 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003387 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003388
3389 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003390}
3391
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003392bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003393 VkDevice device,
3394 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003395 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003396 uint64_t timeout,
3397 VkResult result)
3398{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003399
3400
3401
3402
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003403 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003404 {
3405 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003406 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3407 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003408 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003409
3410 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003411}
3412
3413VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3414 VkDevice device,
3415 uint32_t fenceCount,
3416 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003417 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003418 uint64_t timeout)
3419{
3420 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003421
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003422 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3423
3424 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3425
3426 return result;
3427}
3428
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003429bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003430 VkDevice device,
3431 const VkSemaphoreCreateInfo* pCreateInfo)
3432{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003433 if(pCreateInfo != nullptr)
3434 {
3435 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003436 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003437 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003438 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003439 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003440 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003442
3443 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003444}
3445
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003446bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003447 VkDevice device,
3448 VkSemaphore* pSemaphore,
3449 VkResult result)
3450{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003451
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003452 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003453 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003454 }
3455
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003456 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003457 {
3458 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3460 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003461 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003462
3463 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003464}
3465
3466VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3467 VkDevice device,
3468 const VkSemaphoreCreateInfo* pCreateInfo,
3469 VkSemaphore* pSemaphore)
3470{
3471 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003472
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003473 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3474
3475 PostCreateSemaphore(device, pSemaphore, result);
3476
3477 return result;
3478}
3479
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003480bool PostDestroySemaphore(
3481 VkDevice device,
3482 VkSemaphore semaphore,
3483 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003484{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003485
3486
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003487 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003488 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003489 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3491 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003492 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003493
3494 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003495}
3496
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003497VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3498 VkDevice device,
3499 VkSemaphore semaphore)
3500{
3501 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3502
3503 PostDestroySemaphore(device, semaphore, result);
3504
3505 return result;
3506}
3507
3508bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003509 VkQueue queue,
3510 VkSemaphore semaphore,
3511 VkResult result)
3512{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003513
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003514
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003515 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003516 {
3517 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003518 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3519 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003520 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003521
3522 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003523}
3524
3525VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3526 VkQueue queue,
3527 VkSemaphore semaphore)
3528{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003529 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3530
3531 PostQueueSignalSemaphore(queue, semaphore, result);
3532
3533 return result;
3534}
3535
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003536bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003537 VkQueue queue,
3538 VkSemaphore semaphore,
3539 VkResult result)
3540{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003541
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003542
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003543 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003544 {
3545 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003546 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3547 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003548 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003549
3550 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003551}
3552
3553VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3554 VkQueue queue,
3555 VkSemaphore semaphore)
3556{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003557 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3558
3559 PostQueueWaitSemaphore(queue, semaphore, result);
3560
3561 return result;
3562}
3563
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003564bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003565 VkDevice device,
3566 const VkEventCreateInfo* pCreateInfo)
3567{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003568 if(pCreateInfo != nullptr)
3569 {
3570 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003571 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003572 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003573 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003574 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003575 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003576 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003577
3578 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003579}
3580
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003581bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003582 VkDevice device,
3583 VkEvent* pEvent,
3584 VkResult result)
3585{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003586
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003587 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003588 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003589 }
3590
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003591 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003592 {
3593 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003594 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3595 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003596 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003597
3598 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003599}
3600
3601VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3602 VkDevice device,
3603 const VkEventCreateInfo* pCreateInfo,
3604 VkEvent* pEvent)
3605{
3606 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003607
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003608 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3609
3610 PostCreateEvent(device, pEvent, result);
3611
3612 return result;
3613}
3614
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003615bool PostDestroyEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003616 VkDevice device,
3617 VkEvent event,
3618 VkResult result)
3619{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003620
3621
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003622 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003623 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003624 std::string reason = "vkDestroyEvent parameter, VkResult result, is " + EnumeratorString(result);
3625 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3626 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003627 }
3628
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003629 return true;
3630}
3631
3632VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3633 VkDevice device,
3634 VkEvent event)
3635{
3636 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3637
3638 PostDestroyEvent(device, event, result);
3639
3640 return result;
3641}
3642
3643bool PostGetEventStatus(
3644 VkDevice device,
3645 VkEvent event,
3646 VkResult result)
3647{
3648
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003649
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003650 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003651 {
3652 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003653 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3654 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003655 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003656
3657 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003658}
3659
3660VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3661 VkDevice device,
3662 VkEvent event)
3663{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003664 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3665
3666 PostGetEventStatus(device, event, result);
3667
3668 return result;
3669}
3670
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003671bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003672 VkDevice device,
3673 VkEvent event,
3674 VkResult result)
3675{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003676
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003677
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003678 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003679 {
3680 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003681 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3682 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003683 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003684
3685 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003686}
3687
3688VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3689 VkDevice device,
3690 VkEvent event)
3691{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003692 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3693
3694 PostSetEvent(device, event, result);
3695
3696 return result;
3697}
3698
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003699bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003700 VkDevice device,
3701 VkEvent event,
3702 VkResult result)
3703{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003704
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003705
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003706 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003707 {
3708 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3710 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003711 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003712
3713 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003714}
3715
3716VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3717 VkDevice device,
3718 VkEvent event)
3719{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003720 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3721
3722 PostResetEvent(device, event, result);
3723
3724 return result;
3725}
3726
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003727bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003728 VkDevice device,
3729 const VkQueryPoolCreateInfo* pCreateInfo)
3730{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003731 if(pCreateInfo != nullptr)
3732 {
3733 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003734 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003735 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003736 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003737 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003738 }
3739 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3740 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3741 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003742 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003743 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003744 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003745 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003746 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003747
3748 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003749}
3750
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003751bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003752 VkDevice device,
3753 VkQueryPool* pQueryPool,
3754 VkResult result)
3755{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003756
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003757 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003758 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003759 }
3760
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003761 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003762 {
3763 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003764 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3765 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003766 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767
3768 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003769}
3770
3771VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3772 VkDevice device,
3773 const VkQueryPoolCreateInfo* pCreateInfo,
3774 VkQueryPool* pQueryPool)
3775{
3776 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003777
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003778 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3779
3780 PostCreateQueryPool(device, pQueryPool, result);
3781
3782 return result;
3783}
3784
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003785bool PostDestroyQueryPool(
3786 VkDevice device,
3787 VkQueryPool queryPool,
3788 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003789{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003790
3791
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003792 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003793 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003794 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3795 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3796 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003797 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003798
3799 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003800}
3801
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003802VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3803 VkDevice device,
3804 VkQueryPool queryPool)
3805{
3806 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3807
3808 PostDestroyQueryPool(device, queryPool, result);
3809
3810 return result;
3811}
3812
3813bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003814 VkDevice device,
3815 VkQueryPool queryPool,
3816 uint32_t startQuery,
3817 uint32_t queryCount,
3818 size_t* pDataSize,
3819 void* pData,
3820 VkQueryResultFlags flags,
3821 VkResult result)
3822{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003823
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003824
3825
3826
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003827 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003828 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003829 }
3830
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003831 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003832 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003833 }
3834
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003835
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003836 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003837 {
3838 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3840 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003841 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003842
3843 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003844}
3845
3846VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3847 VkDevice device,
3848 VkQueryPool queryPool,
3849 uint32_t startQuery,
3850 uint32_t queryCount,
3851 size_t* pDataSize,
3852 void* pData,
3853 VkQueryResultFlags flags)
3854{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003855 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3856
3857 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3858
3859 return result;
3860}
3861
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003862bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003863 VkDevice device,
3864 const VkBufferCreateInfo* pCreateInfo)
3865{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003866 if(pCreateInfo != nullptr)
3867 {
3868 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003869 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003870 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003871 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003872 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003873 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003874 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3875 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003876 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003877 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003878 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003879 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003880 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003881 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003882 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003883 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003884 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003885
3886 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003887}
3888
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003889bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003890 VkDevice device,
3891 VkBuffer* pBuffer,
3892 VkResult result)
3893{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003894
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003895 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003896 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003897 }
3898
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003899 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003900 {
3901 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003902 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3903 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003904 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003905
3906 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003907}
3908
3909VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3910 VkDevice device,
3911 const VkBufferCreateInfo* pCreateInfo,
3912 VkBuffer* pBuffer)
3913{
3914 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003915
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003916 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3917
3918 PostCreateBuffer(device, pBuffer, result);
3919
3920 return result;
3921}
3922
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003923bool PostDestroyBuffer(
3924 VkDevice device,
3925 VkBuffer buffer,
3926 VkResult result)
3927{
3928
3929
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003930 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003931 {
3932 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3933 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3934 return false;
3935 }
3936
3937 return true;
3938}
3939
3940VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3941 VkDevice device,
3942 VkBuffer buffer)
3943{
3944 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
3945
3946 PostDestroyBuffer(device, buffer, result);
3947
3948 return result;
3949}
3950
3951bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003952 VkDevice device,
3953 const VkBufferViewCreateInfo* pCreateInfo)
3954{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003955 if(pCreateInfo != nullptr)
3956 {
3957 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003958 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003959 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003960 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003961 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003962 }
3963 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3964 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3965 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003966 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003967 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003968 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003969 }
3970 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3971 pCreateInfo->format > VK_FORMAT_END_RANGE)
3972 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003973 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003974 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003975 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003976 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003977 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003978
3979 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003980}
3981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003982bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003983 VkDevice device,
3984 VkBufferView* pView,
3985 VkResult result)
3986{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003987
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003988 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003989 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003990 }
3991
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003992 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003993 {
3994 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003995 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3996 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003997 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003998
3999 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004000}
4001
4002VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
4003 VkDevice device,
4004 const VkBufferViewCreateInfo* pCreateInfo,
4005 VkBufferView* pView)
4006{
4007 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004008
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004009 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
4010
4011 PostCreateBufferView(device, pView, result);
4012
4013 return result;
4014}
4015
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004016bool PostDestroyBufferView(
4017 VkDevice device,
4018 VkBufferView bufferView,
4019 VkResult result)
4020{
4021
4022
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004023 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004024 {
4025 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
4026 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4027 return false;
4028 }
4029
4030 return true;
4031}
4032
4033VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
4034 VkDevice device,
4035 VkBufferView bufferView)
4036{
4037 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
4038
4039 PostDestroyBufferView(device, bufferView, result);
4040
4041 return result;
4042}
4043
4044bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004045 VkDevice device,
4046 const VkImageCreateInfo* pCreateInfo)
4047{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004048 if(pCreateInfo != nullptr)
4049 {
4050 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004051 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004052 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004053 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004054 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004055 }
4056 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
4057 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
4058 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004059 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004060 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004061 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004062 }
4063 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4064 pCreateInfo->format > VK_FORMAT_END_RANGE)
4065 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004066 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004067 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004068 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004069 }
4070 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
4071 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
4072 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004073 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004074 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004075 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004076 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004077 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
4078 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004079 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004080 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4081 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004082 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004083 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004084 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004085 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004086 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004087 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004088
4089 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004090}
4091
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004092bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004093 VkDevice device,
4094 VkImage* pImage,
4095 VkResult result)
4096{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004097
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004098 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004099 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004100 }
4101
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004102 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004103 {
4104 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004105 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4106 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004107 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004108
4109 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004110}
4111
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004112VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
4113 VkDevice device,
4114 const VkImageCreateInfo* pCreateInfo,
4115 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004116{
4117 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004118
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004119 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
4120
4121 PostCreateImage(device, pImage, result);
4122
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004123 return result;
4124}
4125
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004126bool PostDestroyImage(
4127 VkDevice device,
4128 VkImage image,
4129 VkResult result)
4130{
4131
4132
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004133 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004134 {
4135 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
4136 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4137 return false;
4138 }
4139
4140 return true;
4141}
4142
4143VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
4144 VkDevice device,
4145 VkImage image)
4146{
4147 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
4148
4149 PostDestroyImage(device, image, result);
4150
4151 return result;
4152}
4153
4154bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004155 VkDevice device,
4156 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004157{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004158 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004159 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004160 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4161 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4162 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004163 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004164 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004165 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004166 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004167 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004168
4169 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004170}
4171
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004172bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004173 VkDevice device,
4174 VkImage image,
4175 VkSubresourceLayout* pLayout,
4176 VkResult result)
4177{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004178
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004179
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004180 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004181 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004182 }
4183
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004184 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004185 {
4186 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004187 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4188 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004189 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004190
4191 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004192}
4193
4194VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4195 VkDevice device,
4196 VkImage image,
4197 const VkImageSubresource* pSubresource,
4198 VkSubresourceLayout* pLayout)
4199{
4200 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004201
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004202 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4203
4204 PostGetImageSubresourceLayout(device, image, pLayout, result);
4205
4206 return result;
4207}
4208
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004209bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004210 VkDevice device,
4211 const VkImageViewCreateInfo* pCreateInfo)
4212{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004213 if(pCreateInfo != nullptr)
4214 {
4215 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004216 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004217 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004218 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004219 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004220 }
4221 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4222 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4223 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004224 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004225 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004226 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004227 }
4228 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4229 pCreateInfo->format > VK_FORMAT_END_RANGE)
4230 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004231 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004232 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004233 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004234 }
4235 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4236 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4237 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004238 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004239 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004240 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004241 }
4242 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4243 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4244 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004245 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004246 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004247 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004248 }
4249 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4250 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4251 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004252 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004253 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004254 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004255 }
4256 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4257 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4258 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004259 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004260 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004261 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004262 }
4263 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4264 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4265 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004266 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004267 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004268 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004269 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004270 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004271
4272 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004273}
4274
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004275bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004276 VkDevice device,
4277 VkImageView* pView,
4278 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004279{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004280
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004281 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004282 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004283 }
4284
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004285 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004286 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004287 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004288 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4289 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004290 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004291
4292 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004293}
4294
4295VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4296 VkDevice device,
4297 const VkImageViewCreateInfo* pCreateInfo,
4298 VkImageView* pView)
4299{
4300 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004301
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004302 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4303
4304 PostCreateImageView(device, pView, result);
4305
4306 return result;
4307}
4308
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004309bool PostDestroyImageView(
4310 VkDevice device,
4311 VkImageView imageView,
4312 VkResult result)
4313{
4314
4315
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004316 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004317 {
4318 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4319 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4320 return false;
4321 }
4322
4323 return true;
4324}
4325
4326VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4327 VkDevice device,
4328 VkImageView imageView)
4329{
4330 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4331
4332 PostDestroyImageView(device, imageView, result);
4333
4334 return result;
4335}
4336
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004337bool PreCreateAttachmentView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004338 VkDevice device,
Chia-I Wuc278df82015-07-07 11:50:03 +08004339 const VkAttachmentViewCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004340{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004341 if(pCreateInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004342 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004343 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_ATTACHMENT_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004344 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004345 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4346 "vkCreateAttachmentView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4347 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004348 }
4349 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4350 pCreateInfo->format > VK_FORMAT_END_RANGE)
4351 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004352 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4353 "vkCreateAttachmentView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
4354 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004355 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004356 }
4357
4358 return true;
4359}
4360
4361bool PostCreateAttachmentView(
4362 VkDevice device,
4363 VkAttachmentView* pView,
4364 VkResult result)
4365{
4366
4367 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004368 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004369 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004370
4371 if(result < VK_SUCCESS)
4372 {
4373 std::string reason = "vkCreateAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4374 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4375 return false;
4376 }
4377
4378 return true;
4379}
4380
4381VK_LAYER_EXPORT VkResult VKAPI vkCreateAttachmentView(
4382 VkDevice device,
4383 const VkAttachmentViewCreateInfo* pCreateInfo,
4384 VkAttachmentView* pView)
4385{
4386 PreCreateAttachmentView(device, pCreateInfo);
4387
4388 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateAttachmentView(device, pCreateInfo, pView);
4389
4390 PostCreateAttachmentView(device, pView, result);
4391
4392 return result;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004393}
4394
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004395bool PostDestroyAttachmentView(
4396 VkDevice device,
4397 VkAttachmentView attachmentView,
4398 VkResult result)
4399{
4400
4401
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004402 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004403 {
4404 std::string reason = "vkDestroyAttachmentView parameter, VkResult result, is " + EnumeratorString(result);
4405 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4406 return false;
4407 }
4408
4409 return true;
4410}
4411
4412VK_LAYER_EXPORT VkResult VKAPI vkDestroyAttachmentView(
4413 VkDevice device,
4414 VkAttachmentView attachmentView)
4415{
4416 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyAttachmentView(device, attachmentView);
4417
4418 PostDestroyAttachmentView(device, attachmentView, result);
4419
4420 return result;
4421}
4422
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004423bool PostDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004424 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004425 VkShaderModule shaderModule,
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004426 VkResult result)
4427{
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004428
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004429
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004430 if(result < VK_SUCCESS)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004431 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004432 std::string reason = "vkDestroyShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4433 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4434 return false;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004435 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004436
4437 return true;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004438}
4439
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004440VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004441 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004442 VkShaderModule shaderModule)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004443{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004444 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004445
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004446 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004447
4448 return result;
4449}
4450
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004451bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004452 VkDevice device,
4453 const VkShaderCreateInfo* pCreateInfo)
4454{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004455 if(pCreateInfo != nullptr)
4456 {
4457 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004458 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004460 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004461 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004462 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004463 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004464 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004465 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004466 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004467
4468 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004469}
4470
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004471bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004472 VkDevice device,
4473 VkShader* pShader,
4474 VkResult result)
4475{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004476
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004477 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004478 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004479 }
4480
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004481 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004482 {
4483 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004484 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4485 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004486 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004487
4488 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004489}
4490
4491VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4492 VkDevice device,
4493 const VkShaderCreateInfo* pCreateInfo,
4494 VkShader* pShader)
4495{
4496 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004497
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004498 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4499
4500 PostCreateShader(device, pShader, result);
4501
4502 return result;
4503}
4504
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004505bool PostDestroyShader(
4506 VkDevice device,
4507 VkShader shader,
4508 VkResult result)
4509{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004510
4511
4512 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004513 {
4514 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4515 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4516 return false;
4517 }
4518
4519 return true;
4520}
4521
4522VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4523 VkDevice device,
4524 VkShader shader)
4525{
4526 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4527
4528 PostDestroyShader(device, shader, result);
4529
4530 return result;
4531}
4532
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004533bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004534 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004535 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004536{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004537 if(pCreateInfo != nullptr)
4538 {
4539 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004540 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004541 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004542 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004543 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004544 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004545 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004546 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004547 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004548 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004549
4550 return true;
4551}
4552
4553bool PostCreatePipelineCache(
4554 VkDevice device,
4555 VkPipelineCache* pPipelineCache,
4556 VkResult result)
4557{
4558
4559 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004560 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004561 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004562
4563 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004564 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004565 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004566 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4567 return false;
4568 }
4569
4570 return true;
4571}
4572
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004573VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06004574 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004575 const VkPipelineCacheCreateInfo* pCreateInfo,
4576 VkPipelineCache* pPipelineCache)
4577{
4578 PreCreatePipelineCache(device, pCreateInfo);
4579
4580 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4581
4582 PostCreatePipelineCache(device, pPipelineCache, result);
4583
4584 return result;
4585}
4586
4587bool PostDestroyPipelineCache(
4588 VkDevice device,
4589 VkPipelineCache pipelineCache,
Tony Barboure307f582015-07-10 15:29:03 -06004590 VkResult result)
4591{
4592
Tony Barboure307f582015-07-10 15:29:03 -06004593
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004594 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004595 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004596 std::string reason = "vkDestroyPipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004597 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4598 return false;
4599 }
4600
4601 return true;
4602}
4603
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004604VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineCache(
4605 VkDevice device,
4606 VkPipelineCache pipelineCache)
4607{
4608 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache);
4609
4610 PostDestroyPipelineCache(device, pipelineCache, result);
4611
4612 return result;
4613}
4614
4615bool PostGetPipelineCacheSize(
4616 VkDevice device,
4617 VkPipelineCache pipelineCache)
4618{
4619
4620
4621 return true;
4622}
4623
4624VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4625 VkDevice device,
4626 VkPipelineCache pipelineCache)
4627{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004628 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004629
4630 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004631
4632 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004633}
4634
4635bool PostGetPipelineCacheData(
4636 VkDevice device,
4637 VkPipelineCache pipelineCache,
4638 void* pData,
4639 VkResult result)
4640{
4641
4642
4643 if(pData != nullptr)
4644 {
4645 }
4646
4647 if(result < VK_SUCCESS)
4648 {
4649 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4650 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4651 return false;
4652 }
4653
4654 return true;
4655}
4656
4657VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4658 VkDevice device,
4659 VkPipelineCache pipelineCache,
4660 void* pData)
4661{
4662 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4663
4664 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4665
4666 return result;
4667}
4668
4669bool PreMergePipelineCaches(
4670 VkDevice device,
4671 const VkPipelineCache* pSrcCaches)
4672{
4673 if(pSrcCaches != nullptr)
4674 {
4675 }
4676
4677 return true;
4678}
4679
4680bool PostMergePipelineCaches(
4681 VkDevice device,
4682 VkPipelineCache destCache,
4683 uint32_t srcCacheCount,
4684 VkResult result)
4685{
4686
4687
4688
4689 if(result < VK_SUCCESS)
4690 {
4691 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4692 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4693 return false;
4694 }
4695
4696 return true;
4697}
4698
4699VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4700 VkDevice device,
4701 VkPipelineCache destCache,
4702 uint32_t srcCacheCount,
4703 const VkPipelineCache* pSrcCaches)
4704{
4705 PreMergePipelineCaches(device, pSrcCaches);
4706
4707 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4708
4709 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4710
4711 return result;
4712}
4713
4714bool PreCreateGraphicsPipelines(
4715 VkDevice device,
4716 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4717{
4718 if(pCreateInfos != nullptr)
4719 {
4720 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4721 {
4722 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4723 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4724 return false;
4725 }
4726 if(pCreateInfos->pStages != nullptr)
4727 {
4728 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4729 {
4730 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4731 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4732 return false;
4733 }
4734 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4735 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4736 {
4737 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4738 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4739 return false;
4740 }
4741 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4742 {
4743 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4744 {
4745 }
4746 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4747 {
4748 }
4749 }
4750 }
4751 if(pCreateInfos->pVertexInputState != nullptr)
4752 {
4753 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4754 {
4755 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4756 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4757 return false;
4758 }
4759 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4760 {
4761 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4762 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4763 {
4764 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4765 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4766 return false;
4767 }
4768 }
4769 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4770 {
4771 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4772 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4773 {
4774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4775 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4776 return false;
4777 }
4778 }
4779 }
4780 if(pCreateInfos->pInputAssemblyState != nullptr)
4781 {
4782 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4783 {
4784 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4785 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4786 return false;
4787 }
4788 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4789 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4790 {
4791 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4792 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4793 return false;
4794 }
4795 }
4796 if(pCreateInfos->pTessellationState != nullptr)
4797 {
4798 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4799 {
4800 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4801 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4802 return false;
4803 }
4804 }
4805 if(pCreateInfos->pViewportState != nullptr)
4806 {
4807 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4808 {
4809 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4810 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4811 return false;
4812 }
4813 }
4814 if(pCreateInfos->pRasterState != nullptr)
4815 {
4816 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4817 {
4818 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4819 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4820 return false;
4821 }
4822 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4823 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4824 {
4825 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4826 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4827 return false;
4828 }
4829 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4830 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4831 {
4832 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4833 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4834 return false;
4835 }
4836 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4837 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4838 {
4839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4840 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4841 return false;
4842 }
4843 }
4844 if(pCreateInfos->pMultisampleState != nullptr)
4845 {
4846 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4847 {
4848 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4849 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4850 return false;
4851 }
4852 }
4853 if(pCreateInfos->pDepthStencilState != nullptr)
4854 {
4855 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4856 {
4857 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4858 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4859 return false;
4860 }
4861 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4862 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4863 {
4864 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4865 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4866 return false;
4867 }
4868 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4869 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4870 {
4871 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4872 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4873 return false;
4874 }
4875 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4876 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4877 {
4878 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4879 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4880 return false;
4881 }
4882 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4883 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4884 {
4885 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4886 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4887 return false;
4888 }
4889 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4890 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4891 {
4892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4893 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4894 return false;
4895 }
4896 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4897 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4898 {
4899 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4900 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4901 return false;
4902 }
4903 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4904 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4905 {
4906 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4907 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4908 return false;
4909 }
4910 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4911 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4912 {
4913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4914 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4915 return false;
4916 }
4917 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4918 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4919 {
4920 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4921 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4922 return false;
4923 }
4924 }
4925 if(pCreateInfos->pColorBlendState != nullptr)
4926 {
4927 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4928 {
4929 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4930 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4931 return false;
4932 }
4933 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4934 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4935 {
4936 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4937 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4938 return false;
4939 }
4940 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4941 {
4942 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4943 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4944 {
4945 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4946 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4947 return false;
4948 }
4949 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4950 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4951 {
4952 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4953 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4954 return false;
4955 }
4956 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4957 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4958 {
4959 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4960 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4961 return false;
4962 }
4963 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4964 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4965 {
4966 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4967 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4968 return false;
4969 }
4970 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4971 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4972 {
4973 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4974 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4975 return false;
4976 }
4977 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4978 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4979 {
4980 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4981 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4982 return false;
4983 }
4984 }
4985 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004986 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4987 {
4988 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4989 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4990 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004991 }
4992
4993 return true;
4994}
4995
4996bool PostCreateGraphicsPipelines(
4997 VkDevice device,
4998 VkPipelineCache pipelineCache,
4999 uint32_t count,
5000 VkPipeline* pPipelines,
5001 VkResult result)
5002{
5003
5004
5005
5006 if(pPipelines != nullptr)
5007 {
5008 }
5009
5010 if(result < VK_SUCCESS)
5011 {
5012 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
5013 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5014 return false;
5015 }
5016
5017 return true;
5018}
5019
5020VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
5021 VkDevice device,
5022 VkPipelineCache pipelineCache,
5023 uint32_t count,
5024 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5025 VkPipeline* pPipelines)
5026{
5027 PreCreateGraphicsPipelines(device, pCreateInfos);
5028
5029 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5030
5031 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
5032
5033 return result;
5034}
5035
5036bool PreCreateComputePipelines(
5037 VkDevice device,
5038 const VkComputePipelineCreateInfo* pCreateInfos)
5039{
5040 if(pCreateInfos != nullptr)
5041 {
5042 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
5043 {
5044 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5045 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
5046 return false;
5047 }
5048 if(pCreateInfos->cs.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
5049 {
5050 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5051 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
5052 return false;
5053 }
5054 if(pCreateInfos->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
5055 pCreateInfos->cs.stage > VK_SHADER_STAGE_END_RANGE)
5056 {
5057 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5058 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
5059 return false;
5060 }
5061 if(pCreateInfos->cs.pSpecializationInfo != nullptr)
5062 {
5063 if(pCreateInfos->cs.pSpecializationInfo->pMap != nullptr)
5064 {
5065 }
5066 if(pCreateInfos->cs.pSpecializationInfo->pData != nullptr)
5067 {
5068 }
5069 }
5070 }
5071
5072 return true;
5073}
5074
5075bool PostCreateComputePipelines(
5076 VkDevice device,
5077 VkPipelineCache pipelineCache,
5078 uint32_t count,
5079 VkPipeline* pPipelines,
5080 VkResult result)
5081{
5082
5083
5084
5085 if(pPipelines != nullptr)
5086 {
5087 }
5088
5089 if(result < VK_SUCCESS)
5090 {
5091 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
5092 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5093 return false;
5094 }
5095
5096 return true;
5097}
5098
5099VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
5100 VkDevice device,
5101 VkPipelineCache pipelineCache,
5102 uint32_t count,
5103 const VkComputePipelineCreateInfo* pCreateInfos,
5104 VkPipeline* pPipelines)
5105{
5106 PreCreateComputePipelines(device, pCreateInfos);
5107
5108 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5109
5110 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
5111
5112 return result;
5113}
5114
Tony Barboure307f582015-07-10 15:29:03 -06005115bool PostDestroyPipeline(
5116 VkDevice device,
5117 VkPipeline pipeline,
5118 VkResult result)
5119{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005120
5121
5122 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06005123 {
5124 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
5125 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5126 return false;
5127 }
5128
5129 return true;
5130}
5131
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005132VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5133 VkDevice device,
5134 VkPipeline pipeline)
5135{
5136 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5137
5138 PostDestroyPipeline(device, pipeline, result);
5139
5140 return result;
5141}
5142
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005143bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005144 VkDevice device,
5145 const VkPipelineLayoutCreateInfo* pCreateInfo)
5146{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005147 if(pCreateInfo != nullptr)
5148 {
5149 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005150 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005151 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005152 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5153 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005154 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005155 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005156 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005157 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005158 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005159 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005160 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005161 }
5162
5163 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005164}
5165
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005166bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005167 VkDevice device,
5168 VkPipelineLayout* pPipelineLayout,
5169 VkResult result)
5170{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005171
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005172 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005173 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005174 }
5175
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005176 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005177 {
5178 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005179 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5180 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005181 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005182
5183 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005184}
5185
5186VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5187 VkDevice device,
5188 const VkPipelineLayoutCreateInfo* pCreateInfo,
5189 VkPipelineLayout* pPipelineLayout)
5190{
5191 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005192
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005193 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5194
5195 PostCreatePipelineLayout(device, pPipelineLayout, result);
5196
5197 return result;
5198}
5199
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005200bool PostDestroyPipelineLayout(
5201 VkDevice device,
5202 VkPipelineLayout pipelineLayout,
5203 VkResult result)
5204{
5205
5206
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005207 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005208 {
5209 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5210 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5211 return false;
5212 }
5213
5214 return true;
5215}
5216
5217VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5218 VkDevice device,
5219 VkPipelineLayout pipelineLayout)
5220{
5221 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5222
5223 PostDestroyPipelineLayout(device, pipelineLayout, result);
5224
5225 return result;
5226}
5227
5228bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005229 VkDevice device,
5230 const VkSamplerCreateInfo* pCreateInfo)
5231{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005232 if(pCreateInfo != nullptr)
5233 {
5234 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005235 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005236 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005237 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005238 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005239 }
5240 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5241 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5242 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005243 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005244 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005245 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005246 }
5247 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5248 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5249 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005251 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005252 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005253 }
5254 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5255 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5256 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005258 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005259 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005260 }
5261 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5262 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5263 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005264 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005265 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005266 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005267 }
5268 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5269 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5270 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005271 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005272 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005273 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005274 }
5275 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5276 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5277 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005278 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005279 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005280 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005281 }
5282 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5283 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5284 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005285 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005286 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005287 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005288 }
5289 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5290 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5291 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005292 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005293 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005294 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005295 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005296 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005297
5298 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005299}
5300
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005301bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005302 VkDevice device,
5303 VkSampler* pSampler,
5304 VkResult result)
5305{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005306
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005307 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005308 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005309 }
5310
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005311 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005312 {
5313 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005314 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5315 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005316 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005317
5318 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005319}
5320
5321VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5322 VkDevice device,
5323 const VkSamplerCreateInfo* pCreateInfo,
5324 VkSampler* pSampler)
5325{
5326 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005327
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005328 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5329
5330 PostCreateSampler(device, pSampler, result);
5331
5332 return result;
5333}
5334
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005335bool PostDestroySampler(
5336 VkDevice device,
5337 VkSampler sampler,
5338 VkResult result)
5339{
5340
5341
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005342 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005343 {
5344 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5345 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5346 return false;
5347 }
5348
5349 return true;
5350}
5351
5352VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5353 VkDevice device,
5354 VkSampler sampler)
5355{
5356 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5357
5358 PostDestroySampler(device, sampler, result);
5359
5360 return result;
5361}
5362
5363bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005364 VkDevice device,
5365 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5366{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005367 if(pCreateInfo != nullptr)
5368 {
5369 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005370 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005371 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005372 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005373 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005374 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005375 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005376 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005377 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5378 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5379 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005380 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005381 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005382 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005383 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005384 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005385 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005386 }
5387 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005388 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005389
5390 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005391}
5392
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005393bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005394 VkDevice device,
5395 VkDescriptorSetLayout* pSetLayout,
5396 VkResult result)
5397{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005398
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005399 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005400 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005401 }
5402
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005403 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005404 {
5405 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005406 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5407 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005408 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005409
5410 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005411}
5412
5413VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5414 VkDevice device,
5415 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5416 VkDescriptorSetLayout* pSetLayout)
5417{
5418 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005419
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005420 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5421
5422 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5423
5424 return result;
5425}
5426
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005427bool PostDestroyDescriptorSetLayout(
5428 VkDevice device,
5429 VkDescriptorSetLayout descriptorSetLayout,
5430 VkResult result)
5431{
5432
5433
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005434 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005435 {
5436 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5437 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5438 return false;
5439 }
5440
5441 return true;
5442}
5443
5444VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5445 VkDevice device,
5446 VkDescriptorSetLayout descriptorSetLayout)
5447{
5448 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5449
5450 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5451
5452 return result;
5453}
5454
5455bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005456 VkDevice device,
5457 const VkDescriptorPoolCreateInfo* pCreateInfo)
5458{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005459 if(pCreateInfo != nullptr)
5460 {
5461 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005462 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005463 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005464 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005465 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005466 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005467 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005468 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005469 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5470 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5471 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005472 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005473 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005474 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005475 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005476 }
5477 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005478
5479 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005480}
5481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005482bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005483 VkDevice device,
5484 VkDescriptorPoolUsage poolUsage,
5485 uint32_t maxSets,
5486 VkDescriptorPool* pDescriptorPool,
5487 VkResult result)
5488{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005489
5490 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5491 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5492 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005493 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005494 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005495 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005496 }
5497
5498
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005499 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005500 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005501 }
5502
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005503 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005504 {
5505 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005506 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5507 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005508 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005509
5510 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005511}
5512
5513VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5514 VkDevice device,
5515 VkDescriptorPoolUsage poolUsage,
5516 uint32_t maxSets,
5517 const VkDescriptorPoolCreateInfo* pCreateInfo,
5518 VkDescriptorPool* pDescriptorPool)
5519{
5520 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005521
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005522 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5523
5524 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5525
5526 return result;
5527}
5528
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005529bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005530 VkDevice device,
5531 VkDescriptorPool descriptorPool,
5532 VkResult result)
5533{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005534
5535
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005536 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005537 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005538 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5539 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5540 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005541 }
5542
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005543 return true;
5544}
5545
5546VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5547 VkDevice device,
5548 VkDescriptorPool descriptorPool)
5549{
5550 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5551
5552 PostDestroyDescriptorPool(device, descriptorPool, result);
5553
5554 return result;
5555}
5556
5557bool PostResetDescriptorPool(
5558 VkDevice device,
5559 VkDescriptorPool descriptorPool,
5560 VkResult result)
5561{
5562
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005563
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005564 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005565 {
5566 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005567 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5568 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005569 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005570
5571 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005572}
5573
5574VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5575 VkDevice device,
5576 VkDescriptorPool descriptorPool)
5577{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005578 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5579
5580 PostResetDescriptorPool(device, descriptorPool, result);
5581
5582 return result;
5583}
5584
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005585bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005586 VkDevice device,
5587 const VkDescriptorSetLayout* pSetLayouts)
5588{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005589 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005590 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005591 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005592
5593 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005594}
5595
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005596bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005597 VkDevice device,
5598 VkDescriptorPool descriptorPool,
5599 VkDescriptorSetUsage setUsage,
5600 uint32_t count,
5601 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005602 VkResult result)
5603{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005604
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005605
5606 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5607 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5608 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005609 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005610 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005611 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005612 }
5613
5614
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005615 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005616 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005617 }
5618
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005619 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005620 {
5621 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005622 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5623 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005624 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005625
5626 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005627}
5628
5629VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5630 VkDevice device,
5631 VkDescriptorPool descriptorPool,
5632 VkDescriptorSetUsage setUsage,
5633 uint32_t count,
5634 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06005635 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005636{
5637 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005638
Cody Northropc8aa4a52015-08-03 12:47:29 -06005639 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005640
Cody Northropc8aa4a52015-08-03 12:47:29 -06005641 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005642
5643 return result;
5644}
5645
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005646bool PreFreeDescriptorSets(
5647 VkDevice device,
5648 const VkDescriptorSet* pDescriptorSets)
5649{
5650 if(pDescriptorSets != nullptr)
5651 {
5652 }
5653
5654 return true;
5655}
5656
5657bool PostFreeDescriptorSets(
5658 VkDevice device,
5659 VkDescriptorPool descriptorPool,
5660 uint32_t count,
5661 VkResult result)
5662{
5663
5664
5665
5666 if(result < VK_SUCCESS)
5667 {
5668 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5669 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5670 return false;
5671 }
5672
5673 return true;
5674}
5675
5676VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
5677 VkDevice device,
5678 VkDescriptorPool descriptorPool,
5679 uint32_t count,
5680 const VkDescriptorSet* pDescriptorSets)
5681{
5682 PreFreeDescriptorSets(device, pDescriptorSets);
5683
5684 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
5685
5686 PostFreeDescriptorSets(device, descriptorPool, count, result);
5687
5688 return result;
5689}
5690
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005691bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005692 VkDevice device,
5693 const VkWriteDescriptorSet* pDescriptorWrites,
5694 const VkCopyDescriptorSet* pDescriptorCopies)
5695{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005696 if(pDescriptorWrites != nullptr)
5697 {
5698 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005699 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005700 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005701 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005702 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005703 }
5704 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5705 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5706 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005707 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005708 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005709 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005710 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005711 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005712 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005713 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5714 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5715 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005716 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005717 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005718 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005719 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005720 }
5721 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005722
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005723 if(pDescriptorCopies != nullptr)
5724 {
5725 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005726 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005727 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005728 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005729 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005730 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005731 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005732
5733 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005734}
5735
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005736bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005737 VkDevice device,
5738 uint32_t writeCount,
5739 uint32_t copyCount,
5740 VkResult result)
5741{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005742
5743
5744
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005745 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005746 {
5747 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005748 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5749 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005750 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005751
5752 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005753}
5754
5755VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
5756 VkDevice device,
5757 uint32_t writeCount,
5758 const VkWriteDescriptorSet* pDescriptorWrites,
5759 uint32_t copyCount,
5760 const VkCopyDescriptorSet* pDescriptorCopies)
5761{
5762 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005763
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005764 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
5765
5766 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
5767
5768 return result;
5769}
5770
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005771bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005773 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005774{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005775 if(pCreateInfo != nullptr)
5776 {
5777 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005778 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005779 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005780 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005781 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005782 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005783 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005784 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005785 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005786 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005787 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005788 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005789 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005790
5791 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005792}
5793
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005794bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005795 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005796 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005797 VkResult result)
5798{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005799
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005800 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005801 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802 }
5803
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005804 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005805 {
5806 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005807 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5808 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005809 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005810
5811 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005812}
5813
5814VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5815 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005816 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5817 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005818{
5819 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005820
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005821 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5822
5823 PostCreateDynamicViewportState(device, pState, result);
5824
5825 return result;
5826}
5827
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005828bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005829 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005830 VkDynamicViewportState dynamicViewportState,
5831 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005832{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005833
5834
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005835 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005836 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005837 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
5838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5839 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005840 }
5841
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005842 return true;
5843}
5844
5845VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
5846 VkDevice device,
5847 VkDynamicViewportState dynamicViewportState)
5848{
5849 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
5850
5851 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
5852
5853 return result;
5854}
5855
Cody Northropf5bd2252015-08-17 11:10:49 -06005856bool PreCreateDynamicRasterLineState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005857 VkDevice device,
Cody Northropf5bd2252015-08-17 11:10:49 -06005858 const VkDynamicRasterLineStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005859{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005860 if(pCreateInfo != nullptr)
5861 {
Cody Northropf5bd2252015-08-17 11:10:49 -06005862 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_RASTER_LINE_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005863 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005864 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropf5bd2252015-08-17 11:10:49 -06005865 "vkCreateDynamicRasterLineState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005866 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005867 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005868 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005869
5870 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005871}
5872
Cody Northropf5bd2252015-08-17 11:10:49 -06005873bool PostCreateDynamicRasterLineState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005874 VkDevice device,
Cody Northropf5bd2252015-08-17 11:10:49 -06005875 VkDynamicRasterLineState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005876 VkResult result)
5877{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005878
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005879 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005880 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005881 }
5882
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005883 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005884 {
Cody Northropf5bd2252015-08-17 11:10:49 -06005885 std::string reason = "vkCreateDynamicRasterLineState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005886 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5887 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005888 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005889
5890 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005891}
5892
Cody Northropf5bd2252015-08-17 11:10:49 -06005893VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterLineState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005894 VkDevice device,
Cody Northropf5bd2252015-08-17 11:10:49 -06005895 const VkDynamicRasterLineStateCreateInfo* pCreateInfo,
5896 VkDynamicRasterLineState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005897{
Cody Northropf5bd2252015-08-17 11:10:49 -06005898 PreCreateDynamicRasterLineState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005899
Cody Northropf5bd2252015-08-17 11:10:49 -06005900 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterLineState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005901
Cody Northropf5bd2252015-08-17 11:10:49 -06005902 PostCreateDynamicRasterLineState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005903
5904 return result;
5905}
5906
Cody Northropf5bd2252015-08-17 11:10:49 -06005907bool PostDestroyDynamicRasterLineState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005908 VkDevice device,
Cody Northropf5bd2252015-08-17 11:10:49 -06005909 VkDynamicRasterLineState dynamicRasterLineState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005910 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005911{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005912
5913
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005914 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005915 {
Cody Northropf5bd2252015-08-17 11:10:49 -06005916 std::string reason = "vkDestroyDynamicRasterLineState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005917 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5918 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005919 }
5920
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005921 return true;
5922}
5923
Cody Northropf5bd2252015-08-17 11:10:49 -06005924VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicRasterLineState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005925 VkDevice device,
Cody Northropf5bd2252015-08-17 11:10:49 -06005926 VkDynamicRasterLineState dynamicRasterLineState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005927{
Cody Northropf5bd2252015-08-17 11:10:49 -06005928 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicRasterLineState(device, dynamicRasterLineState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005929
Cody Northropf5bd2252015-08-17 11:10:49 -06005930 PostDestroyDynamicRasterLineState(device, dynamicRasterLineState, result);
5931
5932 return result;
5933}
5934
5935bool PreCreateDynamicRasterDepthBiasState(
5936 VkDevice device,
5937 const VkDynamicRasterDepthBiasStateCreateInfo* pCreateInfo)
5938{
5939 if(pCreateInfo != nullptr)
5940 {
5941 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_RASTER_DEPTH_BIAS_STATE_CREATE_INFO)
5942 {
5943 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5944 "vkCreateDynamicRasterDepthBiasState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5945 return false;
5946 }
5947 }
5948
5949 return true;
5950}
5951
5952bool PostCreateDynamicRasterDepthBiasState(
5953 VkDevice device,
5954 VkDynamicRasterDepthBiasState* pState,
5955 VkResult result)
5956{
5957
5958 if(pState != nullptr)
5959 {
5960 }
5961
5962 if(result < VK_SUCCESS)
5963 {
5964 std::string reason = "vkCreateDynamicRasterDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
5965 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5966 return false;
5967 }
5968
5969 return true;
5970}
5971
5972VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterDepthBiasState(
5973 VkDevice device,
5974 const VkDynamicRasterDepthBiasStateCreateInfo* pCreateInfo,
5975 VkDynamicRasterDepthBiasState* pState)
5976{
5977 PreCreateDynamicRasterDepthBiasState(device, pCreateInfo);
5978
5979 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicRasterDepthBiasState(device, pCreateInfo, pState);
5980
5981 PostCreateDynamicRasterDepthBiasState(device, pState, result);
5982
5983 return result;
5984}
5985
5986bool PostDestroyDynamicRasterDepthBiasState(
5987 VkDevice device,
5988 VkDynamicRasterDepthBiasState dynamicRasterDepthBiasState,
5989 VkResult result)
5990{
5991
5992
5993 if(result < VK_SUCCESS)
5994 {
5995 std::string reason = "vkDestroyDynamicRasterDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
5996 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5997 return false;
5998 }
5999
6000 return true;
6001}
6002
6003VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicRasterDepthBiasState(
6004 VkDevice device,
6005 VkDynamicRasterDepthBiasState dynamicRasterDepthBiasState)
6006{
6007 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicRasterDepthBiasState(device, dynamicRasterDepthBiasState);
6008
6009 PostDestroyDynamicRasterDepthBiasState(device, dynamicRasterDepthBiasState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006010
6011 return result;
6012}
6013
6014bool PreCreateDynamicColorBlendState(
6015 VkDevice device,
6016 const VkDynamicColorBlendStateCreateInfo* pCreateInfo)
6017{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006018 if(pCreateInfo != nullptr)
6019 {
6020 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_COLOR_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006021 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006022 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006023 "vkCreateDynamicColorBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006024 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006025 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006026 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006027
6028 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006029}
6030
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006031bool PostCreateDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006032 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006033 VkDynamicColorBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006034 VkResult result)
6035{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006036
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006037 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006038 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006039 }
6040
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006041 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006042 {
6043 std::string reason = "vkCreateDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006044 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6045 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006047
6048 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006049}
6050
6051VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(
6052 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006053 const VkDynamicColorBlendStateCreateInfo* pCreateInfo,
6054 VkDynamicColorBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006055{
6056 PreCreateDynamicColorBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006057
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006058 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicColorBlendState(device, pCreateInfo, pState);
6059
6060 PostCreateDynamicColorBlendState(device, pState, result);
6061
6062 return result;
6063}
6064
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006065bool PostDestroyDynamicColorBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006066 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006067 VkDynamicColorBlendState dynamicColorBlendState,
6068 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006069{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006070
6071
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006072 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006073 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006074 std::string reason = "vkDestroyDynamicColorBlendState parameter, VkResult result, is " + EnumeratorString(result);
6075 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6076 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006077 }
6078
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006079 return true;
6080}
6081
6082VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicColorBlendState(
6083 VkDevice device,
6084 VkDynamicColorBlendState dynamicColorBlendState)
6085{
6086 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicColorBlendState(device, dynamicColorBlendState);
6087
6088 PostDestroyDynamicColorBlendState(device, dynamicColorBlendState, result);
6089
6090 return result;
6091}
6092
Cody Northrop2605cb02015-08-18 15:21:16 -06006093bool PreCreateDynamicDepthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006094 VkDevice device,
Cody Northrop2605cb02015-08-18 15:21:16 -06006095 const VkDynamicDepthStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006096{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006097 if(pCreateInfo != nullptr)
6098 {
Cody Northrop2605cb02015-08-18 15:21:16 -06006099 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006100 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006101 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop2605cb02015-08-18 15:21:16 -06006102 "vkCreateDynamicDepthState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006103 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006104 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006105 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006106
6107 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006108}
6109
Cody Northrop2605cb02015-08-18 15:21:16 -06006110bool PostCreateDynamicDepthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006111 VkDevice device,
Cody Northrop2605cb02015-08-18 15:21:16 -06006112 VkDynamicDepthState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006113 VkResult result)
6114{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006115
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006116 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006117 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006118 }
6119
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006120 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006121 {
Cody Northrop2605cb02015-08-18 15:21:16 -06006122 std::string reason = "vkCreateDynamicDepthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006123 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6124 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006125 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006126
6127 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006128}
6129
Cody Northrop2605cb02015-08-18 15:21:16 -06006130VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006131 VkDevice device,
Cody Northrop2605cb02015-08-18 15:21:16 -06006132 const VkDynamicDepthStateCreateInfo* pCreateInfo,
6133 VkDynamicDepthState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006134{
Cody Northrop2605cb02015-08-18 15:21:16 -06006135 PreCreateDynamicDepthState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006136
Cody Northrop2605cb02015-08-18 15:21:16 -06006137 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006138
Cody Northrop2605cb02015-08-18 15:21:16 -06006139 PostCreateDynamicDepthState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006140
6141 return result;
6142}
6143
Cody Northrop2605cb02015-08-18 15:21:16 -06006144bool PostDestroyDynamicDepthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006145 VkDevice device,
Cody Northrop2605cb02015-08-18 15:21:16 -06006146 VkDynamicDepthState dynamicDepthState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006147 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006148{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006149 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006150 {
Cody Northrop2605cb02015-08-18 15:21:16 -06006151 std::string reason = "vkDestroyDynamicDepthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006152 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6153 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006154 }
6155
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006156 return true;
6157}
6158
Cody Northrop2605cb02015-08-18 15:21:16 -06006159VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006160 VkDevice device,
Cody Northrop2605cb02015-08-18 15:21:16 -06006161 VkDynamicDepthState dynamicDepthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006162{
Cody Northrop2605cb02015-08-18 15:21:16 -06006163 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthState(device, dynamicDepthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006164
Cody Northrop2605cb02015-08-18 15:21:16 -06006165 PostDestroyDynamicDepthState(device, dynamicDepthState, result);
6166
6167 return result;
6168}
6169
6170bool PreCreateDynamicStencilState(
6171 VkDevice device,
6172 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
6173 const VkDynamicStencilStateCreateInfo* pCreateInfoBack)
6174{
6175 if(pCreateInfoFront != nullptr)
6176 {
6177 if(pCreateInfoFront->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 pCreateInfoFront->sType, is an invalid enumerator");
6181 return false;
6182 }
6183 }
6184
6185 if(pCreateInfoBack != nullptr)
6186 {
6187 if(pCreateInfoBack->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
6188 {
6189 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6190 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoBack->sType, is an invalid enumerator");
6191 return false;
6192 }
6193 }
6194
6195 return true;
6196}
6197
6198bool PostCreateDynamicStencilState(
6199 VkDevice device,
6200 VkDynamicStencilState* pState,
6201 VkResult result)
6202{
6203
6204 if(pState != nullptr)
6205 {
6206 }
6207
6208 if(result < VK_SUCCESS)
6209 {
6210 std::string reason = "vkCreateDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6211 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6212 return false;
6213 }
6214
6215 return true;
6216}
6217
6218VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
6219 VkDevice device,
6220 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
6221 const VkDynamicStencilStateCreateInfo* pCreateInfoBack,
6222 VkDynamicStencilState* pState)
6223{
6224 PreCreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack);
6225
6226 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
6227
6228 PostCreateDynamicStencilState(device, pState, result);
6229
6230 return result;
6231}
6232
6233bool PostDestroyDynamicStencilState(
6234 VkDevice device,
6235 VkDynamicStencilState dynamicStencilState,
6236 VkResult result)
6237{
6238 if(result < VK_SUCCESS)
6239 {
6240 std::string reason = "vkDestroyDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6241 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6242 return false;
6243 }
6244
6245 return true;
6246}
6247
6248VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicStencilState(
6249 VkDevice device,
6250 VkDynamicStencilState dynamicStencilState)
6251{
6252 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicStencilState(device, dynamicStencilState);
6253
6254 PostDestroyDynamicStencilState(device, dynamicStencilState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006255
6256 return result;
6257}
6258
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006259bool PreCreateFramebuffer(
6260 VkDevice device,
6261 const VkFramebufferCreateInfo* pCreateInfo)
6262{
6263 if(pCreateInfo != nullptr)
6264 {
6265 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
6266 {
6267 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6268 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6269 return false;
6270 }
6271 if(pCreateInfo->pAttachments != nullptr)
6272 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006273 }
6274 }
6275
6276 return true;
6277}
6278
6279bool PostCreateFramebuffer(
6280 VkDevice device,
6281 VkFramebuffer* pFramebuffer,
6282 VkResult result)
6283{
6284
6285 if(pFramebuffer != nullptr)
6286 {
6287 }
6288
6289 if(result < VK_SUCCESS)
6290 {
6291 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6292 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6293 return false;
6294 }
6295
6296 return true;
6297}
6298
6299VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
6300 VkDevice device,
6301 const VkFramebufferCreateInfo* pCreateInfo,
6302 VkFramebuffer* pFramebuffer)
6303{
6304 PreCreateFramebuffer(device, pCreateInfo);
6305
6306 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
6307
6308 PostCreateFramebuffer(device, pFramebuffer, result);
6309
6310 return result;
6311}
6312
6313bool PostDestroyFramebuffer(
6314 VkDevice device,
6315 VkFramebuffer framebuffer,
6316 VkResult result)
6317{
6318
6319
6320 if(result < VK_SUCCESS)
6321 {
6322 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6323 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6324 return false;
6325 }
6326
6327 return true;
6328}
6329
6330VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
6331 VkDevice device,
6332 VkFramebuffer framebuffer)
6333{
6334 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
6335
6336 PostDestroyFramebuffer(device, framebuffer, result);
6337
6338 return result;
6339}
6340
6341bool PreCreateRenderPass(
6342 VkDevice device,
6343 const VkRenderPassCreateInfo* pCreateInfo)
6344{
6345 if(pCreateInfo != nullptr)
6346 {
6347 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
6348 {
6349 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6350 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6351 return false;
6352 }
6353 if(pCreateInfo->pAttachments != nullptr)
6354 {
6355 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
6356 {
6357 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6358 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
6359 return false;
6360 }
6361 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
6362 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
6363 {
6364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6365 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
6366 return false;
6367 }
6368 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6369 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6370 {
6371 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6372 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
6373 return false;
6374 }
6375 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6376 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6377 {
6378 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6379 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
6380 return false;
6381 }
6382 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6383 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6384 {
6385 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6386 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
6387 return false;
6388 }
6389 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6390 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6391 {
6392 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6393 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
6394 return false;
6395 }
6396 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6397 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
6398 {
6399 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6400 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
6401 return false;
6402 }
6403 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6404 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
6405 {
6406 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6407 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
6408 return false;
6409 }
6410 }
6411 if(pCreateInfo->pSubpasses != nullptr)
6412 {
6413 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
6414 {
6415 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6416 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
6417 return false;
6418 }
6419 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6420 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6421 {
6422 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6423 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
6424 return false;
6425 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006426 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006427 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006428 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6429 pCreateInfo->pSubpasses->pInputAttachments->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->pInputAttachments->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->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006437 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006438 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6439 pCreateInfo->pSubpasses->pColorAttachments->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->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006443 return false;
6444 }
6445 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006446 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006447 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006448 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6449 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006450 {
6451 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006452 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006453 return false;
6454 }
6455 }
6456 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6457 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
6458 {
6459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6460 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
6461 return false;
6462 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006463 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006464 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006465 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6466 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006467 {
6468 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006469 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006470 return false;
6471 }
6472 }
6473 }
6474 if(pCreateInfo->pDependencies != nullptr)
6475 {
6476 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
6477 {
6478 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6479 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
6480 return false;
6481 }
6482 }
6483 }
6484
6485 return true;
6486}
6487
6488bool PostCreateRenderPass(
6489 VkDevice device,
6490 VkRenderPass* pRenderPass,
6491 VkResult result)
6492{
6493
6494 if(pRenderPass != nullptr)
6495 {
6496 }
6497
6498 if(result < VK_SUCCESS)
6499 {
6500 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6501 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6502 return false;
6503 }
6504
6505 return true;
6506}
6507
6508VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
6509 VkDevice device,
6510 const VkRenderPassCreateInfo* pCreateInfo,
6511 VkRenderPass* pRenderPass)
6512{
6513 PreCreateRenderPass(device, pCreateInfo);
6514
6515 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
6516
6517 PostCreateRenderPass(device, pRenderPass, result);
6518
6519 return result;
6520}
6521
6522bool PostDestroyRenderPass(
6523 VkDevice device,
6524 VkRenderPass renderPass,
6525 VkResult result)
6526{
6527
6528
6529 if(result < VK_SUCCESS)
6530 {
6531 std::string reason = "vkDestroyRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6532 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6533 return false;
6534 }
6535
6536 return true;
6537}
6538
6539VK_LAYER_EXPORT VkResult VKAPI vkDestroyRenderPass(
6540 VkDevice device,
6541 VkRenderPass renderPass)
6542{
6543 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass);
6544
6545 PostDestroyRenderPass(device, renderPass, result);
6546
6547 return result;
6548}
6549
6550bool PostGetRenderAreaGranularity(
6551 VkDevice device,
6552 VkRenderPass renderPass,
6553 VkExtent2D* pGranularity,
6554 VkResult result)
6555{
6556
6557
6558 if(pGranularity != nullptr)
6559 {
6560 }
6561
6562 if(result < VK_SUCCESS)
6563 {
6564 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
6565 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6566 return false;
6567 }
6568
6569 return true;
6570}
6571
6572VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
6573 VkDevice device,
6574 VkRenderPass renderPass,
6575 VkExtent2D* pGranularity)
6576{
6577 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
6578
6579 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
6580
6581 return result;
6582}
6583
6584bool PreCreateCommandPool(
6585 VkDevice device,
6586 const VkCmdPoolCreateInfo* pCreateInfo)
6587{
6588 if(pCreateInfo != nullptr)
6589 {
6590 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
6591 {
6592 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6593 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6594 return false;
6595 }
6596 }
6597
6598 return true;
6599}
6600
6601bool PostCreateCommandPool(
6602 VkDevice device,
6603 VkCmdPool* pCmdPool,
6604 VkResult result)
6605{
6606
6607 if(pCmdPool != nullptr)
6608 {
6609 }
6610
6611 if(result < VK_SUCCESS)
6612 {
6613 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6614 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6615 return false;
6616 }
6617
6618 return true;
6619}
6620
6621VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
6622 VkDevice device,
6623 const VkCmdPoolCreateInfo* pCreateInfo,
6624 VkCmdPool* pCmdPool)
6625{
6626 PreCreateCommandPool(device, pCreateInfo);
6627
6628 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
6629
6630 PostCreateCommandPool(device, pCmdPool, result);
6631
6632 return result;
6633}
6634
6635bool PostDestroyCommandPool(
6636 VkDevice device,
6637 VkCmdPool cmdPool,
6638 VkResult result)
6639{
6640
6641
6642 if(result < VK_SUCCESS)
6643 {
6644 std::string reason = "vkDestroyCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6645 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6646 return false;
6647 }
6648
6649 return true;
6650}
6651
6652VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandPool(
6653 VkDevice device,
6654 VkCmdPool cmdPool)
6655{
6656 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, cmdPool);
6657
6658 PostDestroyCommandPool(device, cmdPool, result);
6659
6660 return result;
6661}
6662
6663bool PostResetCommandPool(
6664 VkDevice device,
6665 VkCmdPool cmdPool,
6666 VkCmdPoolResetFlags flags,
6667 VkResult result)
6668{
6669
6670
6671
6672 if(result < VK_SUCCESS)
6673 {
6674 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6675 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6676 return false;
6677 }
6678
6679 return true;
6680}
6681
6682VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
6683 VkDevice device,
6684 VkCmdPool cmdPool,
6685 VkCmdPoolResetFlags flags)
6686{
6687 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
6688
6689 PostResetCommandPool(device, cmdPool, flags, result);
6690
6691 return result;
6692}
6693
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006694bool PreCreateCommandBuffer(
6695 VkDevice device,
6696 const VkCmdBufferCreateInfo* pCreateInfo)
6697{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006698 if(pCreateInfo != nullptr)
6699 {
6700 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006701 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006702 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006703 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006704 return false;
6705 }
6706 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6707 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6708 {
6709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006710 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006711 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006712 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006713 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006714
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006715 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006716}
6717
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006718bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006719 VkDevice device,
6720 VkCmdBuffer* pCmdBuffer,
6721 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006722{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006723
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006724 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006725 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006726 }
6727
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006728 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729 {
6730 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006731 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6732 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006733 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006734
6735 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006736}
6737
6738VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6739 VkDevice device,
6740 const VkCmdBufferCreateInfo* pCreateInfo,
6741 VkCmdBuffer* pCmdBuffer)
6742{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006743 PreCreateCommandBuffer(device, pCreateInfo);
6744
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006745 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6746
6747 PostCreateCommandBuffer(device, pCmdBuffer, result);
6748
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006749 return result;
6750}
6751
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006752bool PostDestroyCommandBuffer(
6753 VkDevice device,
6754 VkCmdBuffer commandBuffer,
6755 VkResult result)
6756{
6757
6758
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006759 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006760 {
6761 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6762 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6763 return false;
6764 }
6765
6766 return true;
6767}
6768
6769VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6770 VkDevice device,
6771 VkCmdBuffer commandBuffer)
6772{
6773 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6774
6775 PostDestroyCommandBuffer(device, commandBuffer, result);
6776
6777 return result;
6778}
6779
6780bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006781 VkCmdBuffer cmdBuffer,
6782 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006783{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006784 if(pBeginInfo != nullptr)
6785 {
6786 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006787 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006788 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006789 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006790 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006791 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006792 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006793
6794 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006795}
6796
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006797bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006798 VkCmdBuffer cmdBuffer,
6799 VkResult result)
6800{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006801
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006802 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006803 {
6804 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006805 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6806 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006807 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006808
6809 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006810}
6811
6812VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6813 VkCmdBuffer cmdBuffer,
6814 const VkCmdBufferBeginInfo* pBeginInfo)
6815{
6816 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006817
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006818 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6819
6820 PostBeginCommandBuffer(cmdBuffer, result);
6821
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006822 return result;
6823}
6824
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006825bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006826 VkCmdBuffer cmdBuffer,
6827 VkResult result)
6828{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006829
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006830 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006831 {
6832 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006833 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6834 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006835 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006836
6837 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006838}
6839
6840VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6841 VkCmdBuffer cmdBuffer)
6842{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006843 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6844
6845 PostEndCommandBuffer(cmdBuffer, result);
6846
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006847 return result;
6848}
6849
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006850bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006851 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006852 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006853 VkResult result)
6854{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006855
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006856
6857 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006858 {
6859 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006860 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6861 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006862 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006863
6864 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006865}
6866
6867VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006868 VkCmdBuffer cmdBuffer,
6869 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006870{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006871 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006872
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006873 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006874
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006875 return result;
6876}
6877
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006878bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006879 VkCmdBuffer cmdBuffer,
6880 VkPipelineBindPoint pipelineBindPoint,
6881 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006882{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006883
6884 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6885 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6886 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006887 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006888 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006889 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006890 }
6891
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006892
6893 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006894}
6895
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006896VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6897 VkCmdBuffer cmdBuffer,
6898 VkPipelineBindPoint pipelineBindPoint,
6899 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006900{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006901 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6902
6903 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6904}
6905
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006906bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006907 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006908 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006909{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006910
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006911
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006912 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006913}
6914
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006915VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006916 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006917 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006918{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006919 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006920
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006921 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006922}
6923
Cody Northropf5bd2252015-08-17 11:10:49 -06006924bool PostCmdBindDynamicRasterLineState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006925 VkCmdBuffer cmdBuffer,
Cody Northropf5bd2252015-08-17 11:10:49 -06006926 VkDynamicRasterLineState dynamicRasterLineState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006927{
6928
6929
6930 return true;
6931}
6932
Cody Northropf5bd2252015-08-17 11:10:49 -06006933VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicRasterLineState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006934 VkCmdBuffer cmdBuffer,
Cody Northropf5bd2252015-08-17 11:10:49 -06006935 VkDynamicRasterLineState dynamicRasterLineState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006936{
Cody Northropf5bd2252015-08-17 11:10:49 -06006937 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicRasterLineState(cmdBuffer, dynamicRasterLineState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006938
Cody Northropf5bd2252015-08-17 11:10:49 -06006939 PostCmdBindDynamicRasterLineState(cmdBuffer, dynamicRasterLineState);
6940}
6941
6942bool PostCmdBindDynamicRasterDepthBiasState(
6943 VkCmdBuffer cmdBuffer,
6944 VkDynamicRasterDepthBiasState dynamicRasterDepthBiasState)
6945{
6946
6947
6948 return true;
6949}
6950
6951VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicRasterDepthBiasState(
6952 VkCmdBuffer cmdBuffer,
6953 VkDynamicRasterDepthBiasState dynamicRasterDepthBiasState)
6954{
6955 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicRasterDepthBiasState(cmdBuffer, dynamicRasterDepthBiasState);
6956
6957 PostCmdBindDynamicRasterDepthBiasState(cmdBuffer, dynamicRasterDepthBiasState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006958}
6959
6960bool PostCmdBindDynamicColorBlendState(
6961 VkCmdBuffer cmdBuffer,
6962 VkDynamicColorBlendState dynamicColorBlendState)
6963{
6964
6965
6966 return true;
6967}
6968
6969VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicColorBlendState(
6970 VkCmdBuffer cmdBuffer,
6971 VkDynamicColorBlendState dynamicColorBlendState)
6972{
6973 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6974
6975 PostCmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
6976}
6977
Cody Northrop2605cb02015-08-18 15:21:16 -06006978bool PostCmdBindDynamicDepthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006979 VkCmdBuffer cmdBuffer,
Cody Northrop2605cb02015-08-18 15:21:16 -06006980 VkDynamicDepthState dynamicDepthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006981{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006982 return true;
6983}
6984
Cody Northrop2605cb02015-08-18 15:21:16 -06006985VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006986 VkCmdBuffer cmdBuffer,
Cody Northrop2605cb02015-08-18 15:21:16 -06006987 VkDynamicDepthState dynamicDepthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006988{
Cody Northrop2605cb02015-08-18 15:21:16 -06006989 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthState(cmdBuffer, dynamicDepthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006990
Cody Northrop2605cb02015-08-18 15:21:16 -06006991 PostCmdBindDynamicDepthState(cmdBuffer, dynamicDepthState);
6992}
6993
6994bool PostCmdBindDynamicStencilState(
6995 VkCmdBuffer cmdBuffer,
6996 VkDynamicStencilState dynamicStencilState)
6997{
6998 return true;
6999}
7000
7001VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(
7002 VkCmdBuffer cmdBuffer,
7003 VkDynamicStencilState dynamicStencilState)
7004{
7005 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
7006
7007 PostCmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007008}
7009
7010bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007011 VkCmdBuffer cmdBuffer,
7012 const VkDescriptorSet* pDescriptorSets,
7013 const uint32_t* pDynamicOffsets)
7014{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007015 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007016 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007017 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007018
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007019 if(pDynamicOffsets != nullptr)
7020 {
7021 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007022
7023 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007024}
7025
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007026bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007027 VkCmdBuffer cmdBuffer,
7028 VkPipelineBindPoint pipelineBindPoint,
7029 VkPipelineLayout layout,
7030 uint32_t firstSet,
7031 uint32_t setCount,
7032 uint32_t dynamicOffsetCount)
7033{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007034
7035 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
7036 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
7037 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007038 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007039 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007040 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007041 }
7042
7043
7044
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007045
7046
7047 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007048}
7049
7050VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
7051 VkCmdBuffer cmdBuffer,
7052 VkPipelineBindPoint pipelineBindPoint,
7053 VkPipelineLayout layout,
7054 uint32_t firstSet,
7055 uint32_t setCount,
7056 const VkDescriptorSet* pDescriptorSets,
7057 uint32_t dynamicOffsetCount,
7058 const uint32_t* pDynamicOffsets)
7059{
7060 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007061
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007062 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
7063
7064 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
7065}
7066
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007067bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007068 VkCmdBuffer cmdBuffer,
7069 VkBuffer buffer,
7070 VkDeviceSize offset,
7071 VkIndexType indexType)
7072{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007073
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007074
7075
7076 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
7077 indexType > VK_INDEX_TYPE_END_RANGE)
7078 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007079 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007080 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007081 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007082 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007083
7084 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007085}
7086
7087VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
7088 VkCmdBuffer cmdBuffer,
7089 VkBuffer buffer,
7090 VkDeviceSize offset,
7091 VkIndexType indexType)
7092{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007093 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7094
7095 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7096}
7097
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007098bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007099 VkCmdBuffer cmdBuffer,
7100 const VkBuffer* pBuffers,
7101 const VkDeviceSize* pOffsets)
7102{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007103 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007104 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007105 }
7106
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007107 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007108 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007109 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007110
7111 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007112}
7113
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007114bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007115 VkCmdBuffer cmdBuffer,
7116 uint32_t startBinding,
7117 uint32_t bindingCount)
7118{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007119
7120
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007121
7122 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007123}
7124
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06007125VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007126 VkCmdBuffer cmdBuffer,
7127 uint32_t startBinding,
7128 uint32_t bindingCount,
7129 const VkBuffer* pBuffers,
7130 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007131{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007132 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007133
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007134 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
7135
7136 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007137}
7138
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007139bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007140 VkCmdBuffer cmdBuffer,
7141 uint32_t firstVertex,
7142 uint32_t vertexCount,
7143 uint32_t firstInstance,
7144 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007145{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007146
7147
7148
7149
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007150
7151 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007152}
7153
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007154VK_LAYER_EXPORT void VKAPI vkCmdDraw(
7155 VkCmdBuffer cmdBuffer,
7156 uint32_t firstVertex,
7157 uint32_t vertexCount,
7158 uint32_t firstInstance,
7159 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007160{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007161 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
7162
7163 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007164}
7165
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007166bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007167 VkCmdBuffer cmdBuffer,
7168 uint32_t firstIndex,
7169 uint32_t indexCount,
7170 int32_t vertexOffset,
7171 uint32_t firstInstance,
7172 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007173{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007174
7175
7176
7177
7178
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007179
7180 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007181}
7182
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007183VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7184 VkCmdBuffer cmdBuffer,
7185 uint32_t firstIndex,
7186 uint32_t indexCount,
7187 int32_t vertexOffset,
7188 uint32_t firstInstance,
7189 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007190{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007191 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7192
7193 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7194}
7195
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007196bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007197 VkCmdBuffer cmdBuffer,
7198 VkBuffer buffer,
7199 VkDeviceSize offset,
7200 uint32_t count,
7201 uint32_t stride)
7202{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007203
7204
7205
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007206
7207
7208 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007209}
7210
7211VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7212 VkCmdBuffer cmdBuffer,
7213 VkBuffer buffer,
7214 VkDeviceSize offset,
7215 uint32_t count,
7216 uint32_t stride)
7217{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007218 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7219
7220 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7221}
7222
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007223bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007224 VkCmdBuffer cmdBuffer,
7225 VkBuffer buffer,
7226 VkDeviceSize offset,
7227 uint32_t count,
7228 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007229{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007230
7231
7232
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007233
7234
7235 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007236}
7237
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007238VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7239 VkCmdBuffer cmdBuffer,
7240 VkBuffer buffer,
7241 VkDeviceSize offset,
7242 uint32_t count,
7243 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007244{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007245 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7246
7247 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7248}
7249
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007250bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007251 VkCmdBuffer cmdBuffer,
7252 uint32_t x,
7253 uint32_t y,
7254 uint32_t z)
7255{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007256
7257
7258
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007259
7260 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007261}
7262
7263VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7264 VkCmdBuffer cmdBuffer,
7265 uint32_t x,
7266 uint32_t y,
7267 uint32_t z)
7268{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007269 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7270
7271 PostCmdDispatch(cmdBuffer, x, y, z);
7272}
7273
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007274bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007275 VkCmdBuffer cmdBuffer,
7276 VkBuffer buffer,
7277 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007278{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007279
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007280
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007281
7282 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007283}
7284
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007285VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7286 VkCmdBuffer cmdBuffer,
7287 VkBuffer buffer,
7288 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007289{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007290 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7291
7292 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007293}
7294
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007295bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007296 VkCmdBuffer cmdBuffer,
7297 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007298{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007299 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007300 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007301 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007302
7303 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007304}
7305
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007306bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007307 VkCmdBuffer cmdBuffer,
7308 VkBuffer srcBuffer,
7309 VkBuffer destBuffer,
7310 uint32_t regionCount)
7311{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007312
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007313
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007314
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007315
7316 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007317}
7318
7319VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7320 VkCmdBuffer cmdBuffer,
7321 VkBuffer srcBuffer,
7322 VkBuffer destBuffer,
7323 uint32_t regionCount,
7324 const VkBufferCopy* pRegions)
7325{
7326 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007327
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007328 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7329
7330 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7331}
7332
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007333bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007334 VkCmdBuffer cmdBuffer,
7335 const VkImageCopy* pRegions)
7336{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007337 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007338 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007339 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7340 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7341 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007342 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007343 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007344 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007345 }
7346 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7347 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7348 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007349 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007350 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007351 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007352 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007353 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007354
7355 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007356}
7357
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007358bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007359 VkCmdBuffer cmdBuffer,
7360 VkImage srcImage,
7361 VkImageLayout srcImageLayout,
7362 VkImage destImage,
7363 VkImageLayout destImageLayout,
7364 uint32_t regionCount)
7365{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007366
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007367
7368 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7369 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7370 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007371 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007372 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007373 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007374 }
7375
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007376
7377 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7378 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7379 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007380 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007381 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007382 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007383 }
7384
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007385
7386 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007387}
7388
7389VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7390 VkCmdBuffer cmdBuffer,
7391 VkImage srcImage,
7392 VkImageLayout srcImageLayout,
7393 VkImage destImage,
7394 VkImageLayout destImageLayout,
7395 uint32_t regionCount,
7396 const VkImageCopy* pRegions)
7397{
7398 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007399
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007400 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7401
7402 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7403}
7404
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007405bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007406 VkCmdBuffer cmdBuffer,
7407 const VkImageBlit* pRegions)
7408{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007409 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007410 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007411 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7412 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7413 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007414 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007415 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007416 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007417 }
7418 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7419 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7420 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007421 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007422 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007423 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007424 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007425 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007426
7427 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007428}
7429
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007430bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007431 VkCmdBuffer cmdBuffer,
7432 VkImage srcImage,
7433 VkImageLayout srcImageLayout,
7434 VkImage destImage,
7435 VkImageLayout destImageLayout,
7436 uint32_t regionCount,
7437 VkTexFilter filter)
7438{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007439
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007440
7441 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7442 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7443 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007444 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007445 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007446 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007447 }
7448
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007449
7450 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7451 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7452 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007453 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007454 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007455 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007456 }
7457
7458
7459 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7460 filter > VK_TEX_FILTER_END_RANGE)
7461 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007462 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007463 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007464 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007465 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007466
7467 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007468}
7469
7470VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7471 VkCmdBuffer cmdBuffer,
7472 VkImage srcImage,
7473 VkImageLayout srcImageLayout,
7474 VkImage destImage,
7475 VkImageLayout destImageLayout,
7476 uint32_t regionCount,
7477 const VkImageBlit* pRegions,
7478 VkTexFilter filter)
7479{
7480 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007481
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007482 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7483
7484 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7485}
7486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007487bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007488 VkCmdBuffer cmdBuffer,
7489 const VkBufferImageCopy* pRegions)
7490{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007491 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007492 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007493 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7494 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7495 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007496 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007497 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007498 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007499 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007500 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007501
7502 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007503}
7504
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007505bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007506 VkCmdBuffer cmdBuffer,
7507 VkBuffer srcBuffer,
7508 VkImage destImage,
7509 VkImageLayout destImageLayout,
7510 uint32_t regionCount)
7511{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007512
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007513
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007514
7515 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7516 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7517 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007518 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007519 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007520 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007521 }
7522
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007523
7524 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007525}
7526
7527VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7528 VkCmdBuffer cmdBuffer,
7529 VkBuffer srcBuffer,
7530 VkImage destImage,
7531 VkImageLayout destImageLayout,
7532 uint32_t regionCount,
7533 const VkBufferImageCopy* pRegions)
7534{
7535 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007536
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007537 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7538
7539 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7540}
7541
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007542bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007543 VkCmdBuffer cmdBuffer,
7544 const VkBufferImageCopy* pRegions)
7545{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007546 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007547 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007548 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7549 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7550 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007551 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007552 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007553 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007554 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007555 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007556
7557 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007558}
7559
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007560bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007561 VkCmdBuffer cmdBuffer,
7562 VkImage srcImage,
7563 VkImageLayout srcImageLayout,
7564 VkBuffer destBuffer,
7565 uint32_t regionCount)
7566{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007567
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007568
7569 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7570 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7571 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007572 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007573 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007574 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007575 }
7576
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007577
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007578
7579 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007580}
7581
7582VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7583 VkCmdBuffer cmdBuffer,
7584 VkImage srcImage,
7585 VkImageLayout srcImageLayout,
7586 VkBuffer destBuffer,
7587 uint32_t regionCount,
7588 const VkBufferImageCopy* pRegions)
7589{
7590 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007591
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007592 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7593
7594 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7595}
7596
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007597bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007598 VkCmdBuffer cmdBuffer,
7599 const uint32_t* pData)
7600{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007601 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007602 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007603 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007604
7605 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007606}
7607
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007608bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007609 VkCmdBuffer cmdBuffer,
7610 VkBuffer destBuffer,
7611 VkDeviceSize destOffset,
7612 VkDeviceSize dataSize)
7613{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007614
7615
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007616
7617
7618 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007619}
7620
7621VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7622 VkCmdBuffer cmdBuffer,
7623 VkBuffer destBuffer,
7624 VkDeviceSize destOffset,
7625 VkDeviceSize dataSize,
7626 const uint32_t* pData)
7627{
7628 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007629
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007630 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7631
7632 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7633}
7634
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007635bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007636 VkCmdBuffer cmdBuffer,
7637 VkBuffer destBuffer,
7638 VkDeviceSize destOffset,
7639 VkDeviceSize fillSize,
7640 uint32_t data)
7641{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007642
7643
7644
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007645
7646
7647 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007648}
7649
7650VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7651 VkCmdBuffer cmdBuffer,
7652 VkBuffer destBuffer,
7653 VkDeviceSize destOffset,
7654 VkDeviceSize fillSize,
7655 uint32_t data)
7656{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007657 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7658
7659 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7660}
7661
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007662bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007663 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007664 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007665 const VkImageSubresourceRange* pRanges)
7666{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007667 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007668 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007669 }
7670
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007671 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007672 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007673 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7674 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7675 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007676 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007677 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007678 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007679 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007680 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007681
7682 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007683}
7684
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007685bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007686 VkCmdBuffer cmdBuffer,
7687 VkImage image,
7688 VkImageLayout imageLayout,
7689 uint32_t rangeCount)
7690{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007691
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007692
7693 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7694 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7695 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007696 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007697 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007698 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007699 }
7700
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007701
7702 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007703}
7704
7705VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7706 VkCmdBuffer cmdBuffer,
7707 VkImage image,
7708 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007709 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007710 uint32_t rangeCount,
7711 const VkImageSubresourceRange* pRanges)
7712{
7713 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007714
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007715 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7716
7717 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7718}
7719
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007720bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007721 VkCmdBuffer cmdBuffer,
7722 const VkImageSubresourceRange* pRanges)
7723{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007724 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007725 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007726 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7727 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7728 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007729 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007730 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007731 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007732 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007733 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007734
7735 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007736}
7737
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007738bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007739 VkCmdBuffer cmdBuffer,
7740 VkImage image,
7741 VkImageLayout imageLayout,
7742 float depth,
7743 uint32_t stencil,
7744 uint32_t rangeCount)
7745{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007746
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007747
7748 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7749 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7750 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007751 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007752 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007753 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007754 }
7755
7756
7757
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007758
7759 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007760}
7761
Chris Forbes2951d7d2015-06-22 17:21:59 +12007762VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007763 VkCmdBuffer cmdBuffer,
7764 VkImage image,
7765 VkImageLayout imageLayout,
7766 float depth,
7767 uint32_t stencil,
7768 uint32_t rangeCount,
7769 const VkImageSubresourceRange* pRanges)
7770{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007771 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007772
Chris Forbes2951d7d2015-06-22 17:21:59 +12007773 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007774
Chris Forbes2951d7d2015-06-22 17:21:59 +12007775 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007776}
7777
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007778bool PreCmdClearColorAttachment(
7779 VkCmdBuffer cmdBuffer,
7780 const VkClearColorValue* pColor,
7781 const VkRect3D* pRects)
7782{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007783 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007784 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007785 }
7786
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007787 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007788 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007789 }
7790
7791 return true;
7792}
7793
7794bool PostCmdClearColorAttachment(
7795 VkCmdBuffer cmdBuffer,
7796 uint32_t colorAttachment,
7797 VkImageLayout imageLayout,
7798 uint32_t rectCount)
7799{
7800
7801
7802 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7803 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7804 {
7805 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007806 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007807 return false;
7808 }
7809
7810
7811 return true;
7812}
7813
7814VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7815 VkCmdBuffer cmdBuffer,
7816 uint32_t colorAttachment,
7817 VkImageLayout imageLayout,
7818 const VkClearColorValue* pColor,
7819 uint32_t rectCount,
7820 const VkRect3D* pRects)
7821{
7822 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7823
7824 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7825
7826 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7827}
7828
7829bool PreCmdClearDepthStencilAttachment(
7830 VkCmdBuffer cmdBuffer,
7831 const VkRect3D* pRects)
7832{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007833 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007834 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007835 }
7836
7837 return true;
7838}
7839
7840bool PostCmdClearDepthStencilAttachment(
7841 VkCmdBuffer cmdBuffer,
7842 VkImageAspectFlags imageAspectMask,
7843 VkImageLayout imageLayout,
7844 float depth,
7845 uint32_t stencil,
7846 uint32_t rectCount)
7847{
7848
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007849
7850 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7851 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7852 {
7853 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007854 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007855 return false;
7856 }
7857
7858
7859
7860
7861 return true;
7862}
7863
7864VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7865 VkCmdBuffer cmdBuffer,
7866 VkImageAspectFlags imageAspectMask,
7867 VkImageLayout imageLayout,
7868 float depth,
7869 uint32_t stencil,
7870 uint32_t rectCount,
7871 const VkRect3D* pRects)
7872{
7873 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7874
7875 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7876
7877 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7878}
7879
7880bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007881 VkCmdBuffer cmdBuffer,
7882 const VkImageResolve* pRegions)
7883{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007884 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007885 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007886 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7887 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7888 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007889 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007890 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007891 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007892 }
7893 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7894 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7895 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007896 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007897 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007898 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007899 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007900 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007901
7902 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007903}
7904
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007905bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007906 VkCmdBuffer cmdBuffer,
7907 VkImage srcImage,
7908 VkImageLayout srcImageLayout,
7909 VkImage destImage,
7910 VkImageLayout destImageLayout,
7911 uint32_t regionCount)
7912{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007913
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007914
7915 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7916 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7917 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007918 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007919 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007920 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007921 }
7922
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007923
7924 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7925 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7926 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007927 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007928 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007929 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007930 }
7931
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007932
7933 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007934}
7935
7936VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7937 VkCmdBuffer cmdBuffer,
7938 VkImage srcImage,
7939 VkImageLayout srcImageLayout,
7940 VkImage destImage,
7941 VkImageLayout destImageLayout,
7942 uint32_t regionCount,
7943 const VkImageResolve* pRegions)
7944{
7945 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007946
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007947 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7948
7949 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7950}
7951
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007952bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007953 VkCmdBuffer cmdBuffer,
7954 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007955 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007956{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007957
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007958
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007959
7960 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007961}
7962
7963VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7964 VkCmdBuffer cmdBuffer,
7965 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007966 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007967{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007968 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007969
Tony Barbourc2e987e2015-06-29 16:20:35 -06007970 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007971}
7972
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007973bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007974 VkCmdBuffer cmdBuffer,
7975 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007976 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007977{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007978
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007979
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007980
7981 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007982}
7983
7984VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7985 VkCmdBuffer cmdBuffer,
7986 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007987 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007988{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007989 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007990
Tony Barbourc2e987e2015-06-29 16:20:35 -06007991 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007992}
7993
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007994bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007995 VkCmdBuffer cmdBuffer,
7996 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007997 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007998{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007999 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008000 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008001 }
8002
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008003 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008004 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008005 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008006
8007 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008008}
8009
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008010bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008011 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008012 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008013 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008014 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008015 uint32_t memBarrierCount)
8016{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008017
Tony Barbourc2e987e2015-06-29 16:20:35 -06008018
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008019
8020
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008021
8022 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008023}
8024
8025VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
8026 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008027 uint32_t eventCount,
8028 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008029 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008030 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008031 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06008032 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008033{
8034 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008035
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008036 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008037
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008038 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008039}
8040
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008041bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008042 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008043 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008044{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008045 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008046 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008047 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008048
8049 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008050}
8051
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008052bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008053 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008054 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008055 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06008056 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008057 uint32_t memBarrierCount)
8058{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008059
Tony Barbourc2e987e2015-06-29 16:20:35 -06008060
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008061
8062
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008063
8064 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008065}
8066
8067VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
8068 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008069 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06008070 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06008071 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008072 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008073 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008074{
Tony Barbourc2e987e2015-06-29 16:20:35 -06008075 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008076
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008077 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008078
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06008079 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008080}
8081
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008082bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008083 VkCmdBuffer cmdBuffer,
8084 VkQueryPool queryPool,
8085 uint32_t slot,
8086 VkQueryControlFlags flags)
8087{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008088
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008089
8090
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008091
8092 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008093}
8094
8095VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
8096 VkCmdBuffer cmdBuffer,
8097 VkQueryPool queryPool,
8098 uint32_t slot,
8099 VkQueryControlFlags flags)
8100{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008101 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8102
8103 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8104}
8105
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008106bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008107 VkCmdBuffer cmdBuffer,
8108 VkQueryPool queryPool,
8109 uint32_t slot)
8110{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008111
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008112
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008113
8114 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008115}
8116
8117VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
8118 VkCmdBuffer cmdBuffer,
8119 VkQueryPool queryPool,
8120 uint32_t slot)
8121{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008122 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
8123
8124 PostCmdEndQuery(cmdBuffer, queryPool, slot);
8125}
8126
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008127bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008128 VkCmdBuffer cmdBuffer,
8129 VkQueryPool queryPool,
8130 uint32_t startQuery,
8131 uint32_t queryCount)
8132{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008133
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008134
8135
8136
8137 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008138}
8139
8140VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8141 VkCmdBuffer cmdBuffer,
8142 VkQueryPool queryPool,
8143 uint32_t startQuery,
8144 uint32_t queryCount)
8145{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008146 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8147
8148 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8149}
8150
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008151bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008152 VkCmdBuffer cmdBuffer,
8153 VkTimestampType timestampType,
8154 VkBuffer destBuffer,
8155 VkDeviceSize destOffset)
8156{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008157
8158 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8159 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8160 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008161 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008162 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008163 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008164 }
8165
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008166
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008167
8168 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008169}
8170
8171VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8172 VkCmdBuffer cmdBuffer,
8173 VkTimestampType timestampType,
8174 VkBuffer destBuffer,
8175 VkDeviceSize destOffset)
8176{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008177 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8178
8179 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8180}
8181
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008182bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008183 VkCmdBuffer cmdBuffer,
8184 VkQueryPool queryPool,
8185 uint32_t startQuery,
8186 uint32_t queryCount,
8187 VkBuffer destBuffer,
8188 VkDeviceSize destOffset,
8189 VkDeviceSize destStride,
8190 VkQueryResultFlags flags)
8191{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008192
8193
8194
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008195
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008196
8197
8198
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008199
8200 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008201}
8202
Jeremy Hayescf469132015-04-17 10:36:53 -06008203VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008204 VkCmdBuffer cmdBuffer,
8205 VkQueryPool queryPool,
8206 uint32_t startQuery,
8207 uint32_t queryCount,
8208 VkBuffer destBuffer,
8209 VkDeviceSize destOffset,
8210 VkDeviceSize destStride,
8211 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06008212{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008213 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8214
8215 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06008216}
8217
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008218bool PreCmdPushConstants(
8219 VkCmdBuffer cmdBuffer,
8220 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008221{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008222 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008223 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008224 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008225
8226 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008227}
8228
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008229bool PostCmdPushConstants(
8230 VkCmdBuffer cmdBuffer,
8231 VkPipelineLayout layout,
8232 VkShaderStageFlags stageFlags,
8233 uint32_t start,
8234 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008235{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008236
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008237
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008238
8239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008240
8241 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008242}
8243
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008244VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
8245 VkCmdBuffer cmdBuffer,
8246 VkPipelineLayout layout,
8247 VkShaderStageFlags stageFlags,
8248 uint32_t start,
8249 uint32_t length,
8250 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008251{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008252 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008253
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008254 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008255
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008256 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008257}
8258
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008259bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008260 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008261 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008262{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008263 if(pRenderPassBegin != nullptr)
8264 {
8265 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008266 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008267 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008268 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008269 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008270 }
Cody Northropc332eef2015-08-04 11:51:03 -06008271 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008272 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008273 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06008274 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008275
8276 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008277}
8278
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008279bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008280 VkCmdBuffer cmdBuffer,
8281 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008282{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008283
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008284 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8285 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
8286 {
8287 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8288 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8289 return false;
8290 }
8291
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008292 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008293}
8294
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008295VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8296 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008297 const VkRenderPassBeginInfo* pRenderPassBegin,
8298 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008299{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008300 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8301
Chia-I Wuc278df82015-07-07 11:50:03 +08008302 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008303
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008304 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008305}
8306
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008307bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08008308 VkCmdBuffer cmdBuffer,
8309 VkRenderPassContents contents)
8310{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008311
8312 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008313 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008314 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008315 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008316 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8317 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008318 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008319
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008320 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08008321}
8322
8323VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8324 VkCmdBuffer cmdBuffer,
8325 VkRenderPassContents contents)
8326{
Chia-I Wuc278df82015-07-07 11:50:03 +08008327 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8328
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008329 PostCmdNextSubpass(cmdBuffer, contents);
8330}
8331
8332bool PostCmdEndRenderPass(
8333 VkCmdBuffer cmdBuffer)
8334{
8335
8336 return true;
8337}
8338
8339VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
8340 VkCmdBuffer cmdBuffer)
8341{
8342 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8343
8344 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08008345}
8346
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008347bool PreCmdExecuteCommands(
8348 VkCmdBuffer cmdBuffer,
8349 const VkCmdBuffer* pCmdBuffers)
8350{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008351 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008352 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008353 }
8354
8355 return true;
8356}
8357
8358bool PostCmdExecuteCommands(
8359 VkCmdBuffer cmdBuffer,
8360 uint32_t cmdBuffersCount)
8361{
8362
8363
8364 return true;
8365}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008366
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008367VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008368 VkCmdBuffer cmdBuffer,
8369 uint32_t cmdBuffersCount,
8370 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008371{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008372 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8373
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008374 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8375
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008376 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008377}
8378
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008379VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008380{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008381 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008382 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008383 }
8384
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008385 /* loader uses this to force layer initialization; device object is wrapped */
8386 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008387 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008388 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008389 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008390
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008391 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008392 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008393 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008394 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008395 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008396 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008397 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008398 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008399 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008400 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008401 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008402 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008403 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008404 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008405 if (!strcmp(funcName, "vkFreeMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008406 return (PFN_vkVoidFunction) vkFreeMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008407 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008408 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008409 if (!strcmp(funcName, "vkUnmapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008410 return (PFN_vkVoidFunction) vkUnmapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008411 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008412 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008413 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008414 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008415 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008416 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008417 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008418 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008419 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008420 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008421 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008422 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008423 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008424 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008425 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008426 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008427 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008428 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008429 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008430 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008431 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008432 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008433 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008434 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008435 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008436 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008437 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008438 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008439 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008440 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008441 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008442 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008443 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008444 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008445 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008446 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008447 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008448 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008449 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008450 return (PFN_vkVoidFunction) vkCreateImageView;
Chia-I Wuc278df82015-07-07 11:50:03 +08008451 if (!strcmp(funcName, "vkCreateAttachmentView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008452 return (PFN_vkVoidFunction) vkCreateAttachmentView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008453 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008454 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008455 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008456 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008457 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008458 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008459 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008460 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008461 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008462 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008463 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008464 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008465 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008466 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008467 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008468 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008469 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008470 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008471 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008472 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Cody Northropf5bd2252015-08-17 11:10:49 -06008473 if (!strcmp(funcName, "vkCreateDynamicRasterLineState"))
8474 return (PFN_vkVoidFunction) vkCreateDynamicRasterLineState;
8475 if (!strcmp(funcName, "vkCreateDynamicRasterDepthBiasState"))
8476 return (PFN_vkVoidFunction) vkCreateDynamicRasterDepthBiasState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008477 if (!strcmp(funcName, "vkCreateDynamicColorBlendState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008478 return (PFN_vkVoidFunction) vkCreateDynamicColorBlendState;
Cody Northrop2605cb02015-08-18 15:21:16 -06008479 if (!strcmp(funcName, "vkCreateDynamicDepthState"))
8480 return (PFN_vkVoidFunction) vkCreateDynamicDepthState;
8481 if (!strcmp(funcName, "vkCreateDynamicStencilState"))
8482 return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008483 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008484 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008485 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008486 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008487 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008488 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008489 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008490 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008491 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008492 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008493 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008494 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008495 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008496 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008497 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008498 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008499 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008500 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008501 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008502 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008503 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008504 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008505 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008506 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008507 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008508 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008509 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008510 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008511 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008512 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008513 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008514 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008515 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008516 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008517 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008518 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008519 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008520 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008521 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008522 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008523 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008524 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008525 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008526 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008527 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008528 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008529 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008530 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008531 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008532 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008533 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008534 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008535 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008536 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008537 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008538 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008539 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008540 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008541 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008542 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008543 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008544 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008545 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008546 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008547 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008548 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008549 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008550 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008551 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008552 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008553 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008554 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008555
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008556 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008557 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008558 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008559 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008560 }
8561}
8562
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008563VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008564{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008565 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008566 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008567 }
8568
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008569 /* loader uses this to force layer initialization; instance object is wrapped */
8570 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008571 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008572 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008573 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008574
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008575 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008576 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008577 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008578 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008579 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008580 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008581 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008582 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008583 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008584 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06008585 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008586 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008587 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008588 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008589 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008590 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008591 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008592 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008593 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008594 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008595 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008596 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008597
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008598 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008599 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008600 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008601 return fptr;
8602
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008603 {
8604 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8605 return NULL;
8606 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8607 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008608}