blob: f52e0478acf63670ba4cea3d5c1447c937d1ab1b [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <iostream>
30#include <string>
31#include <sstream>
Mark Lobodzinski3723c512015-05-26 10:58:40 -050032#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060033#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060034
Tobin Ehlis7a51d902015-07-03 10:34:49 -060035#include "vk_loader_platform.h"
Tobin Ehlis2d1d9702015-07-03 09:42:57 -060036#include "vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060037#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060038#include "vk_enum_validate_helper.h"
39#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060040//The following is #included again to catch certain OS-specific functions being used:
Tobin Ehlis7a51d902015-07-03 10:34:49 -060041#include "vk_loader_platform.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060042
Tobin Ehlis56d204a2015-07-03 10:15:26 -060043#include "vk_layer_table.h"
44#include "vk_layer_data.h"
45#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060046#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060047
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060048typedef struct _layer_data {
49 debug_report_data *report_data;
50 VkDbgMsgCallback logging_callback;
51} layer_data;
Mark Lobodzinski3723c512015-05-26 10:58:40 -050052
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060053static std::unordered_map<void*, layer_data*> layer_data_map;
54static device_table_map pc_device_table_map;
55static instance_table_map pc_instance_table_map;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060056
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060057// "my instance data"
58debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060059{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060060 dispatch_key key = get_dispatch_key(object);
61 layer_data *data = get_my_data_ptr(get_dispatch_key(object), layer_data_map);
62#if DISPATCH_MAP_DEBUG
63 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
64#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060065 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060066
67 return data->report_data;
68}
69
70// "my device data"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060071debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060072{
73 dispatch_key key = get_dispatch_key(object);
74 layer_data *data = get_my_data_ptr(key, layer_data_map);
75#if DISPATCH_MAP_DEBUG
76 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
77#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060078 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060079 return data->report_data;
80}
81
82static void InitParamChecker(layer_data *data)
83{
84 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
85
86 uint32_t debug_action = 0;
87 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
88 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
89 {
90 FILE *log_output = NULL;
91 const char* option_str = getLayerOption("ParamCheckerLogFilename");
92 if(option_str)
93 {
94 log_output = fopen(option_str, "w");
95 }
96 if(log_output == NULL)
97 {
98 log_output = stdout;
99 }
100
101 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void*)log_output, &data->logging_callback);
102 }
103}
104
105VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
106 VkInstance instance,
107 VkFlags msgFlags,
108 const PFN_vkDbgMsgCallback pfnMsgCallback,
109 void* pUserData,
110 VkDbgMsgCallback* pMsgCallback)
111{
112 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
113 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
114
115 if (result == VK_SUCCESS)
116 {
117 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
118 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
119 }
120
121 return result;
122}
123
124VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
125 VkInstance instance,
126 VkDbgMsgCallback msgCallback)
127{
128 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
129 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
130
131 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
132 layer_destroy_msg_callback(data->report_data, msgCallback);
133
134 return result;
135}
136
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600137static const VkLayerProperties pc_global_layers[] = {
138 {
139 "ParamChecker",
140 VK_API_VERSION,
141 VK_MAKE_VERSION(0, 1, 0),
142 "Validation layer: ParamChecker",
143 }
144};
Tony Barbour426b9052015-06-24 16:06:58 -0600145
146VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600147 const char *pLayerName,
148 uint32_t *pCount,
149 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600150{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600151 /* ParamChecker does not have any global extensions */
152 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600153}
154
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600155VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties(
156 uint32_t *pCount,
157 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600158{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600159 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
160 pc_global_layers,
161 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600162}
163
164VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600165 VkPhysicalDevice physicalDevice,
166 const char* pLayerName,
167 uint32_t* pCount,
168 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600169{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600170 /* ParamChecker does not have any physical device extensions */
171 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayescf469132015-04-17 10:36:53 -0600172}
173
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600174VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
175 VkPhysicalDevice physicalDevice,
176 uint32_t* pCount,
177 VkLayerProperties* pProperties)
178{
179 /* ParamChecker's physical device layers are the same as global */
180 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
181 pCount, pProperties);
182}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600183
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600184// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600185
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600186static
187std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600188{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600189 switch(enumerator)
190 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600191 case VK_RESULT_MAX_ENUM:
192 {
193 return "VK_RESULT_MAX_ENUM";
194 break;
195 }
196 case VK_ERROR_INVALID_LAYER:
197 {
198 return "VK_ERROR_INVALID_LAYER";
199 break;
200 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600201 case VK_ERROR_MEMORY_NOT_BOUND:
202 {
203 return "VK_ERROR_MEMORY_NOT_BOUND";
204 break;
205 }
206 case VK_ERROR_BUILDING_COMMAND_BUFFER:
207 {
208 return "VK_ERROR_BUILDING_COMMAND_BUFFER";
209 break;
210 }
211 case VK_ERROR_INCOMPATIBLE_DRIVER:
212 {
213 return "VK_ERROR_INCOMPATIBLE_DRIVER";
214 break;
215 }
216 case VK_ERROR_MEMORY_UNMAP_FAILED:
217 {
218 return "VK_ERROR_MEMORY_UNMAP_FAILED";
219 break;
220 }
221 case VK_ERROR_MEMORY_MAP_FAILED:
222 {
223 return "VK_ERROR_MEMORY_MAP_FAILED";
224 break;
225 }
226 case VK_ERROR_BAD_PIPELINE_DATA:
227 {
228 return "VK_ERROR_BAD_PIPELINE_DATA";
229 break;
230 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600231 case VK_ERROR_INVALID_QUEUE_TYPE:
232 {
233 return "VK_ERROR_INVALID_QUEUE_TYPE";
234 break;
235 }
236 case VK_ERROR_BAD_SHADER_CODE:
237 {
238 return "VK_ERROR_BAD_SHADER_CODE";
239 break;
240 }
241 case VK_ERROR_INVALID_IMAGE:
242 {
243 return "VK_ERROR_INVALID_IMAGE";
244 break;
245 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600246 case VK_ERROR_INVALID_FORMAT:
247 {
248 return "VK_ERROR_INVALID_FORMAT";
249 break;
250 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600251 case VK_ERROR_UNAVAILABLE:
252 {
253 return "VK_ERROR_UNAVAILABLE";
254 break;
255 }
256 case VK_INCOMPLETE:
257 {
258 return "VK_INCOMPLETE";
259 break;
260 }
261 case VK_ERROR_OUT_OF_HOST_MEMORY:
262 {
263 return "VK_ERROR_OUT_OF_HOST_MEMORY";
264 break;
265 }
266 case VK_ERROR_UNKNOWN:
267 {
268 return "VK_ERROR_UNKNOWN";
269 break;
270 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600271 case VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION:
272 {
273 return "VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION";
274 break;
275 }
276 case VK_ERROR_INITIALIZATION_FAILED:
277 {
278 return "VK_ERROR_INITIALIZATION_FAILED";
279 break;
280 }
281 case VK_NOT_READY:
282 {
283 return "VK_NOT_READY";
284 break;
285 }
286 case VK_ERROR_INVALID_POINTER:
287 {
288 return "VK_ERROR_INVALID_POINTER";
289 break;
290 }
291 case VK_ERROR_INVALID_VALUE:
292 {
293 return "VK_ERROR_INVALID_VALUE";
294 break;
295 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600296 case VK_ERROR_NOT_MAPPABLE:
297 {
298 return "VK_ERROR_NOT_MAPPABLE";
299 break;
300 }
301 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
302 {
303 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
304 break;
305 }
306 case VK_EVENT_SET:
307 {
308 return "VK_EVENT_SET";
309 break;
310 }
311 case VK_TIMEOUT:
312 {
313 return "VK_TIMEOUT";
314 break;
315 }
316 case VK_ERROR_INVALID_FLAGS:
317 {
318 return "VK_ERROR_INVALID_FLAGS";
319 break;
320 }
321 case VK_EVENT_RESET:
322 {
323 return "VK_EVENT_RESET";
324 break;
325 }
326 case VK_ERROR_INVALID_DESCRIPTOR_SET_DATA:
327 {
328 return "VK_ERROR_INVALID_DESCRIPTOR_SET_DATA";
329 break;
330 }
331 case VK_UNSUPPORTED:
332 {
333 return "VK_UNSUPPORTED";
334 break;
335 }
336 case VK_ERROR_INVALID_HANDLE:
337 {
338 return "VK_ERROR_INVALID_HANDLE";
339 break;
340 }
341 case VK_ERROR_INCOMPATIBLE_DEVICE:
342 {
343 return "VK_ERROR_INCOMPATIBLE_DEVICE";
344 break;
345 }
346 case VK_SUCCESS:
347 {
348 return "VK_SUCCESS";
349 break;
350 }
351 case VK_ERROR_INCOMPATIBLE_QUEUE:
352 {
353 return "VK_ERROR_INCOMPATIBLE_QUEUE";
354 break;
355 }
356 case VK_ERROR_INVALID_EXTENSION:
357 {
358 return "VK_ERROR_INVALID_EXTENSION";
359 break;
360 }
361 case VK_ERROR_DEVICE_ALREADY_CREATED:
362 {
363 return "VK_ERROR_DEVICE_ALREADY_CREATED";
364 break;
365 }
366 case VK_ERROR_DEVICE_LOST:
367 {
368 return "VK_ERROR_DEVICE_LOST";
369 break;
370 }
371 case VK_ERROR_INVALID_ORDINAL:
372 {
373 return "VK_ERROR_INVALID_ORDINAL";
374 break;
375 }
376 case VK_ERROR_INVALID_MEMORY_SIZE:
377 {
378 return "VK_ERROR_INVALID_MEMORY_SIZE";
379 break;
380 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600381 case VK_ERROR_INCOMPLETE_COMMAND_BUFFER:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600382 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600383 return "VK_ERROR_INCOMPLETE_COMMAND_BUFFER";
384 break;
385 }
386 case VK_ERROR_INVALID_ALIGNMENT:
387 {
388 return "VK_ERROR_INVALID_ALIGNMENT";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600389 break;
390 }
391 default:
392 {
393 return "unrecognized enumerator";
394 break;
395 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600396 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600397}
398
399static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600400bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
401{
402 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(VK_FORMAT_FEATURE_CONVERSION_BIT |
403 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
404 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
405 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
406 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
407 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
408 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
409 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
410 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
411 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600412 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
413 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
414 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600415 if(enumerator & (~allFlags))
416 {
417 return false;
418 }
419
420 return true;
421}
422
423static
424std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
425{
426 if(!ValidateEnumerator(enumerator))
427 {
428 return "unrecognized enumerator";
429 }
430
431 std::vector<std::string> strings;
432 if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT)
433 {
434 strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT");
435 }
436 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
437 {
438 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
439 }
440 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
441 {
442 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
443 }
444 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
445 {
446 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
447 }
448 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
449 {
450 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
451 }
452 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
453 {
454 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
455 }
456 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
457 {
458 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
459 }
460 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
461 {
462 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
463 }
464 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
465 {
466 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
467 }
468 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
469 {
470 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
471 }
472 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
473 {
474 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
475 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600476 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
477 {
478 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
479 }
480 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
481 {
482 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
483 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600484
485 std::string enumeratorString;
486 for(auto const& string : strings)
487 {
488 enumeratorString += string;
489
490 if(string != strings.back())
491 {
492 enumeratorString += '|';
493 }
494 }
495
496 return enumeratorString;
497}
498
499static
500bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
501{
502 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
503 VK_IMAGE_USAGE_DEPTH_STENCIL_BIT |
504 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
505 VK_IMAGE_USAGE_STORAGE_BIT |
506 VK_IMAGE_USAGE_SAMPLED_BIT |
507 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
508 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600509 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600510 if(enumerator & (~allFlags))
511 {
512 return false;
513 }
514
515 return true;
516}
517
518static
519std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
520{
521 if(!ValidateEnumerator(enumerator))
522 {
523 return "unrecognized enumerator";
524 }
525
526 std::vector<std::string> strings;
527 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
528 {
529 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
530 }
531 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
532 {
533 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
534 }
535 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
536 {
537 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
538 }
539 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
540 {
541 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
542 }
543 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
544 {
545 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
546 }
547 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
548 {
549 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
550 }
551 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
552 {
553 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
554 }
555 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
556 {
557 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
558 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600559
560 std::string enumeratorString;
561 for(auto const& string : strings)
562 {
563 enumeratorString += string;
564
565 if(string != strings.back())
566 {
567 enumeratorString += '|';
568 }
569 }
570
571 return enumeratorString;
572}
573
574static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600575bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
576{
577 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
578 VK_QUEUE_DMA_BIT |
579 VK_QUEUE_COMPUTE_BIT |
580 VK_QUEUE_SPARSE_MEMMGR_BIT |
581 VK_QUEUE_GRAPHICS_BIT);
582 if(enumerator & (~allFlags))
583 {
584 return false;
585 }
586
587 return true;
588}
589
590static
591std::string EnumeratorString(VkQueueFlagBits const& enumerator)
592{
593 if(!ValidateEnumerator(enumerator))
594 {
595 return "unrecognized enumerator";
596 }
597
598 std::vector<std::string> strings;
599 if(enumerator & VK_QUEUE_EXTENDED_BIT)
600 {
601 strings.push_back("VK_QUEUE_EXTENDED_BIT");
602 }
603 if(enumerator & VK_QUEUE_DMA_BIT)
604 {
605 strings.push_back("VK_QUEUE_DMA_BIT");
606 }
607 if(enumerator & VK_QUEUE_COMPUTE_BIT)
608 {
609 strings.push_back("VK_QUEUE_COMPUTE_BIT");
610 }
611 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
612 {
613 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
614 }
615 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
616 {
617 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
618 }
619
620 std::string enumeratorString;
621 for(auto const& string : strings)
622 {
623 enumeratorString += string;
624
625 if(string != strings.back())
626 {
627 enumeratorString += '|';
628 }
629 }
630
631 return enumeratorString;
632}
633
634static
635bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
636{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600637 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
638 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600639 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
640 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
641 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
642 VK_MEMORY_PROPERTY_DEVICE_ONLY);
643 if(enumerator & (~allFlags))
644 {
645 return false;
646 }
647
648 return true;
649}
650
651static
652std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
653{
654 if(!ValidateEnumerator(enumerator))
655 {
656 return "unrecognized enumerator";
657 }
658
659 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600660 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
661 {
662 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
663 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600664 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
665 {
666 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
667 }
668 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
669 {
670 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
671 }
672 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
673 {
674 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
675 }
676 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
677 {
678 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
679 }
680 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
681 {
682 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
683 }
684
685 std::string enumeratorString;
686 for(auto const& string : strings)
687 {
688 enumeratorString += string;
689
690 if(string != strings.back())
691 {
692 enumeratorString += '|';
693 }
694 }
695
696 return enumeratorString;
697}
698
699static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600700bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600701{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600702 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600703 if(enumerator & (~allFlags))
704 {
705 return false;
706 }
707
708 return true;
709}
710
711static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600712std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600713{
714 if(!ValidateEnumerator(enumerator))
715 {
716 return "unrecognized enumerator";
717 }
718
719 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600720 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600721 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600722 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600723 }
724
725 std::string enumeratorString;
726 for(auto const& string : strings)
727 {
728 enumeratorString += string;
729
730 if(string != strings.back())
731 {
732 enumeratorString += '|';
733 }
734 }
735
736 return enumeratorString;
737}
738
739static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600740bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
741{
742 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
743 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
744 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
745 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600746 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600747 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600748 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600749
750 return true;
751}
752
753static
754std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
755{
756 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600757 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600758 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600759 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600760
761 std::vector<std::string> strings;
762 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600763 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600764 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600765 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600766 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600767 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600768 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600769 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600770 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600771 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600772 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600773 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600774
775 std::string enumeratorString;
776 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600777 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600778 enumeratorString += string;
779
780 if(string != strings.back())
781 {
782 enumeratorString += '|';
783 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600784 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600785
786 return enumeratorString;
787}
788
789static
790bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
791{
792 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
793 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600794 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600795 return false;
796 }
797
798 return true;
799}
800
801static
802std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
803{
804 if(!ValidateEnumerator(enumerator))
805 {
806 return "unrecognized enumerator";
807 }
808
809 std::vector<std::string> strings;
810 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
811 {
812 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
813 }
814
815 std::string enumeratorString;
816 for(auto const& string : strings)
817 {
818 enumeratorString += string;
819
820 if(string != strings.back())
821 {
822 enumeratorString += '|';
823 }
824 }
825
826 return enumeratorString;
827}
828
829static
830bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
831{
832 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
833 if(enumerator & (~allFlags))
834 {
835 return false;
836 }
837
838 return true;
839}
840
841static
842std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
843{
844 if(!ValidateEnumerator(enumerator))
845 {
846 return "unrecognized enumerator";
847 }
848
849 std::vector<std::string> strings;
850 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
851 {
852 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
853 }
854
855 std::string enumeratorString;
856 for(auto const& string : strings)
857 {
858 enumeratorString += string;
859
860 if(string != strings.back())
861 {
862 enumeratorString += '|';
863 }
864 }
865
866 return enumeratorString;
867}
868
869static
870bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
871{
872 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
873 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
874 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
875 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
876 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
877 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
878 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
879 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
880 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
881 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
882 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
883 if(enumerator & (~allFlags))
884 {
885 return false;
886 }
887
888 return true;
889}
890
891static
892std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
893{
894 if(!ValidateEnumerator(enumerator))
895 {
896 return "unrecognized enumerator";
897 }
898
899 std::vector<std::string> strings;
900 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
901 {
902 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
903 }
904 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
905 {
906 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
907 }
908 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
909 {
910 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
911 }
912 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
913 {
914 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
915 }
916 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
917 {
918 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
919 }
920 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
921 {
922 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
923 }
924 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
925 {
926 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
927 }
928 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
929 {
930 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
931 }
932 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
933 {
934 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
935 }
936 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
937 {
938 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
939 }
940 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
941 {
942 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
943 }
944
945 std::string enumeratorString;
946 for(auto const& string : strings)
947 {
948 enumeratorString += string;
949
950 if(string != strings.back())
951 {
952 enumeratorString += '|';
953 }
954 }
955
956 return enumeratorString;
957}
958
959static
960bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
961{
962 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
963 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
964 VK_QUERY_RESULT_WAIT_BIT |
965 VK_QUERY_RESULT_64_BIT |
966 VK_QUERY_RESULT_DEFAULT);
967 if(enumerator & (~allFlags))
968 {
969 return false;
970 }
971
972 return true;
973}
974
975static
976std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
977{
978 if(!ValidateEnumerator(enumerator))
979 {
980 return "unrecognized enumerator";
981 }
982
983 std::vector<std::string> strings;
984 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
985 {
986 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
987 }
988 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
989 {
990 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
991 }
992 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
993 {
994 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
995 }
996 if(enumerator & VK_QUERY_RESULT_64_BIT)
997 {
998 strings.push_back("VK_QUERY_RESULT_64_BIT");
999 }
1000 if(enumerator & VK_QUERY_RESULT_DEFAULT)
1001 {
1002 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001003 }
1004
1005 std::string enumeratorString;
1006 for(auto const& string : strings)
1007 {
1008 enumeratorString += string;
1009
1010 if(string != strings.back())
1011 {
1012 enumeratorString += '|';
1013 }
1014 }
1015
1016 return enumeratorString;
1017}
1018
1019static
1020bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
1021{
1022 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
1023 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
1024 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
1025 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
1026 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
1027 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
1028 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
1029 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -06001030 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001031 if(enumerator & (~allFlags))
1032 {
1033 return false;
1034 }
1035
1036 return true;
1037}
1038
1039static
1040std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
1041{
1042 if(!ValidateEnumerator(enumerator))
1043 {
1044 return "unrecognized enumerator";
1045 }
1046
1047 std::vector<std::string> strings;
1048 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
1049 {
1050 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
1051 }
1052 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
1053 {
1054 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
1055 }
1056 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
1057 {
1058 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
1059 }
1060 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
1061 {
1062 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
1063 }
1064 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
1065 {
1066 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
1067 }
1068 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
1069 {
1070 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
1071 }
1072 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
1073 {
1074 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
1075 }
1076 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
1077 {
1078 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
1079 }
1080 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
1081 {
1082 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
1083 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001084
1085 std::string enumeratorString;
1086 for(auto const& string : strings)
1087 {
1088 enumeratorString += string;
1089
1090 if(string != strings.back())
1091 {
1092 enumeratorString += '|';
1093 }
1094 }
1095
1096 return enumeratorString;
1097}
1098
1099static
1100bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
1101{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001102 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
1103 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
1104 VK_BUFFER_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001105 if(enumerator & (~allFlags))
1106 {
1107 return false;
1108 }
1109
1110 return true;
1111}
1112
1113static
1114std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
1115{
1116 if(!ValidateEnumerator(enumerator))
1117 {
1118 return "unrecognized enumerator";
1119 }
1120
1121 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001122 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1123 {
1124 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1125 }
1126 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1127 {
1128 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1129 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001130 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
1131 {
1132 strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT");
1133 }
1134
1135 std::string enumeratorString;
1136 for(auto const& string : strings)
1137 {
1138 enumeratorString += string;
1139
1140 if(string != strings.back())
1141 {
1142 enumeratorString += '|';
1143 }
1144 }
1145
1146 return enumeratorString;
1147}
1148
1149static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001150bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1151{
1152 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001153 VK_IMAGE_CREATE_INVARIANT_DATA_BIT |
1154 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1155 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001156 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001157 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001158 if(enumerator & (~allFlags))
1159 {
1160 return false;
1161 }
1162
1163 return true;
1164}
1165
1166static
1167std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1168{
1169 if(!ValidateEnumerator(enumerator))
1170 {
1171 return "unrecognized enumerator";
1172 }
1173
1174 std::vector<std::string> strings;
1175 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1176 {
1177 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1178 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001179 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
1180 {
1181 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
1182 }
1183 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1184 {
1185 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1186 }
1187 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1188 {
1189 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1190 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001191 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1192 {
1193 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1194 }
1195 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
1196 {
1197 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
1198 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001199
1200 std::string enumeratorString;
1201 for(auto const& string : strings)
1202 {
1203 enumeratorString += string;
1204
1205 if(string != strings.back())
1206 {
1207 enumeratorString += '|';
1208 }
1209 }
1210
1211 return enumeratorString;
1212}
1213
1214static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001215bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001216{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001217 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1218 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001219 if(enumerator & (~allFlags))
1220 {
1221 return false;
1222 }
1223
1224 return true;
1225}
1226
1227static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001228std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001229{
1230 if(!ValidateEnumerator(enumerator))
1231 {
1232 return "unrecognized enumerator";
1233 }
1234
1235 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001236 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001237 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001238 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001239 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001240 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001241 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001242 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001243 }
1244
1245 std::string enumeratorString;
1246 for(auto const& string : strings)
1247 {
1248 enumeratorString += string;
1249
1250 if(string != strings.back())
1251 {
1252 enumeratorString += '|';
1253 }
1254 }
1255
1256 return enumeratorString;
1257}
1258
1259static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001260bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1261{
1262 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1263 VK_CHANNEL_B_BIT |
1264 VK_CHANNEL_G_BIT |
1265 VK_CHANNEL_R_BIT);
1266 if(enumerator & (~allFlags))
1267 {
1268 return false;
1269 }
1270
1271 return true;
1272}
1273
1274static
1275std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1276{
1277 if(!ValidateEnumerator(enumerator))
1278 {
1279 return "unrecognized enumerator";
1280 }
1281
1282 std::vector<std::string> strings;
1283 if(enumerator & VK_CHANNEL_A_BIT)
1284 {
1285 strings.push_back("VK_CHANNEL_A_BIT");
1286 }
1287 if(enumerator & VK_CHANNEL_B_BIT)
1288 {
1289 strings.push_back("VK_CHANNEL_B_BIT");
1290 }
1291 if(enumerator & VK_CHANNEL_G_BIT)
1292 {
1293 strings.push_back("VK_CHANNEL_G_BIT");
1294 }
1295 if(enumerator & VK_CHANNEL_R_BIT)
1296 {
1297 strings.push_back("VK_CHANNEL_R_BIT");
1298 }
1299
1300 std::string enumeratorString;
1301 for(auto const& string : strings)
1302 {
1303 enumeratorString += string;
1304
1305 if(string != strings.back())
1306 {
1307 enumeratorString += '|';
1308 }
1309 }
1310
1311 return enumeratorString;
1312}
1313
1314static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001315bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001316{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001317 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1318 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1319 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001320 if(enumerator & (~allFlags))
1321 {
1322 return false;
1323 }
1324
1325 return true;
1326}
1327
1328static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001329std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001330{
1331 if(!ValidateEnumerator(enumerator))
1332 {
1333 return "unrecognized enumerator";
1334 }
1335
1336 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001337 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001338 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001339 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1340 }
1341 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1342 {
1343 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1344 }
1345 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1346 {
1347 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001348 }
1349
1350 std::string enumeratorString;
1351 for(auto const& string : strings)
1352 {
1353 enumeratorString += string;
1354
1355 if(string != strings.back())
1356 {
1357 enumeratorString += '|';
1358 }
1359 }
1360
1361 return enumeratorString;
1362}
1363
1364static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001365bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001366{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001367 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1368 VK_SHADER_STAGE_FRAGMENT_BIT |
1369 VK_SHADER_STAGE_GEOMETRY_BIT |
1370 VK_SHADER_STAGE_COMPUTE_BIT |
1371 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1372 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1373 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001374 if(enumerator & (~allFlags))
1375 {
1376 return false;
1377 }
1378
1379 return true;
1380}
1381
1382static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001383std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001384{
1385 if(!ValidateEnumerator(enumerator))
1386 {
1387 return "unrecognized enumerator";
1388 }
1389
1390 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001391 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001392 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001393 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001394 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001395 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001396 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001397 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001398 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001399 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001400 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001401 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1402 }
1403 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1404 {
1405 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1406 }
1407 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1408 {
1409 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1410 }
1411 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1412 {
1413 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1414 }
1415 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1416 {
1417 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001418 }
1419
1420 std::string enumeratorString;
1421 for(auto const& string : strings)
1422 {
1423 enumeratorString += string;
1424
1425 if(string != strings.back())
1426 {
1427 enumeratorString += '|';
1428 }
1429 }
1430
1431 return enumeratorString;
1432}
1433
1434static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001435bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001436{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001438 if(enumerator & (~allFlags))
1439 {
1440 return false;
1441 }
1442
1443 return true;
1444}
1445
1446static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001448{
1449 if(!ValidateEnumerator(enumerator))
1450 {
1451 return "unrecognized enumerator";
1452 }
1453
1454 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001455 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001456 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001457 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001458 }
1459
1460 std::string enumeratorString;
1461 for(auto const& string : strings)
1462 {
1463 enumeratorString += string;
1464
1465 if(string != strings.back())
1466 {
1467 enumeratorString += '|';
1468 }
1469 }
1470
1471 return enumeratorString;
1472}
1473
1474static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001475bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001476{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001477 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1478 VK_PIPELINE_STAGE_HOST_BIT |
1479 VK_PIPELINE_STAGE_TRANSFER_BIT |
1480 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1481 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1482 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1483 VK_PIPELINE_STAGE_TRANSITION_BIT |
1484 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1485 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1486 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1487 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1488 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1489 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1490 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1491 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1492 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1493 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001494 if(enumerator & (~allFlags))
1495 {
1496 return false;
1497 }
1498
1499 return true;
1500}
1501
1502static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001503std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001504{
1505 if(!ValidateEnumerator(enumerator))
1506 {
1507 return "unrecognized enumerator";
1508 }
1509
1510 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001511 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001512 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001513 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001514 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001515 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001516 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001517 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001518 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001519 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001520 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001521 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001522 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001523 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001524 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001525 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001526 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001527 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001528 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001529 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001530 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001531 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001532 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001533 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001534 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001535 if(enumerator & VK_PIPELINE_STAGE_TRANSITION_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001536 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001537 strings.push_back("VK_PIPELINE_STAGE_TRANSITION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001538 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001539 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001540 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001541 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001542 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001543 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001544 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001545 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001546 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001547 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001548 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001549 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001550 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001551 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001552 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001553 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1554 }
1555 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1556 {
1557 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1558 }
1559 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1560 {
1561 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1562 }
1563 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1564 {
1565 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1566 }
1567 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1568 {
1569 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1570 }
1571 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1572 {
1573 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1574 }
1575 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1576 {
1577 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001578 }
1579
1580 std::string enumeratorString;
1581 for(auto const& string : strings)
1582 {
1583 enumeratorString += string;
1584
1585 if(string != strings.back())
1586 {
1587 enumeratorString += '|';
1588 }
1589 }
1590
1591 return enumeratorString;
1592}
1593
1594static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001595bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001596{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001597 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1598 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1599 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1600 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1601 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001602 if(enumerator & (~allFlags))
1603 {
1604 return false;
1605 }
1606
1607 return true;
1608}
1609
1610static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001611std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001612{
1613 if(!ValidateEnumerator(enumerator))
1614 {
1615 return "unrecognized enumerator";
1616 }
1617
1618 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001619 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001620 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001621 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001622 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001623 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001624 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001625 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001626 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001627 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001628 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001629 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1630 }
1631 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1632 {
1633 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1634 }
1635 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1636 {
1637 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001638 }
1639
1640 std::string enumeratorString;
1641 for(auto const& string : strings)
1642 {
1643 enumeratorString += string;
1644
1645 if(string != strings.back())
1646 {
1647 enumeratorString += '|';
1648 }
1649 }
1650
1651 return enumeratorString;
1652}
1653
1654static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001655bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001656{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001657 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1658 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1659 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1660 VK_MEMORY_INPUT_SHADER_READ_BIT |
1661 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1662 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1663 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1664 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1665 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1666 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001667 if(enumerator & (~allFlags))
1668 {
1669 return false;
1670 }
1671
1672 return true;
1673}
1674
1675static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001676std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001677{
1678 if(!ValidateEnumerator(enumerator))
1679 {
1680 return "unrecognized enumerator";
1681 }
1682
1683 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001684 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001685 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001686 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1687 }
1688 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1689 {
1690 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1691 }
1692 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1693 {
1694 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1695 }
1696 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1697 {
1698 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1699 }
1700 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1701 {
1702 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1703 }
1704 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1705 {
1706 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1707 }
1708 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1709 {
1710 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1711 }
1712 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1713 {
1714 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1715 }
1716 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1717 {
1718 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1719 }
1720 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1721 {
1722 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001723 }
1724
1725 std::string enumeratorString;
1726 for(auto const& string : strings)
1727 {
1728 enumeratorString += string;
1729
1730 if(string != strings.back())
1731 {
1732 enumeratorString += '|';
1733 }
1734 }
1735
1736 return enumeratorString;
1737}
1738
1739static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001740bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001741{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001742 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1743 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001744 if(enumerator & (~allFlags))
1745 {
1746 return false;
1747 }
1748
1749 return true;
1750}
1751
1752static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001753std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001754{
1755 if(!ValidateEnumerator(enumerator))
1756 {
1757 return "unrecognized enumerator";
1758 }
1759
1760 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001761 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001762 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001763 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001764 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001765 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001766 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001767 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001768 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001769
1770 std::string enumeratorString;
1771 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001772 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001773 enumeratorString += string;
1774
1775 if(string != strings.back())
1776 {
1777 enumeratorString += '|';
1778 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001779 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001780
1781 return enumeratorString;
1782}
1783
1784static
1785bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1786{
1787 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES);
1788 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001789 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001790 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001791 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001792
1793 return true;
1794}
1795
1796static
1797std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1798{
1799 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001800 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001801 return "unrecognized enumerator";
1802 }
1803
1804 std::vector<std::string> strings;
1805 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES)
1806 {
1807 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001808 }
1809
1810 std::string enumeratorString;
1811 for(auto const& string : strings)
1812 {
1813 enumeratorString += string;
1814
1815 if(string != strings.back())
1816 {
1817 enumeratorString += '|';
1818 }
1819 }
1820
1821 return enumeratorString;
1822}
1823
1824static
1825bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1826{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001827 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1828 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001829 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1830 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1831 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1832 if(enumerator & (~allFlags))
1833 {
1834 return false;
1835 }
1836
1837 return true;
1838}
1839
1840static
1841std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1842{
1843 if(!ValidateEnumerator(enumerator))
1844 {
1845 return "unrecognized enumerator";
1846 }
1847
1848 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001849 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1850 {
1851 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1852 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001853 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1854 {
1855 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1856 }
1857 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1858 {
1859 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1860 }
1861 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1862 {
1863 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1864 }
1865 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1866 {
1867 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1868 }
1869
1870 std::string enumeratorString;
1871 for(auto const& string : strings)
1872 {
1873 enumeratorString += string;
1874
1875 if(string != strings.back())
1876 {
1877 enumeratorString += '|';
1878 }
1879 }
1880
1881 return enumeratorString;
1882}
1883
1884static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001885bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001886{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001887 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001888 if(enumerator & (~allFlags))
1889 {
1890 return false;
1891 }
1892
1893 return true;
1894}
1895
1896static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001897std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001898{
1899 if(!ValidateEnumerator(enumerator))
1900 {
1901 return "unrecognized enumerator";
1902 }
1903
1904 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001905 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001906 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001907 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001908 }
1909
1910 std::string enumeratorString;
1911 for(auto const& string : strings)
1912 {
1913 enumeratorString += string;
1914
1915 if(string != strings.back())
1916 {
1917 enumeratorString += '|';
1918 }
1919 }
1920
1921 return enumeratorString;
1922}
1923
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001924static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001925bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001926{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001927 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1928 VK_IMAGE_ASPECT_STENCIL_BIT |
1929 VK_IMAGE_ASPECT_DEPTH_BIT |
1930 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001931 if(enumerator & (~allFlags))
1932 {
1933 return false;
1934 }
1935
1936 return true;
1937}
1938
1939static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001940std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001941{
1942 if(!ValidateEnumerator(enumerator))
1943 {
1944 return "unrecognized enumerator";
1945 }
1946
1947 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001948 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001949 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001950 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1951 }
1952 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1953 {
1954 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1955 }
1956 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1957 {
1958 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1959 }
1960 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1961 {
1962 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1963 }
1964
1965 std::string enumeratorString;
1966 for(auto const& string : strings)
1967 {
1968 enumeratorString += string;
1969
1970 if(string != strings.back())
1971 {
1972 enumeratorString += '|';
1973 }
1974 }
1975
1976 return enumeratorString;
1977}
1978
1979static
1980bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1981{
1982 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1983 if(enumerator & (~allFlags))
1984 {
1985 return false;
1986 }
1987
1988 return true;
1989}
1990
1991static
1992std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1993{
1994 if(!ValidateEnumerator(enumerator))
1995 {
1996 return "unrecognized enumerator";
1997 }
1998
1999 std::vector<std::string> strings;
2000 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
2001 {
2002 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002003 }
2004
2005 std::string enumeratorString;
2006 for(auto const& string : strings)
2007 {
2008 enumeratorString += string;
2009
2010 if(string != strings.back())
2011 {
2012 enumeratorString += '|';
2013 }
2014 }
2015
2016 return enumeratorString;
2017}
2018
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002019VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
2020 const VkInstanceCreateInfo* pCreateInfo,
2021 VkInstance* pInstance)
2022{
2023 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
2024 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
2025
2026 if (result == VK_SUCCESS) {
2027 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
2028 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06002029 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002030
2031 InitParamChecker(data);
2032 }
2033
2034 return result;
2035}
2036
2037VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(
2038 VkInstance instance)
2039{
2040 // Grab the key before the instance is destroyed.
2041 dispatch_key key = get_dispatch_key(instance);
2042 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
2043 VkResult result = pTable->DestroyInstance(instance);
2044
2045 // Clean up logging callback, if any
2046 layer_data *data = get_my_data_ptr(key, layer_data_map);
2047 if(data->logging_callback)
2048 {
2049 layer_destroy_msg_callback(data->report_data, data->logging_callback);
2050 }
2051
2052 layer_debug_report_destroy_instance(mid(instance));
2053 layer_data_map.erase(pTable);
2054
2055 pc_instance_table_map.erase(key);
2056 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2057
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002058 return result;
2059}
2060
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002061bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002062 VkInstance instance,
2063 uint32_t* pPhysicalDeviceCount,
2064 VkPhysicalDevice* pPhysicalDevices,
2065 VkResult result)
2066{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002067
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002068 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002069 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002070 }
2071
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002072 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002073 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002074 }
2075
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002076 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002077 {
2078 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002079 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2080 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002081 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002082
2083 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002084}
2085
2086VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
2087 VkInstance instance,
2088 uint32_t* pPhysicalDeviceCount,
2089 VkPhysicalDevice* pPhysicalDevices)
2090{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002091 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
2092
2093 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
2094
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002095 return result;
2096}
2097
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002098bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002099 VkPhysicalDevice physicalDevice,
2100 VkPhysicalDeviceFeatures* pFeatures,
2101 VkResult result)
2102{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002103
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002104 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002105 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002106 }
2107
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002108 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002109 {
2110 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002111 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2112 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002113 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002114
2115 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002116}
2117
2118VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
2119 VkPhysicalDevice physicalDevice,
2120 VkPhysicalDeviceFeatures* pFeatures)
2121{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002122 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
2123
2124 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
2125
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002126 return result;
2127}
2128
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002129bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002130 VkPhysicalDevice physicalDevice,
2131 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002132 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002133 VkResult result)
2134{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002135
2136 if(format < VK_FORMAT_BEGIN_RANGE ||
2137 format > VK_FORMAT_END_RANGE)
2138 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002139 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002140 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002141 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002142 }
2143
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002144 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002145 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002146 }
2147
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002148 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002149 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002150 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002151 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2152 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002153 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002154
2155 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002156}
2157
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002158VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002159 VkPhysicalDevice physicalDevice,
2160 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002161 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002162{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002163 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002164
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002165 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2166
2167 return result;
2168}
2169
2170bool PostGetPhysicalDeviceImageFormatProperties(
2171 VkPhysicalDevice physicalDevice,
2172 VkFormat format,
2173 VkImageType type,
2174 VkImageTiling tiling,
2175 VkImageUsageFlags usage,
2176 VkImageFormatProperties* pImageFormatProperties,
2177 VkResult result)
2178{
2179
2180 if(format < VK_FORMAT_BEGIN_RANGE ||
2181 format > VK_FORMAT_END_RANGE)
2182 {
2183 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2184 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2185 return false;
2186 }
2187
2188 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2189 type > VK_IMAGE_TYPE_END_RANGE)
2190 {
2191 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2192 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2193 return false;
2194 }
2195
2196 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2197 tiling > VK_IMAGE_TILING_END_RANGE)
2198 {
2199 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2200 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2201 return false;
2202 }
2203
2204
2205 if(pImageFormatProperties != nullptr)
2206 {
2207 }
2208
2209 if(result < VK_SUCCESS)
2210 {
2211 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2212 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2213 return false;
2214 }
2215
2216 return true;
2217}
2218
2219VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2220 VkPhysicalDevice physicalDevice,
2221 VkFormat format,
2222 VkImageType type,
2223 VkImageTiling tiling,
2224 VkImageUsageFlags usage,
2225 VkImageFormatProperties* pImageFormatProperties)
2226{
2227 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
2228
2229 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002230
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002231 return result;
2232}
2233
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002234bool PostGetPhysicalDeviceLimits(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002235 VkPhysicalDevice physicalDevice,
2236 VkPhysicalDeviceLimits* pLimits,
2237 VkResult result)
2238{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002239
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002240 if(pLimits != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002241 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002242 }
2243
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002244 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002245 {
2246 std::string reason = "vkGetPhysicalDeviceLimits parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002247 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2248 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002249 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002250
2251 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002252}
2253
2254VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
2255 VkPhysicalDevice physicalDevice,
2256 VkPhysicalDeviceLimits* pLimits)
2257{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002258 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceLimits(physicalDevice, pLimits);
2259
2260 PostGetPhysicalDeviceLimits(physicalDevice, pLimits, result);
2261
2262 return result;
2263}
2264
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002265bool PostGetPhysicalDeviceProperties(
2266 VkPhysicalDevice physicalDevice,
2267 VkPhysicalDeviceProperties* pProperties,
2268 VkResult result)
2269{
2270
2271 if(pProperties != nullptr)
2272 {
2273 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2274 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2275 {
2276 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2277 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2278 return false;
2279 }
2280 }
2281
2282 if(result < VK_SUCCESS)
2283 {
2284 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2285 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2286 return false;
2287 }
2288
2289 return true;
2290}
2291
2292VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2293 VkPhysicalDevice physicalDevice,
2294 VkPhysicalDeviceProperties* pProperties)
2295{
2296 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2297
2298 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2299
2300 return result;
2301}
2302
Cody Northropef72e2a2015-08-03 17:04:53 -06002303bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002304 VkPhysicalDevice physicalDevice,
2305 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002306 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002307 VkResult result)
2308{
2309
Cody Northropef72e2a2015-08-03 17:04:53 -06002310 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002311 {
2312 }
2313
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002314 if(pQueueProperties != nullptr)
2315 {
2316 }
2317
2318 if(result < VK_SUCCESS)
2319 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002320 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002321 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2322 return false;
2323 }
2324
2325 return true;
2326}
2327
2328VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2329 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002330 uint32_t* pCount,
2331 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002332{
Cody Northropef72e2a2015-08-03 17:04:53 -06002333 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002334
Cody Northropef72e2a2015-08-03 17:04:53 -06002335 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002336
2337 return result;
2338}
2339
2340bool PostGetPhysicalDeviceMemoryProperties(
2341 VkPhysicalDevice physicalDevice,
2342 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2343 VkResult result)
2344{
2345
2346 if(pMemoryProperties != nullptr)
2347 {
2348 }
2349
2350 if(result < VK_SUCCESS)
2351 {
2352 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2353 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2354 return false;
2355 }
2356
2357 return true;
2358}
2359
2360VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2361 VkPhysicalDevice physicalDevice,
2362 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2363{
2364 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2365
2366 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2367
2368 return result;
2369}
2370
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002371VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2372 VkPhysicalDevice physicalDevice,
2373 const VkDeviceCreateInfo* pCreateInfo,
2374 VkDevice* pDevice)
2375{
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002376 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002377 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2378 if(result == VK_SUCCESS)
2379 {
2380 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2381 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2382 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2383 }
2384
2385 return result;
2386}
2387
2388VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
2389 VkDevice device)
2390{
2391 layer_debug_report_destroy_device(device);
2392
2393 dispatch_key key = get_dispatch_key(device);
2394#if DISPATCH_MAP_DEBUG
2395 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2396#endif
2397
2398 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
2399 pc_device_table_map.erase(key);
2400 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2401
2402 return result;
2403}
2404
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002405bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002406 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002407 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002408 uint32_t queueIndex,
2409 VkQueue* pQueue,
2410 VkResult result)
2411{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002412
2413
2414
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002415 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002416 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002417 }
2418
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002419 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002420 {
2421 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002422 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2423 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002424 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002425
2426 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002427}
2428
2429VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2430 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002431 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002432 uint32_t queueIndex,
2433 VkQueue* pQueue)
2434{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002435 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002436
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002437 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002438
2439 return result;
2440}
2441
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002442bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002443 VkQueue queue,
2444 const VkCmdBuffer* pCmdBuffers)
2445{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002446 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002447 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002448 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002449
2450 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002451}
2452
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002453bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002454 VkQueue queue,
2455 uint32_t cmdBufferCount,
2456 VkFence fence,
2457 VkResult result)
2458{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002459
2460
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002461
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002462 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002463 {
2464 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002465 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2466 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002467 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002468
2469 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002470}
2471
2472VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2473 VkQueue queue,
2474 uint32_t cmdBufferCount,
2475 const VkCmdBuffer* pCmdBuffers,
2476 VkFence fence)
2477{
2478 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002479
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002480 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2481
2482 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2483
2484 return result;
2485}
2486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002487bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002488 VkQueue queue,
2489 VkResult result)
2490{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002491
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002492 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002493 {
2494 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002495 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2496 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002497 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002498
2499 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002500}
2501
2502VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2503 VkQueue queue)
2504{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002505 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2506
2507 PostQueueWaitIdle(queue, result);
2508
2509 return result;
2510}
2511
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002512bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002513 VkDevice device,
2514 VkResult result)
2515{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002516
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002517 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002518 {
2519 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002520 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2521 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002522 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002523
2524 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002525}
2526
2527VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2528 VkDevice device)
2529{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002530 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2531
2532 PostDeviceWaitIdle(device, result);
2533
2534 return result;
2535}
2536
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002537bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002538 VkDevice device,
2539 const VkMemoryAllocInfo* pAllocInfo)
2540{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002541 if(pAllocInfo != nullptr)
2542 {
2543 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002544 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002545 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002546 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002547 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002548 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002549 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002550
2551 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002552}
2553
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002554bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002555 VkDevice device,
2556 VkDeviceMemory* pMem,
2557 VkResult result)
2558{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002559
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002560 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002561 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002562 }
2563
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002564 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002565 {
2566 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002567 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2568 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002569 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002570
2571 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002572}
2573
2574VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2575 VkDevice device,
2576 const VkMemoryAllocInfo* pAllocInfo,
2577 VkDeviceMemory* pMem)
2578{
2579 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002581 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2582
2583 PostAllocMemory(device, pMem, result);
2584
2585 return result;
2586}
2587
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002588bool PostFreeMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002589 VkDevice device,
2590 VkDeviceMemory mem,
2591 VkResult result)
2592{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002593
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002594
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002595 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002596 {
2597 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002598 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2599 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002600 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002601
2602 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002603}
2604
2605VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2606 VkDevice device,
2607 VkDeviceMemory mem)
2608{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002609 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2610
2611 PostFreeMemory(device, mem, result);
2612
2613 return result;
2614}
2615
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002616bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002617 VkDevice device,
2618 VkDeviceMemory mem,
2619 VkDeviceSize offset,
2620 VkDeviceSize size,
2621 VkMemoryMapFlags flags,
2622 void** ppData,
2623 VkResult result)
2624{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002625
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002626
2627
2628
2629
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002630 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002631 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002632 }
2633
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002634 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002635 {
2636 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002637 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2638 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002639 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002640
2641 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002642}
2643
2644VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2645 VkDevice device,
2646 VkDeviceMemory mem,
2647 VkDeviceSize offset,
2648 VkDeviceSize size,
2649 VkMemoryMapFlags flags,
2650 void** ppData)
2651{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002652 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2653
2654 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2655
2656 return result;
2657}
2658
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002659bool PostUnmapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002660 VkDevice device,
2661 VkDeviceMemory mem,
2662 VkResult result)
2663{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002664
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002665
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002666 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002667 {
2668 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002669 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2670 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002671 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002672
2673 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002674}
2675
2676VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2677 VkDevice device,
2678 VkDeviceMemory mem)
2679{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002680 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2681
2682 PostUnmapMemory(device, mem, result);
2683
2684 return result;
2685}
2686
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002687bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002688 VkDevice device,
2689 const VkMappedMemoryRange* pMemRanges)
2690{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002691 if(pMemRanges != nullptr)
2692 {
2693 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002694 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002695 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002696 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002697 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002698 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002699 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002700
2701 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002702}
2703
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002704bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002705 VkDevice device,
2706 uint32_t memRangeCount,
2707 VkResult result)
2708{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002709
2710
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002711 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002712 {
2713 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2715 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002716 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002717
2718 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002719}
2720
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002721VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002722 VkDevice device,
2723 uint32_t memRangeCount,
2724 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002725{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002726 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002727
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002728 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002729
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002730 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2731
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002732 return result;
2733}
2734
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002735bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002736 VkDevice device,
2737 const VkMappedMemoryRange* pMemRanges)
2738{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002739 if(pMemRanges != nullptr)
2740 {
2741 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002742 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002743 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002744 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002745 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002746 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002747 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002748
2749 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002750}
2751
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002752bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002753 VkDevice device,
2754 uint32_t memRangeCount,
2755 VkResult result)
2756{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002757
2758
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002759 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002760 {
2761 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002762 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2763 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002764 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002765
2766 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002767}
2768
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002769VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002770 VkDevice device,
2771 uint32_t memRangeCount,
2772 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002773{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002774 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002775
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002776 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002777
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002778 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2779
Tony Barbour859ceab2015-04-16 19:23:13 -06002780 return result;
2781}
2782
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002783bool PostGetDeviceMemoryCommitment(
2784 VkDevice device,
2785 VkDeviceMemory memory,
2786 VkDeviceSize* pCommittedMemoryInBytes,
2787 VkResult result)
2788{
2789
2790
2791 if(pCommittedMemoryInBytes != nullptr)
2792 {
2793 }
2794
2795 if(result < VK_SUCCESS)
2796 {
2797 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2798 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2799 return false;
2800 }
2801
2802 return true;
2803}
2804
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002805VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002806 VkDevice device,
2807 VkDeviceMemory memory,
2808 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002809{
2810 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2811
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002812 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2813
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002814 return result;
2815}
2816
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002817bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002818 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002819 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002820 VkDeviceMemory mem,
2821 VkDeviceSize memOffset,
2822 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002823{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002824
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002825
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002826
2827
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002828 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002829 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002830 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2831 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2832 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002833 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002834
2835 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002836}
2837
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002838VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002839 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002840 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002841 VkDeviceMemory mem,
2842 VkDeviceSize memOffset)
2843{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002844 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002845
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002846 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002847
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002848 return result;
2849}
2850
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002851bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002852 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002853 VkImage image,
2854 VkDeviceMemory mem,
2855 VkDeviceSize memOffset,
2856 VkResult result)
2857{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002858
2859
2860
2861
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002862 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002863 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002864 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2865 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2866 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002867 }
2868
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002869 return true;
2870}
2871
2872VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2873 VkDevice device,
2874 VkImage image,
2875 VkDeviceMemory mem,
2876 VkDeviceSize memOffset)
2877{
2878 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2879
2880 PostBindImageMemory(device, image, mem, memOffset, result);
2881
2882 return result;
2883}
2884
2885bool PostGetBufferMemoryRequirements(
2886 VkDevice device,
2887 VkBuffer buffer,
2888 VkMemoryRequirements* pMemoryRequirements,
2889 VkResult result)
2890{
2891
2892
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002893 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002894 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002895 }
2896
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002897 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002898 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002899 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2900 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2901 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002902 }
2903
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002904 return true;
2905}
2906
2907VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2908 VkDevice device,
2909 VkBuffer buffer,
2910 VkMemoryRequirements* pMemoryRequirements)
2911{
2912 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2913
2914 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2915
2916 return result;
2917}
2918
2919bool PostGetImageMemoryRequirements(
2920 VkDevice device,
2921 VkImage image,
2922 VkMemoryRequirements* pMemoryRequirements,
2923 VkResult result)
2924{
2925
2926
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002927 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002928 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002929 }
2930
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002931 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002932 {
2933 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2935 return false;
2936 }
2937
2938 return true;
2939}
2940
2941VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2942 VkDevice device,
2943 VkImage image,
2944 VkMemoryRequirements* pMemoryRequirements)
2945{
2946 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2947
2948 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2949
2950 return result;
2951}
2952
2953bool PostGetImageSparseMemoryRequirements(
2954 VkDevice device,
2955 VkImage image,
2956 uint32_t* pNumRequirements,
2957 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2958 VkResult result)
2959{
2960
2961
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002962 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002963 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002964 }
2965
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002966 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002967 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002968 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2969 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2970 {
2971 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002972 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002973 return false;
2974 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002975 }
2976
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002977 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002978 {
2979 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2980 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2981 return false;
2982 }
2983
2984 return true;
2985}
2986
2987VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2988 VkDevice device,
2989 VkImage image,
2990 uint32_t* pNumRequirements,
2991 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2992{
2993 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2994
2995 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2996
2997 return result;
2998}
2999
3000bool PostGetPhysicalDeviceSparseImageFormatProperties(
3001 VkPhysicalDevice physicalDevice,
3002 VkFormat format,
3003 VkImageType type,
3004 uint32_t samples,
3005 VkImageUsageFlags usage,
3006 VkImageTiling tiling,
3007 uint32_t* pNumProperties,
3008 VkSparseImageFormatProperties* pProperties,
3009 VkResult result)
3010{
3011
3012 if(format < VK_FORMAT_BEGIN_RANGE ||
3013 format > VK_FORMAT_END_RANGE)
3014 {
3015 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003016 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003017 return false;
3018 }
3019
3020 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
3021 type > VK_IMAGE_TYPE_END_RANGE)
3022 {
3023 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003024 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003025 return false;
3026 }
3027
3028
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003029
3030 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3031 tiling > VK_IMAGE_TILING_END_RANGE)
3032 {
3033 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003034 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003035 return false;
3036 }
3037
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003038 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003039 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003040 }
3041
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003042 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003043 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003044 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3045 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
3046 {
3047 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003048 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003049 return false;
3050 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003051 }
3052
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003053 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003054 {
3055 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
3056 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3057 return false;
3058 }
3059
3060 return true;
3061}
3062
3063VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
3064 VkPhysicalDevice physicalDevice,
3065 VkFormat format,
3066 VkImageType type,
3067 uint32_t samples,
3068 VkImageUsageFlags usage,
3069 VkImageTiling tiling,
3070 uint32_t* pNumProperties,
3071 VkSparseImageFormatProperties* pProperties)
3072{
3073 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
3074
3075 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
3076
3077 return result;
3078}
3079
3080bool PreQueueBindSparseBufferMemory(
3081 VkQueue queue,
3082 const VkSparseMemoryBindInfo* pBindInfo)
3083{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003084 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003085 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003086 }
3087
3088 return true;
3089}
3090
3091bool PostQueueBindSparseBufferMemory(
3092 VkQueue queue,
3093 VkBuffer buffer,
3094 uint32_t numBindings,
3095 VkResult result)
3096{
3097
3098
3099
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003100 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003101 {
3102 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
3103 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3104 return false;
3105 }
3106
3107 return true;
3108}
3109
3110VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
3111 VkQueue queue,
3112 VkBuffer buffer,
3113 uint32_t numBindings,
3114 const VkSparseMemoryBindInfo* pBindInfo)
3115{
3116 PreQueueBindSparseBufferMemory(queue, pBindInfo);
3117
3118 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
3119
3120 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
3121
3122 return result;
3123}
3124
3125bool PreQueueBindSparseImageOpaqueMemory(
3126 VkQueue queue,
3127 const VkSparseMemoryBindInfo* pBindInfo)
3128{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003129 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003130 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003131 }
3132
3133 return true;
3134}
3135
3136bool PostQueueBindSparseImageOpaqueMemory(
3137 VkQueue queue,
3138 VkImage image,
3139 uint32_t numBindings,
3140 VkResult result)
3141{
3142
3143
3144
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003145 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003146 {
3147 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
3148 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3149 return false;
3150 }
3151
3152 return true;
3153}
3154
3155VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
3156 VkQueue queue,
3157 VkImage image,
3158 uint32_t numBindings,
3159 const VkSparseMemoryBindInfo* pBindInfo)
3160{
3161 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
3162
3163 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
3164
3165 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
3166
3167 return result;
3168}
3169
3170bool PreQueueBindSparseImageMemory(
3171 VkQueue queue,
3172 const VkSparseImageMemoryBindInfo* pBindInfo)
3173{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003174 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003175 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003176 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3177 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
3178 {
3179 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003180 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003181 return false;
3182 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003183 }
3184
3185 return true;
3186}
3187
3188bool PostQueueBindSparseImageMemory(
3189 VkQueue queue,
3190 VkImage image,
3191 uint32_t numBindings,
3192 VkResult result)
3193{
3194
3195
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003196
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003197 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003198 {
3199 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003200 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3201 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003202 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003203
3204 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003205}
3206
3207VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003208 VkQueue queue,
3209 VkImage image,
3210 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003211 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003212{
3213 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003214
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003215 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003216
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003217 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003218
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003219 return result;
3220}
3221
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003222bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003223 VkDevice device,
3224 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003225{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003226 if(pCreateInfo != nullptr)
3227 {
3228 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003229 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003230 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003231 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003232 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003233 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003234 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003235
3236 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003237}
3238
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003239bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003240 VkDevice device,
3241 VkFence* pFence,
3242 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003243{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003244
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003245 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003246 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003247 }
3248
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003249 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003250 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003251 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003252 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3253 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003254 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003255
3256 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003257}
3258
3259VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3260 VkDevice device,
3261 const VkFenceCreateInfo* pCreateInfo,
3262 VkFence* pFence)
3263{
3264 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003265
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003266 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3267
3268 PostCreateFence(device, pFence, result);
3269
3270 return result;
3271}
3272
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003273bool PostDestroyFence(
3274 VkDevice device,
3275 VkFence fence,
3276 VkResult result)
3277{
3278
3279
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003280 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003281 {
3282 std::string reason = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3283 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3284 return false;
3285 }
3286
3287 return true;
3288}
3289
3290VK_LAYER_EXPORT VkResult VKAPI vkDestroyFence(
3291 VkDevice device,
3292 VkFence fence)
3293{
3294 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3295
3296 PostDestroyFence(device, fence, result);
3297
3298 return result;
3299}
3300
3301bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003302 VkDevice device,
3303 const VkFence* pFences)
3304{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003305 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003306 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003307 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003308
3309 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003310}
3311
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003312bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003313 VkDevice device,
3314 uint32_t fenceCount,
3315 VkResult result)
3316{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003317
3318
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003319 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003320 {
3321 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003322 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3323 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003324 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003325
3326 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003327}
3328
3329VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3330 VkDevice device,
3331 uint32_t fenceCount,
3332 const VkFence* pFences)
3333{
3334 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003335
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003336 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3337
3338 PostResetFences(device, fenceCount, result);
3339
3340 return result;
3341}
3342
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003343bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003344 VkDevice device,
3345 VkFence fence,
3346 VkResult result)
3347{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003348
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003349
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003350 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003351 {
3352 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003353 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3354 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003355 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003356
3357 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003358}
3359
3360VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3361 VkDevice device,
3362 VkFence fence)
3363{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003364 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3365
3366 PostGetFenceStatus(device, fence, result);
3367
3368 return result;
3369}
3370
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003371bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003372 VkDevice device,
3373 const VkFence* pFences)
3374{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003375 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003376 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003377 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003378
3379 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003380}
3381
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003382bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003383 VkDevice device,
3384 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003385 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003386 uint64_t timeout,
3387 VkResult result)
3388{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003389
3390
3391
3392
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003393 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003394 {
3395 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003396 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3397 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003398 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003399
3400 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003401}
3402
3403VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3404 VkDevice device,
3405 uint32_t fenceCount,
3406 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003407 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003408 uint64_t timeout)
3409{
3410 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003411
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003412 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3413
3414 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3415
3416 return result;
3417}
3418
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003419bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003420 VkDevice device,
3421 const VkSemaphoreCreateInfo* pCreateInfo)
3422{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003423 if(pCreateInfo != nullptr)
3424 {
3425 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003426 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003427 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003428 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003429 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003430 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003431 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003432
3433 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003434}
3435
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003436bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003437 VkDevice device,
3438 VkSemaphore* pSemaphore,
3439 VkResult result)
3440{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003442 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003443 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003444 }
3445
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003446 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003447 {
3448 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003449 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3450 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003451 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003452
3453 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003454}
3455
3456VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3457 VkDevice device,
3458 const VkSemaphoreCreateInfo* pCreateInfo,
3459 VkSemaphore* pSemaphore)
3460{
3461 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003462
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003463 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3464
3465 PostCreateSemaphore(device, pSemaphore, result);
3466
3467 return result;
3468}
3469
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003470bool PostDestroySemaphore(
3471 VkDevice device,
3472 VkSemaphore semaphore,
3473 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003474{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003475
3476
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003477 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003478 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003479 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3480 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3481 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003482 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003483
3484 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003485}
3486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003487VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3488 VkDevice device,
3489 VkSemaphore semaphore)
3490{
3491 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3492
3493 PostDestroySemaphore(device, semaphore, result);
3494
3495 return result;
3496}
3497
3498bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003499 VkQueue queue,
3500 VkSemaphore semaphore,
3501 VkResult result)
3502{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003503
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003504
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003505 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003506 {
3507 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003508 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3509 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003510 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003511
3512 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003513}
3514
3515VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3516 VkQueue queue,
3517 VkSemaphore semaphore)
3518{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003519 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3520
3521 PostQueueSignalSemaphore(queue, semaphore, result);
3522
3523 return result;
3524}
3525
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003526bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527 VkQueue queue,
3528 VkSemaphore semaphore,
3529 VkResult result)
3530{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003531
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003532
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003533 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003534 {
3535 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003536 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3537 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003538 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003539
3540 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003541}
3542
3543VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3544 VkQueue queue,
3545 VkSemaphore semaphore)
3546{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003547 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3548
3549 PostQueueWaitSemaphore(queue, semaphore, result);
3550
3551 return result;
3552}
3553
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003554bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003555 VkDevice device,
3556 const VkEventCreateInfo* pCreateInfo)
3557{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003558 if(pCreateInfo != nullptr)
3559 {
3560 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003561 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003562 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003563 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003564 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003565 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003566 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003567
3568 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003569}
3570
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003571bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572 VkDevice device,
3573 VkEvent* pEvent,
3574 VkResult result)
3575{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003576
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003577 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003578 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003579 }
3580
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003581 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003582 {
3583 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003584 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3585 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003586 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003587
3588 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003589}
3590
3591VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3592 VkDevice device,
3593 const VkEventCreateInfo* pCreateInfo,
3594 VkEvent* pEvent)
3595{
3596 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003597
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003598 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3599
3600 PostCreateEvent(device, pEvent, result);
3601
3602 return result;
3603}
3604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003605bool PostDestroyEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003606 VkDevice device,
3607 VkEvent event,
3608 VkResult result)
3609{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003610
3611
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003612 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003613 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003614 std::string reason = "vkDestroyEvent parameter, VkResult result, is " + EnumeratorString(result);
3615 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3616 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003617 }
3618
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003619 return true;
3620}
3621
3622VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3623 VkDevice device,
3624 VkEvent event)
3625{
3626 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3627
3628 PostDestroyEvent(device, event, result);
3629
3630 return result;
3631}
3632
3633bool PostGetEventStatus(
3634 VkDevice device,
3635 VkEvent event,
3636 VkResult result)
3637{
3638
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003639
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003640 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003641 {
3642 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003643 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3644 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003645 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003646
3647 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003648}
3649
3650VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3651 VkDevice device,
3652 VkEvent event)
3653{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003654 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3655
3656 PostGetEventStatus(device, event, result);
3657
3658 return result;
3659}
3660
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003661bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003662 VkDevice device,
3663 VkEvent event,
3664 VkResult result)
3665{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003666
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003667
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003668 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003669 {
3670 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003671 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3672 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003673 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003674
3675 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003676}
3677
3678VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3679 VkDevice device,
3680 VkEvent event)
3681{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003682 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3683
3684 PostSetEvent(device, event, result);
3685
3686 return result;
3687}
3688
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003689bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003690 VkDevice device,
3691 VkEvent event,
3692 VkResult result)
3693{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003694
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003695
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003696 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003697 {
3698 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003699 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3700 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003701 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003702
3703 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003704}
3705
3706VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3707 VkDevice device,
3708 VkEvent event)
3709{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003710 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3711
3712 PostResetEvent(device, event, result);
3713
3714 return result;
3715}
3716
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003717bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003718 VkDevice device,
3719 const VkQueryPoolCreateInfo* pCreateInfo)
3720{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003721 if(pCreateInfo != nullptr)
3722 {
3723 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003724 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003725 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003726 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003727 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003728 }
3729 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3730 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3731 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003732 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003733 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003734 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003735 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003736 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003737
3738 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003739}
3740
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003741bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003742 VkDevice device,
3743 VkQueryPool* pQueryPool,
3744 VkResult result)
3745{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003746
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003747 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003748 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003749 }
3750
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003751 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003752 {
3753 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003754 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3755 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003756 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003757
3758 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003759}
3760
3761VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3762 VkDevice device,
3763 const VkQueryPoolCreateInfo* pCreateInfo,
3764 VkQueryPool* pQueryPool)
3765{
3766 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003768 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3769
3770 PostCreateQueryPool(device, pQueryPool, result);
3771
3772 return result;
3773}
3774
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003775bool PostDestroyQueryPool(
3776 VkDevice device,
3777 VkQueryPool queryPool,
3778 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003779{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003780
3781
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003782 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003783 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003784 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3785 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3786 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003787 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003788
3789 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003790}
3791
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003792VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3793 VkDevice device,
3794 VkQueryPool queryPool)
3795{
3796 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3797
3798 PostDestroyQueryPool(device, queryPool, result);
3799
3800 return result;
3801}
3802
3803bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003804 VkDevice device,
3805 VkQueryPool queryPool,
3806 uint32_t startQuery,
3807 uint32_t queryCount,
3808 size_t* pDataSize,
3809 void* pData,
3810 VkQueryResultFlags flags,
3811 VkResult result)
3812{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003813
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003814
3815
3816
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003817 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003818 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003819 }
3820
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003821 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003822 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003823 }
3824
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003825
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003826 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003827 {
3828 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003829 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3830 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003831 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003832
3833 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003834}
3835
3836VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3837 VkDevice device,
3838 VkQueryPool queryPool,
3839 uint32_t startQuery,
3840 uint32_t queryCount,
3841 size_t* pDataSize,
3842 void* pData,
3843 VkQueryResultFlags flags)
3844{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003845 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3846
3847 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3848
3849 return result;
3850}
3851
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003852bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003853 VkDevice device,
3854 const VkBufferCreateInfo* pCreateInfo)
3855{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003856 if(pCreateInfo != nullptr)
3857 {
3858 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003859 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003860 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003861 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003862 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003863 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003864 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3865 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003866 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003867 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003868 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003869 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003870 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003871 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003872 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003873 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003874 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003875
3876 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003877}
3878
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003879bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003880 VkDevice device,
3881 VkBuffer* pBuffer,
3882 VkResult result)
3883{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003884
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003885 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003886 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003887 }
3888
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003889 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003890 {
3891 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3893 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003894 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003895
3896 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003897}
3898
3899VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3900 VkDevice device,
3901 const VkBufferCreateInfo* pCreateInfo,
3902 VkBuffer* pBuffer)
3903{
3904 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003905
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003906 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3907
3908 PostCreateBuffer(device, pBuffer, result);
3909
3910 return result;
3911}
3912
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003913bool PostDestroyBuffer(
3914 VkDevice device,
3915 VkBuffer buffer,
3916 VkResult result)
3917{
3918
3919
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003920 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003921 {
3922 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3923 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3924 return false;
3925 }
3926
3927 return true;
3928}
3929
3930VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3931 VkDevice device,
3932 VkBuffer buffer)
3933{
3934 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
3935
3936 PostDestroyBuffer(device, buffer, result);
3937
3938 return result;
3939}
3940
3941bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003942 VkDevice device,
3943 const VkBufferViewCreateInfo* pCreateInfo)
3944{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003945 if(pCreateInfo != nullptr)
3946 {
3947 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003948 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003950 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003951 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003952 }
3953 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3954 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3955 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003956 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003957 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003958 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003959 }
3960 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3961 pCreateInfo->format > VK_FORMAT_END_RANGE)
3962 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003963 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003964 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003965 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003966 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003967 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003968
3969 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003970}
3971
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003972bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003973 VkDevice device,
3974 VkBufferView* pView,
3975 VkResult result)
3976{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003977
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003978 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003979 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003980 }
3981
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003982 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003983 {
3984 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003985 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3986 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003987 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003988
3989 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003990}
3991
3992VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3993 VkDevice device,
3994 const VkBufferViewCreateInfo* pCreateInfo,
3995 VkBufferView* pView)
3996{
3997 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003998
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003999 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
4000
4001 PostCreateBufferView(device, pView, result);
4002
4003 return result;
4004}
4005
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004006bool PostDestroyBufferView(
4007 VkDevice device,
4008 VkBufferView bufferView,
4009 VkResult result)
4010{
4011
4012
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004013 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004014 {
4015 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
4016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4017 return false;
4018 }
4019
4020 return true;
4021}
4022
4023VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
4024 VkDevice device,
4025 VkBufferView bufferView)
4026{
4027 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
4028
4029 PostDestroyBufferView(device, bufferView, result);
4030
4031 return result;
4032}
4033
4034bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004035 VkDevice device,
4036 const VkImageCreateInfo* pCreateInfo)
4037{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004038 if(pCreateInfo != nullptr)
4039 {
4040 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004041 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004042 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004043 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004044 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004045 }
4046 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
4047 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
4048 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004049 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004050 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004051 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004052 }
4053 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4054 pCreateInfo->format > VK_FORMAT_END_RANGE)
4055 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004056 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004057 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004058 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004059 }
4060 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
4061 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
4062 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004063 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004064 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004065 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004066 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004067 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
4068 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004069 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004070 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4071 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004072 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004073 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004074 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004075 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004076 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004077 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004078
4079 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004080}
4081
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004082bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004083 VkDevice device,
4084 VkImage* pImage,
4085 VkResult result)
4086{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004087
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004088 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004089 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004090 }
4091
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004092 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004093 {
4094 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004095 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4096 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004097 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004098
4099 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004100}
4101
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004102VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
4103 VkDevice device,
4104 const VkImageCreateInfo* pCreateInfo,
4105 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004106{
4107 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004108
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004109 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
4110
4111 PostCreateImage(device, pImage, result);
4112
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004113 return result;
4114}
4115
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004116bool PostDestroyImage(
4117 VkDevice device,
4118 VkImage image,
4119 VkResult result)
4120{
4121
4122
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004123 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004124 {
4125 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
4126 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4127 return false;
4128 }
4129
4130 return true;
4131}
4132
4133VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
4134 VkDevice device,
4135 VkImage image)
4136{
4137 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
4138
4139 PostDestroyImage(device, image, result);
4140
4141 return result;
4142}
4143
4144bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004145 VkDevice device,
4146 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004147{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004148 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004149 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004150 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4151 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4152 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004153 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004154 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004155 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004156 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004157 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004158
4159 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004160}
4161
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004162bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004163 VkDevice device,
4164 VkImage image,
4165 VkSubresourceLayout* pLayout,
4166 VkResult result)
4167{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004168
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004169
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004170 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004171 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004172 }
4173
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004174 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004175 {
4176 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004177 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4178 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004179 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004180
4181 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004182}
4183
4184VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4185 VkDevice device,
4186 VkImage image,
4187 const VkImageSubresource* pSubresource,
4188 VkSubresourceLayout* pLayout)
4189{
4190 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004191
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004192 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4193
4194 PostGetImageSubresourceLayout(device, image, pLayout, result);
4195
4196 return result;
4197}
4198
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004199bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004200 VkDevice device,
4201 const VkImageViewCreateInfo* pCreateInfo)
4202{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004203 if(pCreateInfo != nullptr)
4204 {
4205 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004206 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004207 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004208 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004209 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004210 }
4211 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4212 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4213 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004214 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004215 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004216 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004217 }
4218 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4219 pCreateInfo->format > VK_FORMAT_END_RANGE)
4220 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004222 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004223 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004224 }
4225 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4226 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4227 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004228 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004229 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004230 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004231 }
4232 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4233 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4234 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004236 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004237 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004238 }
4239 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4240 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4241 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004243 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004244 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004245 }
4246 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4247 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4248 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004249 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004250 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004251 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004252 }
4253 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4254 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4255 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004256 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004257 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004258 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004259 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004260 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004261
4262 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004263}
4264
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004265bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004266 VkDevice device,
4267 VkImageView* pView,
4268 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004269{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004270
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004271 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004272 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004273 }
4274
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004275 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004276 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004277 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004278 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4279 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004280 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004281
4282 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004283}
4284
4285VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4286 VkDevice device,
4287 const VkImageViewCreateInfo* pCreateInfo,
4288 VkImageView* pView)
4289{
4290 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004291
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004292 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4293
4294 PostCreateImageView(device, pView, result);
4295
4296 return result;
4297}
4298
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004299bool PostDestroyImageView(
4300 VkDevice device,
4301 VkImageView imageView,
4302 VkResult result)
4303{
4304
4305
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004306 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004307 {
4308 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4309 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4310 return false;
4311 }
4312
4313 return true;
4314}
4315
4316VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4317 VkDevice device,
4318 VkImageView imageView)
4319{
4320 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4321
4322 PostDestroyImageView(device, imageView, result);
4323
4324 return result;
4325}
4326
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004327bool PostDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004328 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004329 VkShaderModule shaderModule,
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004330 VkResult result)
4331{
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004332
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004333
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004334 if(result < VK_SUCCESS)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004335 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004336 std::string reason = "vkDestroyShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4337 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4338 return false;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004339 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004340
4341 return true;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004342}
4343
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004344VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004345 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004346 VkShaderModule shaderModule)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004347{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004348 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004349
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004350 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004351
4352 return result;
4353}
4354
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004355bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004356 VkDevice device,
4357 const VkShaderCreateInfo* pCreateInfo)
4358{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004359 if(pCreateInfo != nullptr)
4360 {
4361 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004362 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004363 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004364 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004365 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004366 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004367 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004368 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004369 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004370 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004371
4372 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004373}
4374
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004375bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004376 VkDevice device,
4377 VkShader* pShader,
4378 VkResult result)
4379{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004380
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004381 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004382 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004383 }
4384
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004385 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004386 {
4387 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004388 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4389 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004390 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004391
4392 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004393}
4394
4395VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4396 VkDevice device,
4397 const VkShaderCreateInfo* pCreateInfo,
4398 VkShader* pShader)
4399{
4400 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004401
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004402 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4403
4404 PostCreateShader(device, pShader, result);
4405
4406 return result;
4407}
4408
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004409bool PostDestroyShader(
4410 VkDevice device,
4411 VkShader shader,
4412 VkResult result)
4413{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004414
4415
4416 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004417 {
4418 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4419 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4420 return false;
4421 }
4422
4423 return true;
4424}
4425
4426VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4427 VkDevice device,
4428 VkShader shader)
4429{
4430 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4431
4432 PostDestroyShader(device, shader, result);
4433
4434 return result;
4435}
4436
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004437bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004438 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004439 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004440{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004441 if(pCreateInfo != nullptr)
4442 {
4443 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004444 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004446 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004447 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004448 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004449 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004450 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004451 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004452 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004453
4454 return true;
4455}
4456
4457bool PostCreatePipelineCache(
4458 VkDevice device,
4459 VkPipelineCache* pPipelineCache,
4460 VkResult result)
4461{
4462
4463 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004464 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004465 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004466
4467 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004468 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004469 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004470 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4471 return false;
4472 }
4473
4474 return true;
4475}
4476
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004477VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06004478 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004479 const VkPipelineCacheCreateInfo* pCreateInfo,
4480 VkPipelineCache* pPipelineCache)
4481{
4482 PreCreatePipelineCache(device, pCreateInfo);
4483
4484 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4485
4486 PostCreatePipelineCache(device, pPipelineCache, result);
4487
4488 return result;
4489}
4490
4491bool PostDestroyPipelineCache(
4492 VkDevice device,
4493 VkPipelineCache pipelineCache,
Tony Barboure307f582015-07-10 15:29:03 -06004494 VkResult result)
4495{
4496
Tony Barboure307f582015-07-10 15:29:03 -06004497
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004498 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004499 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004500 std::string reason = "vkDestroyPipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004501 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4502 return false;
4503 }
4504
4505 return true;
4506}
4507
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004508VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineCache(
4509 VkDevice device,
4510 VkPipelineCache pipelineCache)
4511{
4512 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache);
4513
4514 PostDestroyPipelineCache(device, pipelineCache, result);
4515
4516 return result;
4517}
4518
4519bool PostGetPipelineCacheSize(
4520 VkDevice device,
4521 VkPipelineCache pipelineCache)
4522{
4523
4524
4525 return true;
4526}
4527
4528VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4529 VkDevice device,
4530 VkPipelineCache pipelineCache)
4531{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004532 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004533
4534 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004535
4536 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004537}
4538
4539bool PostGetPipelineCacheData(
4540 VkDevice device,
4541 VkPipelineCache pipelineCache,
4542 void* pData,
4543 VkResult result)
4544{
4545
4546
4547 if(pData != nullptr)
4548 {
4549 }
4550
4551 if(result < VK_SUCCESS)
4552 {
4553 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4554 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4555 return false;
4556 }
4557
4558 return true;
4559}
4560
4561VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4562 VkDevice device,
4563 VkPipelineCache pipelineCache,
4564 void* pData)
4565{
4566 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4567
4568 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4569
4570 return result;
4571}
4572
4573bool PreMergePipelineCaches(
4574 VkDevice device,
4575 const VkPipelineCache* pSrcCaches)
4576{
4577 if(pSrcCaches != nullptr)
4578 {
4579 }
4580
4581 return true;
4582}
4583
4584bool PostMergePipelineCaches(
4585 VkDevice device,
4586 VkPipelineCache destCache,
4587 uint32_t srcCacheCount,
4588 VkResult result)
4589{
4590
4591
4592
4593 if(result < VK_SUCCESS)
4594 {
4595 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4596 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4597 return false;
4598 }
4599
4600 return true;
4601}
4602
4603VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4604 VkDevice device,
4605 VkPipelineCache destCache,
4606 uint32_t srcCacheCount,
4607 const VkPipelineCache* pSrcCaches)
4608{
4609 PreMergePipelineCaches(device, pSrcCaches);
4610
4611 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4612
4613 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4614
4615 return result;
4616}
4617
4618bool PreCreateGraphicsPipelines(
4619 VkDevice device,
4620 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4621{
4622 if(pCreateInfos != nullptr)
4623 {
4624 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4625 {
4626 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4627 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4628 return false;
4629 }
4630 if(pCreateInfos->pStages != nullptr)
4631 {
4632 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4633 {
4634 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4635 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4636 return false;
4637 }
4638 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4639 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4640 {
4641 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4642 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4643 return false;
4644 }
4645 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4646 {
4647 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4648 {
4649 }
4650 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4651 {
4652 }
4653 }
4654 }
4655 if(pCreateInfos->pVertexInputState != nullptr)
4656 {
4657 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4658 {
4659 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4660 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4661 return false;
4662 }
4663 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4664 {
4665 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4666 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4667 {
4668 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4669 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4670 return false;
4671 }
4672 }
4673 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4674 {
4675 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4676 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4677 {
4678 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4679 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4680 return false;
4681 }
4682 }
4683 }
4684 if(pCreateInfos->pInputAssemblyState != nullptr)
4685 {
4686 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4687 {
4688 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4689 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4690 return false;
4691 }
4692 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4693 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4694 {
4695 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4696 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4697 return false;
4698 }
4699 }
4700 if(pCreateInfos->pTessellationState != nullptr)
4701 {
4702 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4703 {
4704 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4705 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4706 return false;
4707 }
4708 }
4709 if(pCreateInfos->pViewportState != nullptr)
4710 {
4711 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4712 {
4713 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4714 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4715 return false;
4716 }
4717 }
4718 if(pCreateInfos->pRasterState != nullptr)
4719 {
4720 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4721 {
4722 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4723 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4724 return false;
4725 }
4726 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4727 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4728 {
4729 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4730 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4731 return false;
4732 }
4733 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4734 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4735 {
4736 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4737 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4738 return false;
4739 }
4740 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4741 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4742 {
4743 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4744 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4745 return false;
4746 }
4747 }
4748 if(pCreateInfos->pMultisampleState != nullptr)
4749 {
4750 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4751 {
4752 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4753 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4754 return false;
4755 }
4756 }
4757 if(pCreateInfos->pDepthStencilState != nullptr)
4758 {
4759 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4760 {
4761 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4762 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4763 return false;
4764 }
4765 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4766 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4767 {
4768 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4769 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4770 return false;
4771 }
4772 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4773 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4774 {
4775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4776 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4777 return false;
4778 }
4779 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4780 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4781 {
4782 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4783 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4784 return false;
4785 }
4786 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4787 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4788 {
4789 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4790 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4791 return false;
4792 }
4793 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4794 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4795 {
4796 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4797 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4798 return false;
4799 }
4800 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4801 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4802 {
4803 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4804 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4805 return false;
4806 }
4807 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4808 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4809 {
4810 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4811 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4812 return false;
4813 }
4814 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4815 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4816 {
4817 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4818 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4819 return false;
4820 }
4821 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4822 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4823 {
4824 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4825 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4826 return false;
4827 }
4828 }
4829 if(pCreateInfos->pColorBlendState != nullptr)
4830 {
4831 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4832 {
4833 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4834 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4835 return false;
4836 }
4837 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4838 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4839 {
4840 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4841 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4842 return false;
4843 }
4844 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4845 {
4846 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4847 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4848 {
4849 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4850 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4851 return false;
4852 }
4853 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4854 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4855 {
4856 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4857 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4858 return false;
4859 }
4860 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4861 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4862 {
4863 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4864 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4865 return false;
4866 }
4867 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4868 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4869 {
4870 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4871 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4872 return false;
4873 }
4874 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4875 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4876 {
4877 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4878 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4879 return false;
4880 }
4881 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4882 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4883 {
4884 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4885 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4886 return false;
4887 }
4888 }
4889 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004890 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4891 {
4892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4893 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4894 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004895 }
4896
4897 return true;
4898}
4899
4900bool PostCreateGraphicsPipelines(
4901 VkDevice device,
4902 VkPipelineCache pipelineCache,
4903 uint32_t count,
4904 VkPipeline* pPipelines,
4905 VkResult result)
4906{
4907
4908
4909
4910 if(pPipelines != nullptr)
4911 {
4912 }
4913
4914 if(result < VK_SUCCESS)
4915 {
4916 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4917 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4918 return false;
4919 }
4920
4921 return true;
4922}
4923
4924VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4925 VkDevice device,
4926 VkPipelineCache pipelineCache,
4927 uint32_t count,
4928 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4929 VkPipeline* pPipelines)
4930{
4931 PreCreateGraphicsPipelines(device, pCreateInfos);
4932
4933 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4934
4935 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4936
4937 return result;
4938}
4939
4940bool PreCreateComputePipelines(
4941 VkDevice device,
4942 const VkComputePipelineCreateInfo* pCreateInfos)
4943{
4944 if(pCreateInfos != nullptr)
4945 {
4946 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4947 {
4948 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4949 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4950 return false;
4951 }
4952 if(pCreateInfos->cs.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4953 {
4954 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4955 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4956 return false;
4957 }
4958 if(pCreateInfos->cs.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4959 pCreateInfos->cs.stage > VK_SHADER_STAGE_END_RANGE)
4960 {
4961 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4962 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4963 return false;
4964 }
4965 if(pCreateInfos->cs.pSpecializationInfo != nullptr)
4966 {
4967 if(pCreateInfos->cs.pSpecializationInfo->pMap != nullptr)
4968 {
4969 }
4970 if(pCreateInfos->cs.pSpecializationInfo->pData != nullptr)
4971 {
4972 }
4973 }
4974 }
4975
4976 return true;
4977}
4978
4979bool PostCreateComputePipelines(
4980 VkDevice device,
4981 VkPipelineCache pipelineCache,
4982 uint32_t count,
4983 VkPipeline* pPipelines,
4984 VkResult result)
4985{
4986
4987
4988
4989 if(pPipelines != nullptr)
4990 {
4991 }
4992
4993 if(result < VK_SUCCESS)
4994 {
4995 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4996 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4997 return false;
4998 }
4999
5000 return true;
5001}
5002
5003VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
5004 VkDevice device,
5005 VkPipelineCache pipelineCache,
5006 uint32_t count,
5007 const VkComputePipelineCreateInfo* pCreateInfos,
5008 VkPipeline* pPipelines)
5009{
5010 PreCreateComputePipelines(device, pCreateInfos);
5011
5012 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5013
5014 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
5015
5016 return result;
5017}
5018
Tony Barboure307f582015-07-10 15:29:03 -06005019bool PostDestroyPipeline(
5020 VkDevice device,
5021 VkPipeline pipeline,
5022 VkResult result)
5023{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005024
5025
5026 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06005027 {
5028 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
5029 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5030 return false;
5031 }
5032
5033 return true;
5034}
5035
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005036VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5037 VkDevice device,
5038 VkPipeline pipeline)
5039{
5040 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5041
5042 PostDestroyPipeline(device, pipeline, result);
5043
5044 return result;
5045}
5046
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005047bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005048 VkDevice device,
5049 const VkPipelineLayoutCreateInfo* pCreateInfo)
5050{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005051 if(pCreateInfo != nullptr)
5052 {
5053 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005054 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005055 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005056 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5057 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005058 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005059 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005060 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005061 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005062 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005063 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005064 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005065 }
5066
5067 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005068}
5069
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005070bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005071 VkDevice device,
5072 VkPipelineLayout* pPipelineLayout,
5073 VkResult result)
5074{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005075
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005076 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005077 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005078 }
5079
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005080 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005081 {
5082 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005083 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5084 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005085 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005086
5087 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005088}
5089
5090VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5091 VkDevice device,
5092 const VkPipelineLayoutCreateInfo* pCreateInfo,
5093 VkPipelineLayout* pPipelineLayout)
5094{
5095 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005096
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005097 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5098
5099 PostCreatePipelineLayout(device, pPipelineLayout, result);
5100
5101 return result;
5102}
5103
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005104bool PostDestroyPipelineLayout(
5105 VkDevice device,
5106 VkPipelineLayout pipelineLayout,
5107 VkResult result)
5108{
5109
5110
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005111 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005112 {
5113 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5114 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5115 return false;
5116 }
5117
5118 return true;
5119}
5120
5121VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5122 VkDevice device,
5123 VkPipelineLayout pipelineLayout)
5124{
5125 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5126
5127 PostDestroyPipelineLayout(device, pipelineLayout, result);
5128
5129 return result;
5130}
5131
5132bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005133 VkDevice device,
5134 const VkSamplerCreateInfo* pCreateInfo)
5135{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005136 if(pCreateInfo != nullptr)
5137 {
5138 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005139 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005141 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005142 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005143 }
5144 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5145 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5146 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005148 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005149 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005150 }
5151 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5152 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5153 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005154 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005155 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005156 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005157 }
5158 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5159 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5160 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005161 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005162 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005163 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005164 }
5165 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5166 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5167 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005168 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005169 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005170 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005171 }
5172 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5173 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5174 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005175 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005176 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005177 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005178 }
5179 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5180 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5181 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005182 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005183 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005184 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005185 }
5186 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5187 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5188 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005189 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005190 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005191 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005192 }
5193 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5194 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5195 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005196 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005197 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005198 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005199 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005200 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005201
5202 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005203}
5204
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005205bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005206 VkDevice device,
5207 VkSampler* pSampler,
5208 VkResult result)
5209{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005210
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005211 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005212 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005213 }
5214
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005215 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005216 {
5217 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005218 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5219 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005220 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005221
5222 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005223}
5224
5225VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5226 VkDevice device,
5227 const VkSamplerCreateInfo* pCreateInfo,
5228 VkSampler* pSampler)
5229{
5230 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005231
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005232 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5233
5234 PostCreateSampler(device, pSampler, result);
5235
5236 return result;
5237}
5238
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005239bool PostDestroySampler(
5240 VkDevice device,
5241 VkSampler sampler,
5242 VkResult result)
5243{
5244
5245
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005246 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005247 {
5248 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5249 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5250 return false;
5251 }
5252
5253 return true;
5254}
5255
5256VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5257 VkDevice device,
5258 VkSampler sampler)
5259{
5260 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5261
5262 PostDestroySampler(device, sampler, result);
5263
5264 return result;
5265}
5266
5267bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005268 VkDevice device,
5269 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5270{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005271 if(pCreateInfo != nullptr)
5272 {
5273 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005274 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005275 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005276 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005277 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005278 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005279 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005280 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005281 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5282 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5283 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005284 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005285 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005286 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005287 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005288 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005289 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005290 }
5291 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005292 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005293
5294 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005295}
5296
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005297bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005298 VkDevice device,
5299 VkDescriptorSetLayout* pSetLayout,
5300 VkResult result)
5301{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005302
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005303 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005304 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005305 }
5306
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005307 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005308 {
5309 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005310 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5311 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005312 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005313
5314 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005315}
5316
5317VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5318 VkDevice device,
5319 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5320 VkDescriptorSetLayout* pSetLayout)
5321{
5322 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005323
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005324 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5325
5326 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5327
5328 return result;
5329}
5330
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005331bool PostDestroyDescriptorSetLayout(
5332 VkDevice device,
5333 VkDescriptorSetLayout descriptorSetLayout,
5334 VkResult result)
5335{
5336
5337
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005338 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005339 {
5340 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5341 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5342 return false;
5343 }
5344
5345 return true;
5346}
5347
5348VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5349 VkDevice device,
5350 VkDescriptorSetLayout descriptorSetLayout)
5351{
5352 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5353
5354 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5355
5356 return result;
5357}
5358
5359bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005360 VkDevice device,
5361 const VkDescriptorPoolCreateInfo* pCreateInfo)
5362{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005363 if(pCreateInfo != nullptr)
5364 {
5365 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005366 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005368 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005369 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005370 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005371 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005372 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005373 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5374 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5375 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005376 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005377 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005378 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005379 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005380 }
5381 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005382
5383 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005384}
5385
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005386bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005387 VkDevice device,
5388 VkDescriptorPoolUsage poolUsage,
5389 uint32_t maxSets,
5390 VkDescriptorPool* pDescriptorPool,
5391 VkResult result)
5392{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005393
5394 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5395 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5396 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005397 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005398 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005399 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005400 }
5401
5402
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005403 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005404 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005405 }
5406
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005407 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005408 {
5409 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005410 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5411 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005412 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005413
5414 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005415}
5416
5417VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5418 VkDevice device,
5419 VkDescriptorPoolUsage poolUsage,
5420 uint32_t maxSets,
5421 const VkDescriptorPoolCreateInfo* pCreateInfo,
5422 VkDescriptorPool* pDescriptorPool)
5423{
5424 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005425
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005426 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5427
5428 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5429
5430 return result;
5431}
5432
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005433bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005434 VkDevice device,
5435 VkDescriptorPool descriptorPool,
5436 VkResult result)
5437{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005438
5439
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005440 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005441 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005442 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5443 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5444 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005445 }
5446
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005447 return true;
5448}
5449
5450VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5451 VkDevice device,
5452 VkDescriptorPool descriptorPool)
5453{
5454 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5455
5456 PostDestroyDescriptorPool(device, descriptorPool, result);
5457
5458 return result;
5459}
5460
5461bool PostResetDescriptorPool(
5462 VkDevice device,
5463 VkDescriptorPool descriptorPool,
5464 VkResult result)
5465{
5466
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005467
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005468 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005469 {
5470 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005471 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5472 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005473 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005474
5475 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005476}
5477
5478VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5479 VkDevice device,
5480 VkDescriptorPool descriptorPool)
5481{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005482 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5483
5484 PostResetDescriptorPool(device, descriptorPool, result);
5485
5486 return result;
5487}
5488
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005489bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005490 VkDevice device,
5491 const VkDescriptorSetLayout* pSetLayouts)
5492{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005493 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005494 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005495 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005496
5497 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005498}
5499
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005500bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005501 VkDevice device,
5502 VkDescriptorPool descriptorPool,
5503 VkDescriptorSetUsage setUsage,
5504 uint32_t count,
5505 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005506 VkResult result)
5507{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005508
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005509
5510 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5511 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5512 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005513 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005514 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005515 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005516 }
5517
5518
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005519 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005520 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005521 }
5522
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005523 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005524 {
5525 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005526 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5527 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005528 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005529
5530 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005531}
5532
5533VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5534 VkDevice device,
5535 VkDescriptorPool descriptorPool,
5536 VkDescriptorSetUsage setUsage,
5537 uint32_t count,
5538 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06005539 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005540{
5541 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005542
Cody Northropc8aa4a52015-08-03 12:47:29 -06005543 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005544
Cody Northropc8aa4a52015-08-03 12:47:29 -06005545 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005546
5547 return result;
5548}
5549
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005550bool PreFreeDescriptorSets(
5551 VkDevice device,
5552 const VkDescriptorSet* pDescriptorSets)
5553{
5554 if(pDescriptorSets != nullptr)
5555 {
5556 }
5557
5558 return true;
5559}
5560
5561bool PostFreeDescriptorSets(
5562 VkDevice device,
5563 VkDescriptorPool descriptorPool,
5564 uint32_t count,
5565 VkResult result)
5566{
5567
5568
5569
5570 if(result < VK_SUCCESS)
5571 {
5572 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5574 return false;
5575 }
5576
5577 return true;
5578}
5579
5580VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
5581 VkDevice device,
5582 VkDescriptorPool descriptorPool,
5583 uint32_t count,
5584 const VkDescriptorSet* pDescriptorSets)
5585{
5586 PreFreeDescriptorSets(device, pDescriptorSets);
5587
5588 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
5589
5590 PostFreeDescriptorSets(device, descriptorPool, count, result);
5591
5592 return result;
5593}
5594
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005595bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005596 VkDevice device,
5597 const VkWriteDescriptorSet* pDescriptorWrites,
5598 const VkCopyDescriptorSet* pDescriptorCopies)
5599{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005600 if(pDescriptorWrites != nullptr)
5601 {
5602 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005603 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005604 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005605 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005606 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005607 }
5608 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5609 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5610 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005611 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005612 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005613 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005614 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005615 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005616 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005617 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5618 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5619 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005620 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005621 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005622 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005623 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005624 }
5625 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005626
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005627 if(pDescriptorCopies != nullptr)
5628 {
5629 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005630 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005631 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005632 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005633 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005634 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005635 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005636
5637 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005638}
5639
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005640bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005641 VkDevice device,
5642 uint32_t writeCount,
5643 uint32_t copyCount,
5644 VkResult result)
5645{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005646
5647
5648
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005649 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005650 {
5651 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005652 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5653 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005654 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005655
5656 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005657}
5658
5659VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
5660 VkDevice device,
5661 uint32_t writeCount,
5662 const VkWriteDescriptorSet* pDescriptorWrites,
5663 uint32_t copyCount,
5664 const VkCopyDescriptorSet* pDescriptorCopies)
5665{
5666 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005667
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005668 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
5669
5670 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
5671
5672 return result;
5673}
5674
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005675bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005676 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005677 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005678{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005679 if(pCreateInfo != nullptr)
5680 {
5681 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005682 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005683 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005684 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005685 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005686 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005687 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005688 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005689 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005690 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005691 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005692 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005693 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005694
5695 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005696}
5697
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005698bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005699 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005700 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005701 VkResult result)
5702{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005703
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005704 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005705 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005706 }
5707
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005708 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005709 {
5710 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005711 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5712 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005713 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005714
5715 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005716}
5717
5718VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5719 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005720 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5721 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005722{
5723 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005724
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005725 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5726
5727 PostCreateDynamicViewportState(device, pState, result);
5728
5729 return result;
5730}
5731
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005732bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005733 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005734 VkDynamicViewportState dynamicViewportState,
5735 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005736{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005737
5738
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005739 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005740 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005741 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
5742 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5743 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005744 }
5745
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005746 return true;
5747}
5748
5749VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
5750 VkDevice device,
5751 VkDynamicViewportState dynamicViewportState)
5752{
5753 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
5754
5755 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
5756
5757 return result;
5758}
5759
Cody Northrope4bc6942015-08-26 10:01:32 -06005760bool PreCreateDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005761 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005762 const VkDynamicLineWidthStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005763{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005764 if(pCreateInfo != nullptr)
5765 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005766 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005767 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005768 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005769 "vkCreateDynamicLineWidthState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005770 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005771 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005773
5774 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005775}
5776
Cody Northrope4bc6942015-08-26 10:01:32 -06005777bool PostCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005778 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005779 VkDynamicLineWidthState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005780 VkResult result)
5781{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005782
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005783 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005784 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005785 }
5786
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005787 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005788 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005789 std::string reason = "vkCreateDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005790 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5791 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005792 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005793
5794 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005795}
5796
Cody Northrope4bc6942015-08-26 10:01:32 -06005797VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005798 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005799 const VkDynamicLineWidthStateCreateInfo* pCreateInfo,
5800 VkDynamicLineWidthState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005801{
Cody Northrope4bc6942015-08-26 10:01:32 -06005802 PreCreateDynamicLineWidthState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005803
Cody Northrope4bc6942015-08-26 10:01:32 -06005804 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005805
Cody Northrope4bc6942015-08-26 10:01:32 -06005806 PostCreateDynamicLineWidthState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807
5808 return result;
5809}
5810
Cody Northrope4bc6942015-08-26 10:01:32 -06005811bool PostDestroyDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005812 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005813 VkDynamicLineWidthState dynamicLineWidthState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005814 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005815{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005816
5817
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005818 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005819 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005820 std::string reason = "vkDestroyDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005821 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5822 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005823 }
5824
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005825 return true;
5826}
5827
Cody Northrope4bc6942015-08-26 10:01:32 -06005828VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005829 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005830 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005831{
Cody Northrope4bc6942015-08-26 10:01:32 -06005832 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicLineWidthState(device, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005833
Cody Northrope4bc6942015-08-26 10:01:32 -06005834 PostDestroyDynamicLineWidthState(device, dynamicLineWidthState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005835
5836 return result;
5837}
5838
Cody Northrope4bc6942015-08-26 10:01:32 -06005839bool PreCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005840 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005841 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo)
Cody Northropf5bd2252015-08-17 11:10:49 -06005842{
5843 if(pCreateInfo != nullptr)
5844 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005845 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO)
Cody Northropf5bd2252015-08-17 11:10:49 -06005846 {
5847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005848 "vkCreateDynamicDepthBiasState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Cody Northropf5bd2252015-08-17 11:10:49 -06005849 return false;
5850 }
5851 }
5852
5853 return true;
5854}
5855
Cody Northrope4bc6942015-08-26 10:01:32 -06005856bool PostCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005857 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005858 VkDynamicDepthBiasState* pState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005859 VkResult result)
5860{
5861
5862 if(pState != nullptr)
5863 {
5864 }
5865
5866 if(result < VK_SUCCESS)
5867 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005868 std::string reason = "vkCreateDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005869 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5870 return false;
5871 }
5872
5873 return true;
5874}
5875
Cody Northrope4bc6942015-08-26 10:01:32 -06005876VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005877 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005878 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo,
5879 VkDynamicDepthBiasState* pState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005880{
Cody Northrope4bc6942015-08-26 10:01:32 -06005881 PreCreateDynamicDepthBiasState(device, pCreateInfo);
Cody Northropf5bd2252015-08-17 11:10:49 -06005882
Cody Northrope4bc6942015-08-26 10:01:32 -06005883 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005884
Cody Northrope4bc6942015-08-26 10:01:32 -06005885 PostCreateDynamicDepthBiasState(device, pState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005886
5887 return result;
5888}
5889
Cody Northrope4bc6942015-08-26 10:01:32 -06005890bool PostDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005891 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005892 VkDynamicDepthBiasState dynamicDepthBiasState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005893 VkResult result)
5894{
5895
5896
5897 if(result < VK_SUCCESS)
5898 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005899 std::string reason = "vkDestroyDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005900 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5901 return false;
5902 }
5903
5904 return true;
5905}
5906
Cody Northrope4bc6942015-08-26 10:01:32 -06005907VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005908 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005909 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005910{
Cody Northrope4bc6942015-08-26 10:01:32 -06005911 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBiasState(device, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005912
Cody Northrope4bc6942015-08-26 10:01:32 -06005913 PostDestroyDynamicDepthBiasState(device, dynamicDepthBiasState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005914
5915 return result;
5916}
5917
Cody Northrope4bc6942015-08-26 10:01:32 -06005918bool PreCreateDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005919 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005920 const VkDynamicBlendStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005921{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005922 if(pCreateInfo != nullptr)
5923 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005924 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005925 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005926 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005927 "vkCreateDynamicBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005928 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005929 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005930 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005931
5932 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005933}
5934
Cody Northrope4bc6942015-08-26 10:01:32 -06005935bool PostCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005936 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005937 VkDynamicBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005938 VkResult result)
5939{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005940
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005941 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005942 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005943 }
5944
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005945 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005946 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005947 std::string reason = "vkCreateDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005948 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5949 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005950 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005951
5952 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005953}
5954
Cody Northrope4bc6942015-08-26 10:01:32 -06005955VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005956 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005957 const VkDynamicBlendStateCreateInfo* pCreateInfo,
5958 VkDynamicBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005959{
Cody Northrope4bc6942015-08-26 10:01:32 -06005960 PreCreateDynamicBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005961
Cody Northrope4bc6942015-08-26 10:01:32 -06005962 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005963
Cody Northrope4bc6942015-08-26 10:01:32 -06005964 PostCreateDynamicBlendState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005965
5966 return result;
5967}
5968
Cody Northrope4bc6942015-08-26 10:01:32 -06005969bool PostDestroyDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005970 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005971 VkDynamicBlendState dynamicBlendState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005972 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005973{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005974
5975
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005976 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005977 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005978 std::string reason = "vkDestroyDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005979 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5980 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005981 }
5982
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005983 return true;
5984}
5985
Cody Northrope4bc6942015-08-26 10:01:32 -06005986VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005987 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005988 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005989{
Cody Northrope4bc6942015-08-26 10:01:32 -06005990 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicBlendState(device, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005991
Cody Northrope4bc6942015-08-26 10:01:32 -06005992 PostDestroyDynamicBlendState(device, dynamicBlendState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005993
5994 return result;
5995}
5996
Cody Northrope4bc6942015-08-26 10:01:32 -06005997bool PreCreateDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005998 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005999 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006000{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006001 if(pCreateInfo != nullptr)
6002 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006003 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006004 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006005 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06006006 "vkCreateDynamicDepthBoundsState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006007 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006008 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006009 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006010
6011 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006012}
6013
Cody Northrope4bc6942015-08-26 10:01:32 -06006014bool PostCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006015 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006016 VkDynamicDepthBoundsState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006017 VkResult result)
6018{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006019
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006020 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006021 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006022 }
6023
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006024 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006025 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006026 std::string reason = "vkCreateDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006027 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6028 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006029 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006030
6031 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006032}
6033
Cody Northrope4bc6942015-08-26 10:01:32 -06006034VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006035 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006036 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo,
6037 VkDynamicDepthBoundsState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006038{
Cody Northrope4bc6942015-08-26 10:01:32 -06006039 PreCreateDynamicDepthBoundsState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006040
Cody Northrope4bc6942015-08-26 10:01:32 -06006041 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006042
Cody Northrope4bc6942015-08-26 10:01:32 -06006043 PostCreateDynamicDepthBoundsState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006044
6045 return result;
6046}
6047
Cody Northrope4bc6942015-08-26 10:01:32 -06006048bool PostDestroyDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006049 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006050 VkDynamicDepthBoundsState dynamicDepthBoundsState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006051 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006052{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006053 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006054 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006055 std::string reason = "vkDestroyDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006056 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6057 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006058 }
6059
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006060 return true;
6061}
6062
Cody Northrope4bc6942015-08-26 10:01:32 -06006063VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006064 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006065 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006066{
Cody Northrope4bc6942015-08-26 10:01:32 -06006067 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006068
Cody Northrope4bc6942015-08-26 10:01:32 -06006069 PostDestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState, result);
Cody Northrop2605cb02015-08-18 15:21:16 -06006070
6071 return result;
6072}
6073
6074bool PreCreateDynamicStencilState(
6075 VkDevice device,
6076 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
6077 const VkDynamicStencilStateCreateInfo* pCreateInfoBack)
6078{
6079 if(pCreateInfoFront != nullptr)
6080 {
6081 if(pCreateInfoFront->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
6082 {
6083 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6084 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoFront->sType, is an invalid enumerator");
6085 return false;
6086 }
6087 }
6088
6089 if(pCreateInfoBack != nullptr)
6090 {
6091 if(pCreateInfoBack->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
6092 {
6093 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6094 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoBack->sType, is an invalid enumerator");
6095 return false;
6096 }
6097 }
6098
6099 return true;
6100}
6101
6102bool PostCreateDynamicStencilState(
6103 VkDevice device,
6104 VkDynamicStencilState* pState,
6105 VkResult result)
6106{
6107
6108 if(pState != nullptr)
6109 {
6110 }
6111
6112 if(result < VK_SUCCESS)
6113 {
6114 std::string reason = "vkCreateDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6116 return false;
6117 }
6118
6119 return true;
6120}
6121
6122VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
6123 VkDevice device,
6124 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
6125 const VkDynamicStencilStateCreateInfo* pCreateInfoBack,
6126 VkDynamicStencilState* pState)
6127{
6128 PreCreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack);
6129
6130 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
6131
6132 PostCreateDynamicStencilState(device, pState, result);
6133
6134 return result;
6135}
6136
6137bool PostDestroyDynamicStencilState(
6138 VkDevice device,
6139 VkDynamicStencilState dynamicStencilState,
6140 VkResult result)
6141{
6142 if(result < VK_SUCCESS)
6143 {
6144 std::string reason = "vkDestroyDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6145 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6146 return false;
6147 }
6148
6149 return true;
6150}
6151
6152VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicStencilState(
6153 VkDevice device,
6154 VkDynamicStencilState dynamicStencilState)
6155{
6156 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicStencilState(device, dynamicStencilState);
6157
6158 PostDestroyDynamicStencilState(device, dynamicStencilState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006159
6160 return result;
6161}
6162
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006163bool PreCreateFramebuffer(
6164 VkDevice device,
6165 const VkFramebufferCreateInfo* pCreateInfo)
6166{
6167 if(pCreateInfo != nullptr)
6168 {
6169 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
6170 {
6171 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6172 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6173 return false;
6174 }
6175 if(pCreateInfo->pAttachments != nullptr)
6176 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006177 }
6178 }
6179
6180 return true;
6181}
6182
6183bool PostCreateFramebuffer(
6184 VkDevice device,
6185 VkFramebuffer* pFramebuffer,
6186 VkResult result)
6187{
6188
6189 if(pFramebuffer != nullptr)
6190 {
6191 }
6192
6193 if(result < VK_SUCCESS)
6194 {
6195 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6196 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6197 return false;
6198 }
6199
6200 return true;
6201}
6202
6203VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
6204 VkDevice device,
6205 const VkFramebufferCreateInfo* pCreateInfo,
6206 VkFramebuffer* pFramebuffer)
6207{
6208 PreCreateFramebuffer(device, pCreateInfo);
6209
6210 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
6211
6212 PostCreateFramebuffer(device, pFramebuffer, result);
6213
6214 return result;
6215}
6216
6217bool PostDestroyFramebuffer(
6218 VkDevice device,
6219 VkFramebuffer framebuffer,
6220 VkResult result)
6221{
6222
6223
6224 if(result < VK_SUCCESS)
6225 {
6226 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6227 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6228 return false;
6229 }
6230
6231 return true;
6232}
6233
6234VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
6235 VkDevice device,
6236 VkFramebuffer framebuffer)
6237{
6238 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
6239
6240 PostDestroyFramebuffer(device, framebuffer, result);
6241
6242 return result;
6243}
6244
6245bool PreCreateRenderPass(
6246 VkDevice device,
6247 const VkRenderPassCreateInfo* pCreateInfo)
6248{
6249 if(pCreateInfo != nullptr)
6250 {
6251 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
6252 {
6253 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6254 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6255 return false;
6256 }
6257 if(pCreateInfo->pAttachments != nullptr)
6258 {
6259 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
6260 {
6261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6262 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
6263 return false;
6264 }
6265 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
6266 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
6267 {
6268 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6269 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
6270 return false;
6271 }
6272 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6273 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6274 {
6275 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6276 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
6277 return false;
6278 }
6279 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6280 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6281 {
6282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6283 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
6284 return false;
6285 }
6286 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6287 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6288 {
6289 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6290 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
6291 return false;
6292 }
6293 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6294 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6295 {
6296 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6297 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
6298 return false;
6299 }
6300 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6301 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
6302 {
6303 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6304 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
6305 return false;
6306 }
6307 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6308 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
6309 {
6310 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6311 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
6312 return false;
6313 }
6314 }
6315 if(pCreateInfo->pSubpasses != nullptr)
6316 {
6317 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
6318 {
6319 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6320 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
6321 return false;
6322 }
6323 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6324 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6325 {
6326 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6327 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
6328 return false;
6329 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006330 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006331 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006332 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6333 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006334 {
6335 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006336 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006337 return false;
6338 }
6339 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006340 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006341 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006342 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6343 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006344 {
6345 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006346 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006347 return false;
6348 }
6349 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006350 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006351 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006352 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6353 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006354 {
6355 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006356 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006357 return false;
6358 }
6359 }
6360 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6361 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
6362 {
6363 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6364 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
6365 return false;
6366 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006367 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006368 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006369 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6370 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006371 {
6372 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006373 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006374 return false;
6375 }
6376 }
6377 }
6378 if(pCreateInfo->pDependencies != nullptr)
6379 {
6380 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
6381 {
6382 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6383 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
6384 return false;
6385 }
6386 }
6387 }
6388
6389 return true;
6390}
6391
6392bool PostCreateRenderPass(
6393 VkDevice device,
6394 VkRenderPass* pRenderPass,
6395 VkResult result)
6396{
6397
6398 if(pRenderPass != nullptr)
6399 {
6400 }
6401
6402 if(result < VK_SUCCESS)
6403 {
6404 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6405 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6406 return false;
6407 }
6408
6409 return true;
6410}
6411
6412VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
6413 VkDevice device,
6414 const VkRenderPassCreateInfo* pCreateInfo,
6415 VkRenderPass* pRenderPass)
6416{
6417 PreCreateRenderPass(device, pCreateInfo);
6418
6419 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
6420
6421 PostCreateRenderPass(device, pRenderPass, result);
6422
6423 return result;
6424}
6425
6426bool PostDestroyRenderPass(
6427 VkDevice device,
6428 VkRenderPass renderPass,
6429 VkResult result)
6430{
6431
6432
6433 if(result < VK_SUCCESS)
6434 {
6435 std::string reason = "vkDestroyRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6436 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6437 return false;
6438 }
6439
6440 return true;
6441}
6442
6443VK_LAYER_EXPORT VkResult VKAPI vkDestroyRenderPass(
6444 VkDevice device,
6445 VkRenderPass renderPass)
6446{
6447 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass);
6448
6449 PostDestroyRenderPass(device, renderPass, result);
6450
6451 return result;
6452}
6453
6454bool PostGetRenderAreaGranularity(
6455 VkDevice device,
6456 VkRenderPass renderPass,
6457 VkExtent2D* pGranularity,
6458 VkResult result)
6459{
6460
6461
6462 if(pGranularity != nullptr)
6463 {
6464 }
6465
6466 if(result < VK_SUCCESS)
6467 {
6468 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
6469 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6470 return false;
6471 }
6472
6473 return true;
6474}
6475
6476VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
6477 VkDevice device,
6478 VkRenderPass renderPass,
6479 VkExtent2D* pGranularity)
6480{
6481 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
6482
6483 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
6484
6485 return result;
6486}
6487
6488bool PreCreateCommandPool(
6489 VkDevice device,
6490 const VkCmdPoolCreateInfo* pCreateInfo)
6491{
6492 if(pCreateInfo != nullptr)
6493 {
6494 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
6495 {
6496 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6497 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6498 return false;
6499 }
6500 }
6501
6502 return true;
6503}
6504
6505bool PostCreateCommandPool(
6506 VkDevice device,
6507 VkCmdPool* pCmdPool,
6508 VkResult result)
6509{
6510
6511 if(pCmdPool != nullptr)
6512 {
6513 }
6514
6515 if(result < VK_SUCCESS)
6516 {
6517 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6518 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6519 return false;
6520 }
6521
6522 return true;
6523}
6524
6525VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
6526 VkDevice device,
6527 const VkCmdPoolCreateInfo* pCreateInfo,
6528 VkCmdPool* pCmdPool)
6529{
6530 PreCreateCommandPool(device, pCreateInfo);
6531
6532 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
6533
6534 PostCreateCommandPool(device, pCmdPool, result);
6535
6536 return result;
6537}
6538
6539bool PostDestroyCommandPool(
6540 VkDevice device,
6541 VkCmdPool cmdPool,
6542 VkResult result)
6543{
6544
6545
6546 if(result < VK_SUCCESS)
6547 {
6548 std::string reason = "vkDestroyCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6549 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6550 return false;
6551 }
6552
6553 return true;
6554}
6555
6556VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandPool(
6557 VkDevice device,
6558 VkCmdPool cmdPool)
6559{
6560 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, cmdPool);
6561
6562 PostDestroyCommandPool(device, cmdPool, result);
6563
6564 return result;
6565}
6566
6567bool PostResetCommandPool(
6568 VkDevice device,
6569 VkCmdPool cmdPool,
6570 VkCmdPoolResetFlags flags,
6571 VkResult result)
6572{
6573
6574
6575
6576 if(result < VK_SUCCESS)
6577 {
6578 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6579 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6580 return false;
6581 }
6582
6583 return true;
6584}
6585
6586VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
6587 VkDevice device,
6588 VkCmdPool cmdPool,
6589 VkCmdPoolResetFlags flags)
6590{
6591 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
6592
6593 PostResetCommandPool(device, cmdPool, flags, result);
6594
6595 return result;
6596}
6597
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006598bool PreCreateCommandBuffer(
6599 VkDevice device,
6600 const VkCmdBufferCreateInfo* pCreateInfo)
6601{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006602 if(pCreateInfo != nullptr)
6603 {
6604 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006605 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006606 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006607 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006608 return false;
6609 }
6610 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6611 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6612 {
6613 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006614 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006615 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006616 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006617 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006618
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006619 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006620}
6621
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006622bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006623 VkDevice device,
6624 VkCmdBuffer* pCmdBuffer,
6625 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006626{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006627
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006628 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006629 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006630 }
6631
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006632 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006633 {
6634 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006635 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6636 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006637 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006638
6639 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006640}
6641
6642VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6643 VkDevice device,
6644 const VkCmdBufferCreateInfo* pCreateInfo,
6645 VkCmdBuffer* pCmdBuffer)
6646{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006647 PreCreateCommandBuffer(device, pCreateInfo);
6648
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006649 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6650
6651 PostCreateCommandBuffer(device, pCmdBuffer, result);
6652
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006653 return result;
6654}
6655
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006656bool PostDestroyCommandBuffer(
6657 VkDevice device,
6658 VkCmdBuffer commandBuffer,
6659 VkResult result)
6660{
6661
6662
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006663 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006664 {
6665 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6666 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6667 return false;
6668 }
6669
6670 return true;
6671}
6672
6673VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6674 VkDevice device,
6675 VkCmdBuffer commandBuffer)
6676{
6677 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6678
6679 PostDestroyCommandBuffer(device, commandBuffer, result);
6680
6681 return result;
6682}
6683
6684bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006685 VkCmdBuffer cmdBuffer,
6686 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006687{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006688 if(pBeginInfo != nullptr)
6689 {
6690 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006691 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006692 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006693 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006694 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006695 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006696 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006697
6698 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006699}
6700
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006701bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006702 VkCmdBuffer cmdBuffer,
6703 VkResult result)
6704{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006705
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006706 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006707 {
6708 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006709 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6710 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006711 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006712
6713 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006714}
6715
6716VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6717 VkCmdBuffer cmdBuffer,
6718 const VkCmdBufferBeginInfo* pBeginInfo)
6719{
6720 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006721
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006722 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6723
6724 PostBeginCommandBuffer(cmdBuffer, result);
6725
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006726 return result;
6727}
6728
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006729bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006730 VkCmdBuffer cmdBuffer,
6731 VkResult result)
6732{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006733
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006734 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006735 {
6736 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006737 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6738 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006739 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006740
6741 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006742}
6743
6744VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6745 VkCmdBuffer cmdBuffer)
6746{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006747 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6748
6749 PostEndCommandBuffer(cmdBuffer, result);
6750
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006751 return result;
6752}
6753
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006754bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006755 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006756 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006757 VkResult result)
6758{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006759
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006760
6761 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006762 {
6763 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006764 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6765 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006766 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006767
6768 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006769}
6770
6771VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006772 VkCmdBuffer cmdBuffer,
6773 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006774{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006775 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006776
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006777 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006778
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006779 return result;
6780}
6781
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006782bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006783 VkCmdBuffer cmdBuffer,
6784 VkPipelineBindPoint pipelineBindPoint,
6785 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006786{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006787
6788 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6789 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6790 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006791 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006792 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006793 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006794 }
6795
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006796
6797 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006798}
6799
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006800VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6801 VkCmdBuffer cmdBuffer,
6802 VkPipelineBindPoint pipelineBindPoint,
6803 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006804{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006805 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6806
6807 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6808}
6809
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006810bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006811 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006812 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006813{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006814
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006815
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006816 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006817}
6818
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006819VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006820 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006821 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006822{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006823 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006824
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006825 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006826}
6827
Cody Northrope4bc6942015-08-26 10:01:32 -06006828bool PostCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006829 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006830 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006831{
6832
6833
6834 return true;
6835}
6836
Cody Northrope4bc6942015-08-26 10:01:32 -06006837VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006838 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006839 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006840{
Cody Northrope4bc6942015-08-26 10:01:32 -06006841 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006842
Cody Northrope4bc6942015-08-26 10:01:32 -06006843 PostCmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006844}
6845
Cody Northrope4bc6942015-08-26 10:01:32 -06006846bool PostCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006847 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006848 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006849{
6850
6851
6852 return true;
6853}
6854
Cody Northrope4bc6942015-08-26 10:01:32 -06006855VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006856 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006857 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006858{
Cody Northrope4bc6942015-08-26 10:01:32 -06006859 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006860
Cody Northrope4bc6942015-08-26 10:01:32 -06006861 PostCmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006862}
6863
Cody Northrope4bc6942015-08-26 10:01:32 -06006864bool PostCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006865 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006866 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006867{
6868
6869
6870 return true;
6871}
6872
Cody Northrope4bc6942015-08-26 10:01:32 -06006873VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006874 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006875 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006876{
Cody Northrope4bc6942015-08-26 10:01:32 -06006877 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006878
Cody Northrope4bc6942015-08-26 10:01:32 -06006879 PostCmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006880}
6881
Cody Northrope4bc6942015-08-26 10:01:32 -06006882bool PostCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006883 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006884 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006885{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006886 return true;
6887}
6888
Cody Northrope4bc6942015-08-26 10:01:32 -06006889VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006890 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006891 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006892{
Cody Northrope4bc6942015-08-26 10:01:32 -06006893 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006894
Cody Northrope4bc6942015-08-26 10:01:32 -06006895 PostCmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Cody Northrop2605cb02015-08-18 15:21:16 -06006896}
6897
6898bool PostCmdBindDynamicStencilState(
6899 VkCmdBuffer cmdBuffer,
6900 VkDynamicStencilState dynamicStencilState)
6901{
6902 return true;
6903}
6904
6905VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(
6906 VkCmdBuffer cmdBuffer,
6907 VkDynamicStencilState dynamicStencilState)
6908{
6909 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
6910
6911 PostCmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006912}
6913
6914bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006915 VkCmdBuffer cmdBuffer,
6916 const VkDescriptorSet* pDescriptorSets,
6917 const uint32_t* pDynamicOffsets)
6918{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006919 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006920 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006921 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006922
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006923 if(pDynamicOffsets != nullptr)
6924 {
6925 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006926
6927 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006928}
6929
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006930bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006931 VkCmdBuffer cmdBuffer,
6932 VkPipelineBindPoint pipelineBindPoint,
6933 VkPipelineLayout layout,
6934 uint32_t firstSet,
6935 uint32_t setCount,
6936 uint32_t dynamicOffsetCount)
6937{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006938
6939 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6940 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6941 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006942 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006943 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006944 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006945 }
6946
6947
6948
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006949
6950
6951 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006952}
6953
6954VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6955 VkCmdBuffer cmdBuffer,
6956 VkPipelineBindPoint pipelineBindPoint,
6957 VkPipelineLayout layout,
6958 uint32_t firstSet,
6959 uint32_t setCount,
6960 const VkDescriptorSet* pDescriptorSets,
6961 uint32_t dynamicOffsetCount,
6962 const uint32_t* pDynamicOffsets)
6963{
6964 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006965
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006966 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6967
6968 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6969}
6970
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006971bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006972 VkCmdBuffer cmdBuffer,
6973 VkBuffer buffer,
6974 VkDeviceSize offset,
6975 VkIndexType indexType)
6976{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006977
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006978
6979
6980 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6981 indexType > VK_INDEX_TYPE_END_RANGE)
6982 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006983 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006984 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006985 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006986 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006987
6988 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006989}
6990
6991VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6992 VkCmdBuffer cmdBuffer,
6993 VkBuffer buffer,
6994 VkDeviceSize offset,
6995 VkIndexType indexType)
6996{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006997 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6998
6999 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7000}
7001
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007002bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007003 VkCmdBuffer cmdBuffer,
7004 const VkBuffer* pBuffers,
7005 const VkDeviceSize* pOffsets)
7006{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007007 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007008 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007009 }
7010
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007011 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007012 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007013 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007014
7015 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007016}
7017
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007018bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007019 VkCmdBuffer cmdBuffer,
7020 uint32_t startBinding,
7021 uint32_t bindingCount)
7022{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007023
7024
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007025
7026 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007027}
7028
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06007029VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007030 VkCmdBuffer cmdBuffer,
7031 uint32_t startBinding,
7032 uint32_t bindingCount,
7033 const VkBuffer* pBuffers,
7034 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007035{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007036 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007037
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007038 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
7039
7040 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007041}
7042
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007043bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007044 VkCmdBuffer cmdBuffer,
7045 uint32_t firstVertex,
7046 uint32_t vertexCount,
7047 uint32_t firstInstance,
7048 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007049{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007050
7051
7052
7053
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007054
7055 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007056}
7057
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007058VK_LAYER_EXPORT void VKAPI vkCmdDraw(
7059 VkCmdBuffer cmdBuffer,
7060 uint32_t firstVertex,
7061 uint32_t vertexCount,
7062 uint32_t firstInstance,
7063 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007064{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007065 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
7066
7067 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007068}
7069
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007070bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007071 VkCmdBuffer cmdBuffer,
7072 uint32_t firstIndex,
7073 uint32_t indexCount,
7074 int32_t vertexOffset,
7075 uint32_t firstInstance,
7076 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007077{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007078
7079
7080
7081
7082
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007083
7084 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007085}
7086
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007087VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7088 VkCmdBuffer cmdBuffer,
7089 uint32_t firstIndex,
7090 uint32_t indexCount,
7091 int32_t vertexOffset,
7092 uint32_t firstInstance,
7093 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007094{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007095 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7096
7097 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7098}
7099
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007100bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007101 VkCmdBuffer cmdBuffer,
7102 VkBuffer buffer,
7103 VkDeviceSize offset,
7104 uint32_t count,
7105 uint32_t stride)
7106{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007107
7108
7109
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007110
7111
7112 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007113}
7114
7115VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7116 VkCmdBuffer cmdBuffer,
7117 VkBuffer buffer,
7118 VkDeviceSize offset,
7119 uint32_t count,
7120 uint32_t stride)
7121{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007122 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7123
7124 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7125}
7126
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007127bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007128 VkCmdBuffer cmdBuffer,
7129 VkBuffer buffer,
7130 VkDeviceSize offset,
7131 uint32_t count,
7132 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007133{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007134
7135
7136
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007137
7138
7139 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007140}
7141
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007142VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7143 VkCmdBuffer cmdBuffer,
7144 VkBuffer buffer,
7145 VkDeviceSize offset,
7146 uint32_t count,
7147 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007148{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007149 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7150
7151 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7152}
7153
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007154bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007155 VkCmdBuffer cmdBuffer,
7156 uint32_t x,
7157 uint32_t y,
7158 uint32_t z)
7159{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007160
7161
7162
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007163
7164 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007165}
7166
7167VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7168 VkCmdBuffer cmdBuffer,
7169 uint32_t x,
7170 uint32_t y,
7171 uint32_t z)
7172{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007173 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7174
7175 PostCmdDispatch(cmdBuffer, x, y, z);
7176}
7177
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007178bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007179 VkCmdBuffer cmdBuffer,
7180 VkBuffer buffer,
7181 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007182{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007183
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007184
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007185
7186 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007187}
7188
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007189VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7190 VkCmdBuffer cmdBuffer,
7191 VkBuffer buffer,
7192 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007193{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007194 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7195
7196 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007197}
7198
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007199bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007200 VkCmdBuffer cmdBuffer,
7201 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007202{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007203 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007204 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007205 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007206
7207 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007208}
7209
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007210bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007211 VkCmdBuffer cmdBuffer,
7212 VkBuffer srcBuffer,
7213 VkBuffer destBuffer,
7214 uint32_t regionCount)
7215{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007216
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007217
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007218
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007219
7220 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007221}
7222
7223VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7224 VkCmdBuffer cmdBuffer,
7225 VkBuffer srcBuffer,
7226 VkBuffer destBuffer,
7227 uint32_t regionCount,
7228 const VkBufferCopy* pRegions)
7229{
7230 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007231
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007232 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7233
7234 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7235}
7236
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007237bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007238 VkCmdBuffer cmdBuffer,
7239 const VkImageCopy* pRegions)
7240{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007241 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007242 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007243 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7244 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7245 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007246 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007247 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007248 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007249 }
7250 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7251 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7252 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007253 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007254 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007255 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007256 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007257 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007258
7259 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007260}
7261
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007262bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007263 VkCmdBuffer cmdBuffer,
7264 VkImage srcImage,
7265 VkImageLayout srcImageLayout,
7266 VkImage destImage,
7267 VkImageLayout destImageLayout,
7268 uint32_t regionCount)
7269{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007270
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007271
7272 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7273 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7274 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007275 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007276 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007277 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007278 }
7279
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007280
7281 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7282 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7283 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007284 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007285 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007286 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007287 }
7288
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007289
7290 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007291}
7292
7293VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7294 VkCmdBuffer cmdBuffer,
7295 VkImage srcImage,
7296 VkImageLayout srcImageLayout,
7297 VkImage destImage,
7298 VkImageLayout destImageLayout,
7299 uint32_t regionCount,
7300 const VkImageCopy* pRegions)
7301{
7302 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007303
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007304 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7305
7306 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7307}
7308
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007309bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007310 VkCmdBuffer cmdBuffer,
7311 const VkImageBlit* pRegions)
7312{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007313 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007314 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007315 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7316 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7317 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007318 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007319 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007320 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007321 }
7322 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7323 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7324 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007325 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007326 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007327 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007328 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007329 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007330
7331 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007332}
7333
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007334bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007335 VkCmdBuffer cmdBuffer,
7336 VkImage srcImage,
7337 VkImageLayout srcImageLayout,
7338 VkImage destImage,
7339 VkImageLayout destImageLayout,
7340 uint32_t regionCount,
7341 VkTexFilter filter)
7342{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007343
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007344
7345 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7346 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7347 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007348 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007349 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007350 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007351 }
7352
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007353
7354 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7355 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7356 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007357 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007358 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007359 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007360 }
7361
7362
7363 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7364 filter > VK_TEX_FILTER_END_RANGE)
7365 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007366 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007367 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007368 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007369 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007370
7371 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007372}
7373
7374VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7375 VkCmdBuffer cmdBuffer,
7376 VkImage srcImage,
7377 VkImageLayout srcImageLayout,
7378 VkImage destImage,
7379 VkImageLayout destImageLayout,
7380 uint32_t regionCount,
7381 const VkImageBlit* pRegions,
7382 VkTexFilter filter)
7383{
7384 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007385
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007386 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7387
7388 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7389}
7390
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007391bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007392 VkCmdBuffer cmdBuffer,
7393 const VkBufferImageCopy* pRegions)
7394{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007395 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007396 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007397 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7398 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7399 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007400 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007401 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007402 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007403 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007404 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007405
7406 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007407}
7408
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007409bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007410 VkCmdBuffer cmdBuffer,
7411 VkBuffer srcBuffer,
7412 VkImage destImage,
7413 VkImageLayout destImageLayout,
7414 uint32_t regionCount)
7415{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007416
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007417
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007418
7419 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7420 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7421 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007422 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007423 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007424 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007425 }
7426
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007427
7428 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007429}
7430
7431VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7432 VkCmdBuffer cmdBuffer,
7433 VkBuffer srcBuffer,
7434 VkImage destImage,
7435 VkImageLayout destImageLayout,
7436 uint32_t regionCount,
7437 const VkBufferImageCopy* pRegions)
7438{
7439 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007440
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007441 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7442
7443 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7444}
7445
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007446bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007447 VkCmdBuffer cmdBuffer,
7448 const VkBufferImageCopy* pRegions)
7449{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007450 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007451 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007452 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7453 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7454 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007455 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007456 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007457 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007458 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007459 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007460
7461 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007462}
7463
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007464bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007465 VkCmdBuffer cmdBuffer,
7466 VkImage srcImage,
7467 VkImageLayout srcImageLayout,
7468 VkBuffer destBuffer,
7469 uint32_t regionCount)
7470{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007471
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007472
7473 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7474 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7475 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007476 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007477 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007478 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007479 }
7480
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007482
7483 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007484}
7485
7486VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7487 VkCmdBuffer cmdBuffer,
7488 VkImage srcImage,
7489 VkImageLayout srcImageLayout,
7490 VkBuffer destBuffer,
7491 uint32_t regionCount,
7492 const VkBufferImageCopy* pRegions)
7493{
7494 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007495
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007496 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7497
7498 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7499}
7500
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007501bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007502 VkCmdBuffer cmdBuffer,
7503 const uint32_t* pData)
7504{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007505 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007506 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007507 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007508
7509 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007510}
7511
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007512bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007513 VkCmdBuffer cmdBuffer,
7514 VkBuffer destBuffer,
7515 VkDeviceSize destOffset,
7516 VkDeviceSize dataSize)
7517{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007518
7519
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007520
7521
7522 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007523}
7524
7525VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7526 VkCmdBuffer cmdBuffer,
7527 VkBuffer destBuffer,
7528 VkDeviceSize destOffset,
7529 VkDeviceSize dataSize,
7530 const uint32_t* pData)
7531{
7532 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007533
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007534 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7535
7536 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7537}
7538
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007539bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007540 VkCmdBuffer cmdBuffer,
7541 VkBuffer destBuffer,
7542 VkDeviceSize destOffset,
7543 VkDeviceSize fillSize,
7544 uint32_t data)
7545{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007546
7547
7548
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007549
7550
7551 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007552}
7553
7554VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7555 VkCmdBuffer cmdBuffer,
7556 VkBuffer destBuffer,
7557 VkDeviceSize destOffset,
7558 VkDeviceSize fillSize,
7559 uint32_t data)
7560{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007561 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7562
7563 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7564}
7565
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007566bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007567 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007568 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007569 const VkImageSubresourceRange* pRanges)
7570{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007571 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007572 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007573 }
7574
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007575 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007576 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007577 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7578 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7579 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007580 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007581 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007582 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007583 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007584 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007585
7586 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007587}
7588
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007589bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007590 VkCmdBuffer cmdBuffer,
7591 VkImage image,
7592 VkImageLayout imageLayout,
7593 uint32_t rangeCount)
7594{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007595
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007596
7597 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7598 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7599 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007600 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007601 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007602 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007603 }
7604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007605
7606 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007607}
7608
7609VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7610 VkCmdBuffer cmdBuffer,
7611 VkImage image,
7612 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007613 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007614 uint32_t rangeCount,
7615 const VkImageSubresourceRange* pRanges)
7616{
7617 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007618
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007619 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7620
7621 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7622}
7623
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007624bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007625 VkCmdBuffer cmdBuffer,
7626 const VkImageSubresourceRange* pRanges)
7627{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007628 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007629 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007630 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7631 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7632 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007633 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007634 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007635 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007636 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007637 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007638
7639 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007640}
7641
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007642bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007643 VkCmdBuffer cmdBuffer,
7644 VkImage image,
7645 VkImageLayout imageLayout,
7646 float depth,
7647 uint32_t stencil,
7648 uint32_t rangeCount)
7649{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007650
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007651
7652 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7653 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7654 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007655 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007656 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007657 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007658 }
7659
7660
7661
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007662
7663 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007664}
7665
Chris Forbes2951d7d2015-06-22 17:21:59 +12007666VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007667 VkCmdBuffer cmdBuffer,
7668 VkImage image,
7669 VkImageLayout imageLayout,
7670 float depth,
7671 uint32_t stencil,
7672 uint32_t rangeCount,
7673 const VkImageSubresourceRange* pRanges)
7674{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007675 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007676
Chris Forbes2951d7d2015-06-22 17:21:59 +12007677 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007678
Chris Forbes2951d7d2015-06-22 17:21:59 +12007679 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007680}
7681
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007682bool PreCmdClearColorAttachment(
7683 VkCmdBuffer cmdBuffer,
7684 const VkClearColorValue* pColor,
7685 const VkRect3D* pRects)
7686{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007687 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007688 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007689 }
7690
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007691 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007692 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007693 }
7694
7695 return true;
7696}
7697
7698bool PostCmdClearColorAttachment(
7699 VkCmdBuffer cmdBuffer,
7700 uint32_t colorAttachment,
7701 VkImageLayout imageLayout,
7702 uint32_t rectCount)
7703{
7704
7705
7706 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7707 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7708 {
7709 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007710 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007711 return false;
7712 }
7713
7714
7715 return true;
7716}
7717
7718VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7719 VkCmdBuffer cmdBuffer,
7720 uint32_t colorAttachment,
7721 VkImageLayout imageLayout,
7722 const VkClearColorValue* pColor,
7723 uint32_t rectCount,
7724 const VkRect3D* pRects)
7725{
7726 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7727
7728 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7729
7730 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7731}
7732
7733bool PreCmdClearDepthStencilAttachment(
7734 VkCmdBuffer cmdBuffer,
7735 const VkRect3D* pRects)
7736{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007737 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007738 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007739 }
7740
7741 return true;
7742}
7743
7744bool PostCmdClearDepthStencilAttachment(
7745 VkCmdBuffer cmdBuffer,
7746 VkImageAspectFlags imageAspectMask,
7747 VkImageLayout imageLayout,
7748 float depth,
7749 uint32_t stencil,
7750 uint32_t rectCount)
7751{
7752
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007753
7754 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7755 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7756 {
7757 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007758 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007759 return false;
7760 }
7761
7762
7763
7764
7765 return true;
7766}
7767
7768VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7769 VkCmdBuffer cmdBuffer,
7770 VkImageAspectFlags imageAspectMask,
7771 VkImageLayout imageLayout,
7772 float depth,
7773 uint32_t stencil,
7774 uint32_t rectCount,
7775 const VkRect3D* pRects)
7776{
7777 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7778
7779 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7780
7781 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7782}
7783
7784bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007785 VkCmdBuffer cmdBuffer,
7786 const VkImageResolve* pRegions)
7787{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007788 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007789 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007790 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7791 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7792 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007793 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007794 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007795 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007796 }
7797 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7798 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7799 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007800 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007801 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007802 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007803 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007804 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007805
7806 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007807}
7808
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007809bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007810 VkCmdBuffer cmdBuffer,
7811 VkImage srcImage,
7812 VkImageLayout srcImageLayout,
7813 VkImage destImage,
7814 VkImageLayout destImageLayout,
7815 uint32_t regionCount)
7816{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007817
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007818
7819 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7820 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7821 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007822 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007823 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007824 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007825 }
7826
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007827
7828 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7829 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7830 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007831 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007832 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007833 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007834 }
7835
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007836
7837 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007838}
7839
7840VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7841 VkCmdBuffer cmdBuffer,
7842 VkImage srcImage,
7843 VkImageLayout srcImageLayout,
7844 VkImage destImage,
7845 VkImageLayout destImageLayout,
7846 uint32_t regionCount,
7847 const VkImageResolve* pRegions)
7848{
7849 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007850
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007851 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7852
7853 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7854}
7855
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007856bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007857 VkCmdBuffer cmdBuffer,
7858 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007859 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007860{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007861
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007862
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007863
7864 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007865}
7866
7867VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7868 VkCmdBuffer cmdBuffer,
7869 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007870 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007871{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007872 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007873
Tony Barbourc2e987e2015-06-29 16:20:35 -06007874 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007875}
7876
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007877bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007878 VkCmdBuffer cmdBuffer,
7879 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007880 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007881{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007882
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007883
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007884
7885 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007886}
7887
7888VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7889 VkCmdBuffer cmdBuffer,
7890 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007891 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007892{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007893 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007894
Tony Barbourc2e987e2015-06-29 16:20:35 -06007895 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007896}
7897
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007898bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007899 VkCmdBuffer cmdBuffer,
7900 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007901 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007902{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007903 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007904 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007905 }
7906
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007907 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007908 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007909 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007910
7911 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007912}
7913
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007914bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007915 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007916 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007917 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007918 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007919 uint32_t memBarrierCount)
7920{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007921
Tony Barbourc2e987e2015-06-29 16:20:35 -06007922
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007923
7924
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007925
7926 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007927}
7928
7929VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
7930 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007931 uint32_t eventCount,
7932 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007933 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007934 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007935 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007936 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007937{
7938 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007939
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007940 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007941
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007942 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007943}
7944
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007945bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007946 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007947 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007948{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007949 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007950 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007951 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007952
7953 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007954}
7955
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007956bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007957 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007958 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007959 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007960 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007961 uint32_t memBarrierCount)
7962{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007963
Tony Barbourc2e987e2015-06-29 16:20:35 -06007964
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007965
7966
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007967
7968 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007969}
7970
7971VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7972 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007973 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007974 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007975 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007976 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007977 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007978{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007979 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007980
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007981 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007982
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007983 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007984}
7985
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007986bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007987 VkCmdBuffer cmdBuffer,
7988 VkQueryPool queryPool,
7989 uint32_t slot,
7990 VkQueryControlFlags flags)
7991{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007992
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007993
7994
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007995
7996 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007997}
7998
7999VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
8000 VkCmdBuffer cmdBuffer,
8001 VkQueryPool queryPool,
8002 uint32_t slot,
8003 VkQueryControlFlags flags)
8004{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008005 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8006
8007 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8008}
8009
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008010bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008011 VkCmdBuffer cmdBuffer,
8012 VkQueryPool queryPool,
8013 uint32_t slot)
8014{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008015
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008016
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008017
8018 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008019}
8020
8021VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
8022 VkCmdBuffer cmdBuffer,
8023 VkQueryPool queryPool,
8024 uint32_t slot)
8025{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008026 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
8027
8028 PostCmdEndQuery(cmdBuffer, queryPool, slot);
8029}
8030
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008031bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008032 VkCmdBuffer cmdBuffer,
8033 VkQueryPool queryPool,
8034 uint32_t startQuery,
8035 uint32_t queryCount)
8036{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008037
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008038
8039
8040
8041 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008042}
8043
8044VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8045 VkCmdBuffer cmdBuffer,
8046 VkQueryPool queryPool,
8047 uint32_t startQuery,
8048 uint32_t queryCount)
8049{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008050 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8051
8052 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8053}
8054
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008055bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008056 VkCmdBuffer cmdBuffer,
8057 VkTimestampType timestampType,
8058 VkBuffer destBuffer,
8059 VkDeviceSize destOffset)
8060{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008061
8062 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8063 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8064 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008065 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008066 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008067 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008068 }
8069
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008070
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008071
8072 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008073}
8074
8075VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8076 VkCmdBuffer cmdBuffer,
8077 VkTimestampType timestampType,
8078 VkBuffer destBuffer,
8079 VkDeviceSize destOffset)
8080{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008081 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8082
8083 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8084}
8085
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008086bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008087 VkCmdBuffer cmdBuffer,
8088 VkQueryPool queryPool,
8089 uint32_t startQuery,
8090 uint32_t queryCount,
8091 VkBuffer destBuffer,
8092 VkDeviceSize destOffset,
8093 VkDeviceSize destStride,
8094 VkQueryResultFlags flags)
8095{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008096
8097
8098
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008099
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008100
8101
8102
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008103
8104 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008105}
8106
Jeremy Hayescf469132015-04-17 10:36:53 -06008107VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008108 VkCmdBuffer cmdBuffer,
8109 VkQueryPool queryPool,
8110 uint32_t startQuery,
8111 uint32_t queryCount,
8112 VkBuffer destBuffer,
8113 VkDeviceSize destOffset,
8114 VkDeviceSize destStride,
8115 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06008116{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008117 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8118
8119 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06008120}
8121
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008122bool PreCmdPushConstants(
8123 VkCmdBuffer cmdBuffer,
8124 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008125{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008126 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008127 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008128 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008129
8130 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008131}
8132
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008133bool PostCmdPushConstants(
8134 VkCmdBuffer cmdBuffer,
8135 VkPipelineLayout layout,
8136 VkShaderStageFlags stageFlags,
8137 uint32_t start,
8138 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008139{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008140
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008141
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008142
8143
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008144
8145 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008146}
8147
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008148VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
8149 VkCmdBuffer cmdBuffer,
8150 VkPipelineLayout layout,
8151 VkShaderStageFlags stageFlags,
8152 uint32_t start,
8153 uint32_t length,
8154 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008155{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008156 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008157
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008158 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008159
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008160 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008161}
8162
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008163bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008164 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008165 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008166{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008167 if(pRenderPassBegin != nullptr)
8168 {
8169 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008170 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008171 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008172 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008173 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008174 }
Cody Northropc332eef2015-08-04 11:51:03 -06008175 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008176 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008177 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06008178 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008179
8180 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008181}
8182
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008183bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008184 VkCmdBuffer cmdBuffer,
8185 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008186{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008187
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008188 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8189 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
8190 {
8191 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8192 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8193 return false;
8194 }
8195
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008196 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008197}
8198
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008199VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8200 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008201 const VkRenderPassBeginInfo* pRenderPassBegin,
8202 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008203{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008204 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8205
Chia-I Wuc278df82015-07-07 11:50:03 +08008206 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008207
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008208 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008209}
8210
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008211bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08008212 VkCmdBuffer cmdBuffer,
8213 VkRenderPassContents contents)
8214{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008215
8216 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008217 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008218 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008219 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008220 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8221 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008222 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008223
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008224 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08008225}
8226
8227VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8228 VkCmdBuffer cmdBuffer,
8229 VkRenderPassContents contents)
8230{
Chia-I Wuc278df82015-07-07 11:50:03 +08008231 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8232
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008233 PostCmdNextSubpass(cmdBuffer, contents);
8234}
8235
8236bool PostCmdEndRenderPass(
8237 VkCmdBuffer cmdBuffer)
8238{
8239
8240 return true;
8241}
8242
8243VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
8244 VkCmdBuffer cmdBuffer)
8245{
8246 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8247
8248 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08008249}
8250
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008251bool PreCmdExecuteCommands(
8252 VkCmdBuffer cmdBuffer,
8253 const VkCmdBuffer* pCmdBuffers)
8254{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008255 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008256 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008257 }
8258
8259 return true;
8260}
8261
8262bool PostCmdExecuteCommands(
8263 VkCmdBuffer cmdBuffer,
8264 uint32_t cmdBuffersCount)
8265{
8266
8267
8268 return true;
8269}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008270
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008271VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008272 VkCmdBuffer cmdBuffer,
8273 uint32_t cmdBuffersCount,
8274 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008275{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008276 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8277
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008278 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8279
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008280 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008281}
8282
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008283VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008284{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008285 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008286 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008287 }
8288
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008289 /* loader uses this to force layer initialization; device object is wrapped */
8290 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008291 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008292 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008293 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008294
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008295 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008296 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008297 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008298 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008299 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008300 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008301 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008302 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008303 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008304 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008305 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008306 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008307 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008308 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008309 if (!strcmp(funcName, "vkFreeMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008310 return (PFN_vkVoidFunction) vkFreeMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008311 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008312 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008313 if (!strcmp(funcName, "vkUnmapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008314 return (PFN_vkVoidFunction) vkUnmapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008315 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008316 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008317 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008318 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008319 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008320 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008321 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008322 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008323 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008324 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008325 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008326 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008327 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008328 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008329 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008330 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008331 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008332 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008333 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008334 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008335 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008336 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008337 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008338 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008339 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008340 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008341 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008342 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008343 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008344 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008345 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008346 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008347 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008348 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008349 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008350 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008351 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008352 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008353 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008354 return (PFN_vkVoidFunction) vkCreateImageView;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06008355 if (!strcmp(funcName, "vkDestroyImageView"))
8356 return (PFN_vkVoidFunction) vkDestroyImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008357 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008358 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008359 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008360 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008361 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008362 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008363 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008364 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008365 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008366 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008367 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008368 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008369 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008370 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008371 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008372 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008373 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008374 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008375 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008376 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Cody Northrope4bc6942015-08-26 10:01:32 -06008377 if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
8378 return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
8379 if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
8380 return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
8381 if (!strcmp(funcName, "vkCreateDynamicBlendState"))
8382 return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
8383 if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
8384 return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
Cody Northrop2605cb02015-08-18 15:21:16 -06008385 if (!strcmp(funcName, "vkCreateDynamicStencilState"))
8386 return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008387 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008388 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008389 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008390 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008391 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008392 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008393 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008394 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008395 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008396 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008397 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008398 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008399 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008400 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008401 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008402 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008403 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008404 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008405 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008406 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008407 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008408 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008409 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008410 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008411 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008412 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008413 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008414 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008415 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008416 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008417 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008418 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008419 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008420 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008421 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008422 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008423 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008424 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008425 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008426 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008427 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008428 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008429 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008430 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008431 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008432 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008433 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008434 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008435 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008436 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008437 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008438 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008439 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008440 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008441 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008442 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008443 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008444 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008445 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008446 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008447 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008448 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008449 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008450 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008451 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008452 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008453 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008454 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008455 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008456 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008457 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008458 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008459
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008460 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008461 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008462 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008463 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008464 }
8465}
8466
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008467VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008468{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008469 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008470 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008471 }
8472
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008473 /* loader uses this to force layer initialization; instance object is wrapped */
8474 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008475 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008476 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008477 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008478
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008479 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008480 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008481 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008482 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008483 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008484 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008485 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008486 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008487 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008488 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06008489 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008490 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008491 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008492 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008493 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008494 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008495 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008496 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008497 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008498 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008499 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008500 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008501
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008502 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008503 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008504 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008505 return fptr;
8506
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008507 {
8508 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8509 return NULL;
8510 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8511 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008512}