blob: 50d4e185b764cd8331cb60bf51fa9dce615e9ee4 [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);
Tobin Ehlis8354e022015-09-01 11:46:36 -060061 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060062#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 }
Tobin Ehlisaf14e9f2015-09-01 11:59:36 -060096 if (log_output == NULL) {
97 if (option_str)
98 std::cout << std::endl << "ParamChecker ERROR: Bad output filename specified: " << option_str << ". Writing to STDOUT instead" << std::endl << std::endl;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060099 log_output = stdout;
100 }
101
102 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void*)log_output, &data->logging_callback);
103 }
104}
105
106VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
107 VkInstance instance,
108 VkFlags msgFlags,
109 const PFN_vkDbgMsgCallback pfnMsgCallback,
110 void* pUserData,
111 VkDbgMsgCallback* pMsgCallback)
112{
113 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
114 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
115
116 if (result == VK_SUCCESS)
117 {
118 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
119 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
120 }
121
122 return result;
123}
124
125VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
126 VkInstance instance,
127 VkDbgMsgCallback msgCallback)
128{
129 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
130 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
131
132 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
133 layer_destroy_msg_callback(data->report_data, msgCallback);
134
135 return result;
136}
137
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600138static const VkLayerProperties pc_global_layers[] = {
139 {
140 "ParamChecker",
141 VK_API_VERSION,
142 VK_MAKE_VERSION(0, 1, 0),
143 "Validation layer: ParamChecker",
144 }
145};
Tony Barbour426b9052015-06-24 16:06:58 -0600146
147VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600148 const char *pLayerName,
149 uint32_t *pCount,
150 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600151{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600152 /* ParamChecker does not have any global extensions */
153 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600154}
155
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600156VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties(
157 uint32_t *pCount,
158 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600159{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600160 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
161 pc_global_layers,
162 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600163}
164
165VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600166 VkPhysicalDevice physicalDevice,
167 const char* pLayerName,
168 uint32_t* pCount,
169 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600170{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600171 /* ParamChecker does not have any physical device extensions */
172 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayescf469132015-04-17 10:36:53 -0600173}
174
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600175VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
176 VkPhysicalDevice physicalDevice,
177 uint32_t* pCount,
178 VkLayerProperties* pProperties)
179{
180 /* ParamChecker's physical device layers are the same as global */
181 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
182 pCount, pProperties);
183}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600184
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600185// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600186
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600187static
188std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600189{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600190 switch(enumerator)
191 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600192 case VK_RESULT_MAX_ENUM:
193 {
194 return "VK_RESULT_MAX_ENUM";
195 break;
196 }
197 case VK_ERROR_INVALID_LAYER:
198 {
199 return "VK_ERROR_INVALID_LAYER";
200 break;
201 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600202 case VK_ERROR_INCOMPATIBLE_DRIVER:
203 {
204 return "VK_ERROR_INCOMPATIBLE_DRIVER";
205 break;
206 }
207 case VK_ERROR_MEMORY_UNMAP_FAILED:
208 {
209 return "VK_ERROR_MEMORY_UNMAP_FAILED";
210 break;
211 }
212 case VK_ERROR_MEMORY_MAP_FAILED:
213 {
214 return "VK_ERROR_MEMORY_MAP_FAILED";
215 break;
216 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600217 case VK_INCOMPLETE:
218 {
219 return "VK_INCOMPLETE";
220 break;
221 }
222 case VK_ERROR_OUT_OF_HOST_MEMORY:
223 {
224 return "VK_ERROR_OUT_OF_HOST_MEMORY";
225 break;
226 }
227 case VK_ERROR_UNKNOWN:
228 {
229 return "VK_ERROR_UNKNOWN";
230 break;
231 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600232 case VK_ERROR_INITIALIZATION_FAILED:
233 {
234 return "VK_ERROR_INITIALIZATION_FAILED";
235 break;
236 }
237 case VK_NOT_READY:
238 {
239 return "VK_NOT_READY";
240 break;
241 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600242 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
243 {
244 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
245 break;
246 }
247 case VK_EVENT_SET:
248 {
249 return "VK_EVENT_SET";
250 break;
251 }
252 case VK_TIMEOUT:
253 {
254 return "VK_TIMEOUT";
255 break;
256 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600257 case VK_EVENT_RESET:
258 {
259 return "VK_EVENT_RESET";
260 break;
261 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600262 case VK_UNSUPPORTED:
263 {
264 return "VK_UNSUPPORTED";
265 break;
266 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600267 case VK_ERROR_INCOMPATIBLE_DEVICE:
268 {
269 return "VK_ERROR_INCOMPATIBLE_DEVICE";
270 break;
271 }
272 case VK_SUCCESS:
273 {
274 return "VK_SUCCESS";
275 break;
276 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600277 case VK_ERROR_INVALID_EXTENSION:
278 {
279 return "VK_ERROR_INVALID_EXTENSION";
280 break;
281 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600282 case VK_ERROR_DEVICE_LOST:
283 {
284 return "VK_ERROR_DEVICE_LOST";
285 break;
286 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600287 default:
288 {
289 return "unrecognized enumerator";
290 break;
291 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600292 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600293}
294
295static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600296bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
297{
298 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(VK_FORMAT_FEATURE_CONVERSION_BIT |
299 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
300 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
301 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
302 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
303 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
304 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
305 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
306 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
307 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600308 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
309 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
310 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600311 if(enumerator & (~allFlags))
312 {
313 return false;
314 }
315
316 return true;
317}
318
319static
320std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
321{
322 if(!ValidateEnumerator(enumerator))
323 {
324 return "unrecognized enumerator";
325 }
326
327 std::vector<std::string> strings;
328 if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT)
329 {
330 strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT");
331 }
332 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
333 {
334 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
335 }
336 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
337 {
338 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
339 }
340 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
341 {
342 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
343 }
344 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
345 {
346 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
347 }
348 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
349 {
350 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
351 }
352 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
353 {
354 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
355 }
356 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
357 {
358 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
359 }
360 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
361 {
362 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
363 }
364 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
365 {
366 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
367 }
368 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
369 {
370 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
371 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600372 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
373 {
374 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
375 }
376 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
377 {
378 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
379 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600380
381 std::string enumeratorString;
382 for(auto const& string : strings)
383 {
384 enumeratorString += string;
385
386 if(string != strings.back())
387 {
388 enumeratorString += '|';
389 }
390 }
391
392 return enumeratorString;
393}
394
395static
396bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
397{
398 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
399 VK_IMAGE_USAGE_DEPTH_STENCIL_BIT |
400 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
401 VK_IMAGE_USAGE_STORAGE_BIT |
402 VK_IMAGE_USAGE_SAMPLED_BIT |
403 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
404 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600405 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600406 if(enumerator & (~allFlags))
407 {
408 return false;
409 }
410
411 return true;
412}
413
414static
415std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
416{
417 if(!ValidateEnumerator(enumerator))
418 {
419 return "unrecognized enumerator";
420 }
421
422 std::vector<std::string> strings;
423 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
424 {
425 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
426 }
427 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
428 {
429 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
430 }
431 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
432 {
433 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
434 }
435 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
436 {
437 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
438 }
439 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
440 {
441 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
442 }
443 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
444 {
445 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
446 }
447 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
448 {
449 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
450 }
451 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
452 {
453 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
454 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600455
456 std::string enumeratorString;
457 for(auto const& string : strings)
458 {
459 enumeratorString += string;
460
461 if(string != strings.back())
462 {
463 enumeratorString += '|';
464 }
465 }
466
467 return enumeratorString;
468}
469
470static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600471bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
472{
473 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
474 VK_QUEUE_DMA_BIT |
475 VK_QUEUE_COMPUTE_BIT |
476 VK_QUEUE_SPARSE_MEMMGR_BIT |
477 VK_QUEUE_GRAPHICS_BIT);
478 if(enumerator & (~allFlags))
479 {
480 return false;
481 }
482
483 return true;
484}
485
486static
487std::string EnumeratorString(VkQueueFlagBits const& enumerator)
488{
489 if(!ValidateEnumerator(enumerator))
490 {
491 return "unrecognized enumerator";
492 }
493
494 std::vector<std::string> strings;
495 if(enumerator & VK_QUEUE_EXTENDED_BIT)
496 {
497 strings.push_back("VK_QUEUE_EXTENDED_BIT");
498 }
499 if(enumerator & VK_QUEUE_DMA_BIT)
500 {
501 strings.push_back("VK_QUEUE_DMA_BIT");
502 }
503 if(enumerator & VK_QUEUE_COMPUTE_BIT)
504 {
505 strings.push_back("VK_QUEUE_COMPUTE_BIT");
506 }
507 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
508 {
509 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
510 }
511 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
512 {
513 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
514 }
515
516 std::string enumeratorString;
517 for(auto const& string : strings)
518 {
519 enumeratorString += string;
520
521 if(string != strings.back())
522 {
523 enumeratorString += '|';
524 }
525 }
526
527 return enumeratorString;
528}
529
530static
531bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
532{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600533 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
534 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600535 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
536 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
537 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
538 VK_MEMORY_PROPERTY_DEVICE_ONLY);
539 if(enumerator & (~allFlags))
540 {
541 return false;
542 }
543
544 return true;
545}
546
547static
548std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
549{
550 if(!ValidateEnumerator(enumerator))
551 {
552 return "unrecognized enumerator";
553 }
554
555 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600556 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
557 {
558 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
559 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600560 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
561 {
562 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
563 }
564 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
565 {
566 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
567 }
568 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
569 {
570 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
571 }
572 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
573 {
574 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
575 }
576 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
577 {
578 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
579 }
580
581 std::string enumeratorString;
582 for(auto const& string : strings)
583 {
584 enumeratorString += string;
585
586 if(string != strings.back())
587 {
588 enumeratorString += '|';
589 }
590 }
591
592 return enumeratorString;
593}
594
595static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600596bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600597{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600598 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600599 if(enumerator & (~allFlags))
600 {
601 return false;
602 }
603
604 return true;
605}
606
607static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600608std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600609{
610 if(!ValidateEnumerator(enumerator))
611 {
612 return "unrecognized enumerator";
613 }
614
615 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600616 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600617 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600618 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600619 }
620
621 std::string enumeratorString;
622 for(auto const& string : strings)
623 {
624 enumeratorString += string;
625
626 if(string != strings.back())
627 {
628 enumeratorString += '|';
629 }
630 }
631
632 return enumeratorString;
633}
634
635static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600636bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
637{
638 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
639 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
640 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
641 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600642 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600643 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600644 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600645
646 return true;
647}
648
649static
650std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
651{
652 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600653 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600654 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600655 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600656
657 std::vector<std::string> strings;
658 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600659 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600660 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600661 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600662 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600663 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600664 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600665 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600666 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600667 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600668 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600669 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600670
671 std::string enumeratorString;
672 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600673 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600674 enumeratorString += string;
675
676 if(string != strings.back())
677 {
678 enumeratorString += '|';
679 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600680 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600681
682 return enumeratorString;
683}
684
685static
686bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
687{
688 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
689 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600690 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600691 return false;
692 }
693
694 return true;
695}
696
697static
698std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
699{
700 if(!ValidateEnumerator(enumerator))
701 {
702 return "unrecognized enumerator";
703 }
704
705 std::vector<std::string> strings;
706 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
707 {
708 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
709 }
710
711 std::string enumeratorString;
712 for(auto const& string : strings)
713 {
714 enumeratorString += string;
715
716 if(string != strings.back())
717 {
718 enumeratorString += '|';
719 }
720 }
721
722 return enumeratorString;
723}
724
725static
726bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
727{
728 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
729 if(enumerator & (~allFlags))
730 {
731 return false;
732 }
733
734 return true;
735}
736
737static
738std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
739{
740 if(!ValidateEnumerator(enumerator))
741 {
742 return "unrecognized enumerator";
743 }
744
745 std::vector<std::string> strings;
746 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
747 {
748 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
749 }
750
751 std::string enumeratorString;
752 for(auto const& string : strings)
753 {
754 enumeratorString += string;
755
756 if(string != strings.back())
757 {
758 enumeratorString += '|';
759 }
760 }
761
762 return enumeratorString;
763}
764
765static
766bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
767{
768 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
769 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
770 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
771 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
772 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
773 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
774 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
775 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
776 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
777 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
778 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
779 if(enumerator & (~allFlags))
780 {
781 return false;
782 }
783
784 return true;
785}
786
787static
788std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
789{
790 if(!ValidateEnumerator(enumerator))
791 {
792 return "unrecognized enumerator";
793 }
794
795 std::vector<std::string> strings;
796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
797 {
798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
799 }
800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
801 {
802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
803 }
804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
805 {
806 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
807 }
808 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
809 {
810 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
811 }
812 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
813 {
814 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
815 }
816 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
817 {
818 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
819 }
820 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
821 {
822 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
823 }
824 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
825 {
826 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
827 }
828 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
829 {
830 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
831 }
832 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
833 {
834 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
835 }
836 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
837 {
838 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
839 }
840
841 std::string enumeratorString;
842 for(auto const& string : strings)
843 {
844 enumeratorString += string;
845
846 if(string != strings.back())
847 {
848 enumeratorString += '|';
849 }
850 }
851
852 return enumeratorString;
853}
854
855static
856bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
857{
858 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
859 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
860 VK_QUERY_RESULT_WAIT_BIT |
861 VK_QUERY_RESULT_64_BIT |
862 VK_QUERY_RESULT_DEFAULT);
863 if(enumerator & (~allFlags))
864 {
865 return false;
866 }
867
868 return true;
869}
870
871static
872std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
873{
874 if(!ValidateEnumerator(enumerator))
875 {
876 return "unrecognized enumerator";
877 }
878
879 std::vector<std::string> strings;
880 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
881 {
882 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
883 }
884 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
885 {
886 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
887 }
888 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
889 {
890 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
891 }
892 if(enumerator & VK_QUERY_RESULT_64_BIT)
893 {
894 strings.push_back("VK_QUERY_RESULT_64_BIT");
895 }
896 if(enumerator & VK_QUERY_RESULT_DEFAULT)
897 {
898 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600899 }
900
901 std::string enumeratorString;
902 for(auto const& string : strings)
903 {
904 enumeratorString += string;
905
906 if(string != strings.back())
907 {
908 enumeratorString += '|';
909 }
910 }
911
912 return enumeratorString;
913}
914
915static
916bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
917{
918 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
919 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
920 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
921 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
922 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
923 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
924 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
925 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600926 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600927 if(enumerator & (~allFlags))
928 {
929 return false;
930 }
931
932 return true;
933}
934
935static
936std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
937{
938 if(!ValidateEnumerator(enumerator))
939 {
940 return "unrecognized enumerator";
941 }
942
943 std::vector<std::string> strings;
944 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
947 }
948 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
949 {
950 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
951 }
952 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
953 {
954 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
955 }
956 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
957 {
958 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
959 }
960 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
961 {
962 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
963 }
964 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
965 {
966 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
967 }
968 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
969 {
970 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
971 }
972 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
973 {
974 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
975 }
976 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
977 {
978 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
979 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600980
981 std::string enumeratorString;
982 for(auto const& string : strings)
983 {
984 enumeratorString += string;
985
986 if(string != strings.back())
987 {
988 enumeratorString += '|';
989 }
990 }
991
992 return enumeratorString;
993}
994
995static
996bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
997{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600998 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
999 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
1000 VK_BUFFER_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001001 if(enumerator & (~allFlags))
1002 {
1003 return false;
1004 }
1005
1006 return true;
1007}
1008
1009static
1010std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
1011{
1012 if(!ValidateEnumerator(enumerator))
1013 {
1014 return "unrecognized enumerator";
1015 }
1016
1017 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001018 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1019 {
1020 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1021 }
1022 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1023 {
1024 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1025 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001026 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
1027 {
1028 strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT");
1029 }
1030
1031 std::string enumeratorString;
1032 for(auto const& string : strings)
1033 {
1034 enumeratorString += string;
1035
1036 if(string != strings.back())
1037 {
1038 enumeratorString += '|';
1039 }
1040 }
1041
1042 return enumeratorString;
1043}
1044
1045static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001046bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1047{
1048 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001049 VK_IMAGE_CREATE_INVARIANT_DATA_BIT |
1050 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1051 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001052 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001053 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001054 if(enumerator & (~allFlags))
1055 {
1056 return false;
1057 }
1058
1059 return true;
1060}
1061
1062static
1063std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1064{
1065 if(!ValidateEnumerator(enumerator))
1066 {
1067 return "unrecognized enumerator";
1068 }
1069
1070 std::vector<std::string> strings;
1071 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1072 {
1073 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1074 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001075 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
1076 {
1077 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
1078 }
1079 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1080 {
1081 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1082 }
1083 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1084 {
1085 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1086 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001087 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1088 {
1089 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1090 }
1091 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
1092 {
1093 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
1094 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001095
1096 std::string enumeratorString;
1097 for(auto const& string : strings)
1098 {
1099 enumeratorString += string;
1100
1101 if(string != strings.back())
1102 {
1103 enumeratorString += '|';
1104 }
1105 }
1106
1107 return enumeratorString;
1108}
1109
1110static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001111bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001112{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001113 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1114 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001115 if(enumerator & (~allFlags))
1116 {
1117 return false;
1118 }
1119
1120 return true;
1121}
1122
1123static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001124std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001125{
1126 if(!ValidateEnumerator(enumerator))
1127 {
1128 return "unrecognized enumerator";
1129 }
1130
1131 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001132 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001133 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001134 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001135 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001136 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001137 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001138 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001139 }
1140
1141 std::string enumeratorString;
1142 for(auto const& string : strings)
1143 {
1144 enumeratorString += string;
1145
1146 if(string != strings.back())
1147 {
1148 enumeratorString += '|';
1149 }
1150 }
1151
1152 return enumeratorString;
1153}
1154
1155static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001156bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1157{
1158 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1159 VK_CHANNEL_B_BIT |
1160 VK_CHANNEL_G_BIT |
1161 VK_CHANNEL_R_BIT);
1162 if(enumerator & (~allFlags))
1163 {
1164 return false;
1165 }
1166
1167 return true;
1168}
1169
1170static
1171std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1172{
1173 if(!ValidateEnumerator(enumerator))
1174 {
1175 return "unrecognized enumerator";
1176 }
1177
1178 std::vector<std::string> strings;
1179 if(enumerator & VK_CHANNEL_A_BIT)
1180 {
1181 strings.push_back("VK_CHANNEL_A_BIT");
1182 }
1183 if(enumerator & VK_CHANNEL_B_BIT)
1184 {
1185 strings.push_back("VK_CHANNEL_B_BIT");
1186 }
1187 if(enumerator & VK_CHANNEL_G_BIT)
1188 {
1189 strings.push_back("VK_CHANNEL_G_BIT");
1190 }
1191 if(enumerator & VK_CHANNEL_R_BIT)
1192 {
1193 strings.push_back("VK_CHANNEL_R_BIT");
1194 }
1195
1196 std::string enumeratorString;
1197 for(auto const& string : strings)
1198 {
1199 enumeratorString += string;
1200
1201 if(string != strings.back())
1202 {
1203 enumeratorString += '|';
1204 }
1205 }
1206
1207 return enumeratorString;
1208}
1209
1210static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001211bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001212{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001213 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1214 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1215 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001216 if(enumerator & (~allFlags))
1217 {
1218 return false;
1219 }
1220
1221 return true;
1222}
1223
1224static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001225std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001226{
1227 if(!ValidateEnumerator(enumerator))
1228 {
1229 return "unrecognized enumerator";
1230 }
1231
1232 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001233 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001234 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001235 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1236 }
1237 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1238 {
1239 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1240 }
1241 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1242 {
1243 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001244 }
1245
1246 std::string enumeratorString;
1247 for(auto const& string : strings)
1248 {
1249 enumeratorString += string;
1250
1251 if(string != strings.back())
1252 {
1253 enumeratorString += '|';
1254 }
1255 }
1256
1257 return enumeratorString;
1258}
1259
1260static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001261bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001262{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001263 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1264 VK_SHADER_STAGE_FRAGMENT_BIT |
1265 VK_SHADER_STAGE_GEOMETRY_BIT |
1266 VK_SHADER_STAGE_COMPUTE_BIT |
1267 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1268 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1269 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001270 if(enumerator & (~allFlags))
1271 {
1272 return false;
1273 }
1274
1275 return true;
1276}
1277
1278static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001279std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001280{
1281 if(!ValidateEnumerator(enumerator))
1282 {
1283 return "unrecognized enumerator";
1284 }
1285
1286 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001287 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001288 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001289 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001290 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001291 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001292 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001293 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001294 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001295 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001296 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001297 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1298 }
1299 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1300 {
1301 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1302 }
1303 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1304 {
1305 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1306 }
1307 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1308 {
1309 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1310 }
1311 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1312 {
1313 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001314 }
1315
1316 std::string enumeratorString;
1317 for(auto const& string : strings)
1318 {
1319 enumeratorString += string;
1320
1321 if(string != strings.back())
1322 {
1323 enumeratorString += '|';
1324 }
1325 }
1326
1327 return enumeratorString;
1328}
1329
1330static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001331bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001332{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001333 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001334 if(enumerator & (~allFlags))
1335 {
1336 return false;
1337 }
1338
1339 return true;
1340}
1341
1342static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001343std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001344{
1345 if(!ValidateEnumerator(enumerator))
1346 {
1347 return "unrecognized enumerator";
1348 }
1349
1350 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001351 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001352 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001353 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001354 }
1355
1356 std::string enumeratorString;
1357 for(auto const& string : strings)
1358 {
1359 enumeratorString += string;
1360
1361 if(string != strings.back())
1362 {
1363 enumeratorString += '|';
1364 }
1365 }
1366
1367 return enumeratorString;
1368}
1369
1370static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001371bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001372{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001373 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1374 VK_PIPELINE_STAGE_HOST_BIT |
1375 VK_PIPELINE_STAGE_TRANSFER_BIT |
1376 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1377 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1378 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1379 VK_PIPELINE_STAGE_TRANSITION_BIT |
1380 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1381 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1382 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1383 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1384 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1385 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1386 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1387 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1388 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1389 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001390 if(enumerator & (~allFlags))
1391 {
1392 return false;
1393 }
1394
1395 return true;
1396}
1397
1398static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001399std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001400{
1401 if(!ValidateEnumerator(enumerator))
1402 {
1403 return "unrecognized enumerator";
1404 }
1405
1406 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001407 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001408 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001409 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001410 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001411 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001412 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001413 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001414 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001415 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001416 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001417 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001418 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001419 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001420 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001421 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001422 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001423 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001424 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001425 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001426 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001427 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001428 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001429 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001430 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001431 if(enumerator & VK_PIPELINE_STAGE_TRANSITION_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001432 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001433 strings.push_back("VK_PIPELINE_STAGE_TRANSITION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001434 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001435 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001436 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001438 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001440 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001441 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001442 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001443 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001444 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001445 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001446 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001448 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001449 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1450 }
1451 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1452 {
1453 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1454 }
1455 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1456 {
1457 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1458 }
1459 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1460 {
1461 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1462 }
1463 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1464 {
1465 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1466 }
1467 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1468 {
1469 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1470 }
1471 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1472 {
1473 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001474 }
1475
1476 std::string enumeratorString;
1477 for(auto const& string : strings)
1478 {
1479 enumeratorString += string;
1480
1481 if(string != strings.back())
1482 {
1483 enumeratorString += '|';
1484 }
1485 }
1486
1487 return enumeratorString;
1488}
1489
1490static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001491bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001492{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001493 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1494 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1495 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1496 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1497 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001498 if(enumerator & (~allFlags))
1499 {
1500 return false;
1501 }
1502
1503 return true;
1504}
1505
1506static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001507std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001508{
1509 if(!ValidateEnumerator(enumerator))
1510 {
1511 return "unrecognized enumerator";
1512 }
1513
1514 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001515 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001516 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001517 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001518 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001519 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001520 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001521 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001522 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001523 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001524 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001525 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1526 }
1527 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1528 {
1529 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1530 }
1531 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1532 {
1533 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001534 }
1535
1536 std::string enumeratorString;
1537 for(auto const& string : strings)
1538 {
1539 enumeratorString += string;
1540
1541 if(string != strings.back())
1542 {
1543 enumeratorString += '|';
1544 }
1545 }
1546
1547 return enumeratorString;
1548}
1549
1550static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001551bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001552{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001553 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1554 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1555 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1556 VK_MEMORY_INPUT_SHADER_READ_BIT |
1557 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1558 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1559 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1560 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1561 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1562 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001563 if(enumerator & (~allFlags))
1564 {
1565 return false;
1566 }
1567
1568 return true;
1569}
1570
1571static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001572std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001573{
1574 if(!ValidateEnumerator(enumerator))
1575 {
1576 return "unrecognized enumerator";
1577 }
1578
1579 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001580 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001581 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001582 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1583 }
1584 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1585 {
1586 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1587 }
1588 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1589 {
1590 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1591 }
1592 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1593 {
1594 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1595 }
1596 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1597 {
1598 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1599 }
1600 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1601 {
1602 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1603 }
1604 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1605 {
1606 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1607 }
1608 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1609 {
1610 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1611 }
1612 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1613 {
1614 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1615 }
1616 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1617 {
1618 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001619 }
1620
1621 std::string enumeratorString;
1622 for(auto const& string : strings)
1623 {
1624 enumeratorString += string;
1625
1626 if(string != strings.back())
1627 {
1628 enumeratorString += '|';
1629 }
1630 }
1631
1632 return enumeratorString;
1633}
1634
1635static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001636bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001637{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001638 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1639 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001640 if(enumerator & (~allFlags))
1641 {
1642 return false;
1643 }
1644
1645 return true;
1646}
1647
1648static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001649std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001650{
1651 if(!ValidateEnumerator(enumerator))
1652 {
1653 return "unrecognized enumerator";
1654 }
1655
1656 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001657 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001658 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001659 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001660 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001661 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001662 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001663 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001664 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001665
1666 std::string enumeratorString;
1667 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001668 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001669 enumeratorString += string;
1670
1671 if(string != strings.back())
1672 {
1673 enumeratorString += '|';
1674 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001675 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001676
1677 return enumeratorString;
1678}
1679
1680static
1681bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1682{
1683 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES);
1684 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001685 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001686 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001687 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001688
1689 return true;
1690}
1691
1692static
1693std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1694{
1695 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001696 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001697 return "unrecognized enumerator";
1698 }
1699
1700 std::vector<std::string> strings;
1701 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES)
1702 {
1703 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001704 }
1705
1706 std::string enumeratorString;
1707 for(auto const& string : strings)
1708 {
1709 enumeratorString += string;
1710
1711 if(string != strings.back())
1712 {
1713 enumeratorString += '|';
1714 }
1715 }
1716
1717 return enumeratorString;
1718}
1719
1720static
1721bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1722{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001723 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1724 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001725 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1726 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1727 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1728 if(enumerator & (~allFlags))
1729 {
1730 return false;
1731 }
1732
1733 return true;
1734}
1735
1736static
1737std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1738{
1739 if(!ValidateEnumerator(enumerator))
1740 {
1741 return "unrecognized enumerator";
1742 }
1743
1744 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001745 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1746 {
1747 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1748 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001749 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1750 {
1751 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1752 }
1753 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1754 {
1755 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1756 }
1757 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1758 {
1759 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1760 }
1761 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1762 {
1763 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1764 }
1765
1766 std::string enumeratorString;
1767 for(auto const& string : strings)
1768 {
1769 enumeratorString += string;
1770
1771 if(string != strings.back())
1772 {
1773 enumeratorString += '|';
1774 }
1775 }
1776
1777 return enumeratorString;
1778}
1779
1780static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001781bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001782{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001783 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001784 if(enumerator & (~allFlags))
1785 {
1786 return false;
1787 }
1788
1789 return true;
1790}
1791
1792static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001793std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001794{
1795 if(!ValidateEnumerator(enumerator))
1796 {
1797 return "unrecognized enumerator";
1798 }
1799
1800 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001801 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001802 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001803 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001804 }
1805
1806 std::string enumeratorString;
1807 for(auto const& string : strings)
1808 {
1809 enumeratorString += string;
1810
1811 if(string != strings.back())
1812 {
1813 enumeratorString += '|';
1814 }
1815 }
1816
1817 return enumeratorString;
1818}
1819
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001820static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001821bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001822{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001823 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1824 VK_IMAGE_ASPECT_STENCIL_BIT |
1825 VK_IMAGE_ASPECT_DEPTH_BIT |
1826 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001827 if(enumerator & (~allFlags))
1828 {
1829 return false;
1830 }
1831
1832 return true;
1833}
1834
1835static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001836std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001837{
1838 if(!ValidateEnumerator(enumerator))
1839 {
1840 return "unrecognized enumerator";
1841 }
1842
1843 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001844 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001845 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001846 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1847 }
1848 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1849 {
1850 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1851 }
1852 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1853 {
1854 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1855 }
1856 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1857 {
1858 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1859 }
1860
1861 std::string enumeratorString;
1862 for(auto const& string : strings)
1863 {
1864 enumeratorString += string;
1865
1866 if(string != strings.back())
1867 {
1868 enumeratorString += '|';
1869 }
1870 }
1871
1872 return enumeratorString;
1873}
1874
1875static
1876bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1877{
1878 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1879 if(enumerator & (~allFlags))
1880 {
1881 return false;
1882 }
1883
1884 return true;
1885}
1886
1887static
1888std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1889{
1890 if(!ValidateEnumerator(enumerator))
1891 {
1892 return "unrecognized enumerator";
1893 }
1894
1895 std::vector<std::string> strings;
1896 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1897 {
1898 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001899 }
1900
1901 std::string enumeratorString;
1902 for(auto const& string : strings)
1903 {
1904 enumeratorString += string;
1905
1906 if(string != strings.back())
1907 {
1908 enumeratorString += '|';
1909 }
1910 }
1911
1912 return enumeratorString;
1913}
1914
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001915VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1916 const VkInstanceCreateInfo* pCreateInfo,
1917 VkInstance* pInstance)
1918{
1919 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1920 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1921
1922 if (result == VK_SUCCESS) {
1923 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1924 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001925 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001926
1927 InitParamChecker(data);
1928 }
1929
1930 return result;
1931}
1932
1933VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(
1934 VkInstance instance)
1935{
1936 // Grab the key before the instance is destroyed.
1937 dispatch_key key = get_dispatch_key(instance);
1938 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
1939 VkResult result = pTable->DestroyInstance(instance);
1940
1941 // Clean up logging callback, if any
1942 layer_data *data = get_my_data_ptr(key, layer_data_map);
1943 if(data->logging_callback)
1944 {
1945 layer_destroy_msg_callback(data->report_data, data->logging_callback);
1946 }
1947
1948 layer_debug_report_destroy_instance(mid(instance));
1949 layer_data_map.erase(pTable);
1950
1951 pc_instance_table_map.erase(key);
1952 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
1953
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001954 return result;
1955}
1956
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001957bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001958 VkInstance instance,
1959 uint32_t* pPhysicalDeviceCount,
1960 VkPhysicalDevice* pPhysicalDevices,
1961 VkResult result)
1962{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001963
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001964 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001965 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001966 }
1967
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001968 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001969 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001970 }
1971
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001972 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001973 {
1974 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001975 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1976 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001977 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001978
1979 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001980}
1981
1982VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1983 VkInstance instance,
1984 uint32_t* pPhysicalDeviceCount,
1985 VkPhysicalDevice* pPhysicalDevices)
1986{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001987 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1988
1989 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1990
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001991 return result;
1992}
1993
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001994bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001995 VkPhysicalDevice physicalDevice,
1996 VkPhysicalDeviceFeatures* pFeatures,
1997 VkResult result)
1998{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001999
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002000 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002001 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002002 }
2003
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002004 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002005 {
2006 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002007 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2008 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002009 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002010
2011 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002012}
2013
2014VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
2015 VkPhysicalDevice physicalDevice,
2016 VkPhysicalDeviceFeatures* pFeatures)
2017{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002018 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
2019
2020 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
2021
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002022 return result;
2023}
2024
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002025bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002026 VkPhysicalDevice physicalDevice,
2027 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002028 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002029 VkResult result)
2030{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002031
2032 if(format < VK_FORMAT_BEGIN_RANGE ||
2033 format > VK_FORMAT_END_RANGE)
2034 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002035 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002036 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002037 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002038 }
2039
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002040 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002041 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002042 }
2043
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002044 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002045 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002046 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002047 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2048 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002049 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002050
2051 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002052}
2053
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002054VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002055 VkPhysicalDevice physicalDevice,
2056 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002057 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002058{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002059 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002060
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002061 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2062
2063 return result;
2064}
2065
2066bool PostGetPhysicalDeviceImageFormatProperties(
2067 VkPhysicalDevice physicalDevice,
2068 VkFormat format,
2069 VkImageType type,
2070 VkImageTiling tiling,
2071 VkImageUsageFlags usage,
2072 VkImageFormatProperties* pImageFormatProperties,
2073 VkResult result)
2074{
2075
2076 if(format < VK_FORMAT_BEGIN_RANGE ||
2077 format > VK_FORMAT_END_RANGE)
2078 {
2079 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2080 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2081 return false;
2082 }
2083
2084 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2085 type > VK_IMAGE_TYPE_END_RANGE)
2086 {
2087 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2088 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2089 return false;
2090 }
2091
2092 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2093 tiling > VK_IMAGE_TILING_END_RANGE)
2094 {
2095 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2096 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2097 return false;
2098 }
2099
2100
2101 if(pImageFormatProperties != nullptr)
2102 {
2103 }
2104
2105 if(result < VK_SUCCESS)
2106 {
2107 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2108 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2109 return false;
2110 }
2111
2112 return true;
2113}
2114
2115VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2116 VkPhysicalDevice physicalDevice,
2117 VkFormat format,
2118 VkImageType type,
2119 VkImageTiling tiling,
2120 VkImageUsageFlags usage,
2121 VkImageFormatProperties* pImageFormatProperties)
2122{
2123 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
2124
2125 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002126
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002127 return result;
2128}
2129
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002130bool PostGetPhysicalDeviceProperties(
2131 VkPhysicalDevice physicalDevice,
2132 VkPhysicalDeviceProperties* pProperties,
2133 VkResult result)
2134{
2135
2136 if(pProperties != nullptr)
2137 {
2138 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2139 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2140 {
2141 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2142 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2143 return false;
2144 }
2145 }
2146
2147 if(result < VK_SUCCESS)
2148 {
2149 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2150 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2151 return false;
2152 }
2153
2154 return true;
2155}
2156
2157VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2158 VkPhysicalDevice physicalDevice,
2159 VkPhysicalDeviceProperties* pProperties)
2160{
2161 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2162
2163 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2164
2165 return result;
2166}
2167
Cody Northropef72e2a2015-08-03 17:04:53 -06002168bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002169 VkPhysicalDevice physicalDevice,
2170 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002171 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002172 VkResult result)
2173{
2174
Cody Northropef72e2a2015-08-03 17:04:53 -06002175 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002176 {
2177 }
2178
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002179 if(pQueueProperties != nullptr)
2180 {
2181 }
2182
2183 if(result < VK_SUCCESS)
2184 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002185 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002186 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2187 return false;
2188 }
2189
2190 return true;
2191}
2192
2193VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2194 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002195 uint32_t* pCount,
2196 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002197{
Cody Northropef72e2a2015-08-03 17:04:53 -06002198 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002199
Cody Northropef72e2a2015-08-03 17:04:53 -06002200 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002201
2202 return result;
2203}
2204
2205bool PostGetPhysicalDeviceMemoryProperties(
2206 VkPhysicalDevice physicalDevice,
2207 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2208 VkResult result)
2209{
2210
2211 if(pMemoryProperties != nullptr)
2212 {
2213 }
2214
2215 if(result < VK_SUCCESS)
2216 {
2217 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2218 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2219 return false;
2220 }
2221
2222 return true;
2223}
2224
2225VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2226 VkPhysicalDevice physicalDevice,
2227 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2228{
2229 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2230
2231 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2232
2233 return result;
2234}
2235
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002236VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2237 VkPhysicalDevice physicalDevice,
2238 const VkDeviceCreateInfo* pCreateInfo,
2239 VkDevice* pDevice)
2240{
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002241 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002242 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2243 if(result == VK_SUCCESS)
2244 {
2245 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2246 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2247 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2248 }
2249
2250 return result;
2251}
2252
2253VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
2254 VkDevice device)
2255{
2256 layer_debug_report_destroy_device(device);
2257
2258 dispatch_key key = get_dispatch_key(device);
2259#if DISPATCH_MAP_DEBUG
2260 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2261#endif
2262
2263 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
2264 pc_device_table_map.erase(key);
2265 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2266
2267 return result;
2268}
2269
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002270bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002271 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002272 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002273 uint32_t queueIndex,
2274 VkQueue* pQueue,
2275 VkResult result)
2276{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002277
2278
2279
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002280 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002281 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002282 }
2283
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002284 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002285 {
2286 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002287 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2288 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002289 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002290
2291 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002292}
2293
2294VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2295 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002296 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002297 uint32_t queueIndex,
2298 VkQueue* pQueue)
2299{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002300 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002301
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002302 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002303
2304 return result;
2305}
2306
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002307bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002308 VkQueue queue,
2309 const VkCmdBuffer* pCmdBuffers)
2310{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002311 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002312 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002313 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002314
2315 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002316}
2317
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002318bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002319 VkQueue queue,
2320 uint32_t cmdBufferCount,
2321 VkFence fence,
2322 VkResult result)
2323{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002324
2325
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002326
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002327 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002328 {
2329 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002330 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2331 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002332 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002333
2334 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002335}
2336
2337VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2338 VkQueue queue,
2339 uint32_t cmdBufferCount,
2340 const VkCmdBuffer* pCmdBuffers,
2341 VkFence fence)
2342{
2343 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002344
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002345 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2346
2347 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2348
2349 return result;
2350}
2351
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002352bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002353 VkQueue queue,
2354 VkResult result)
2355{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002356
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002357 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002358 {
2359 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002360 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2361 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002362 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002363
2364 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002365}
2366
2367VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2368 VkQueue queue)
2369{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002370 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2371
2372 PostQueueWaitIdle(queue, result);
2373
2374 return result;
2375}
2376
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002377bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002378 VkDevice device,
2379 VkResult result)
2380{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002381
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002382 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002383 {
2384 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002385 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2386 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002387 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002388
2389 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002390}
2391
2392VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2393 VkDevice device)
2394{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002395 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2396
2397 PostDeviceWaitIdle(device, result);
2398
2399 return result;
2400}
2401
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002402bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002403 VkDevice device,
2404 const VkMemoryAllocInfo* pAllocInfo)
2405{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002406 if(pAllocInfo != nullptr)
2407 {
2408 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002409 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002410 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002411 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002412 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002413 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002414 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002415
2416 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002417}
2418
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002419bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002420 VkDevice device,
2421 VkDeviceMemory* pMem,
2422 VkResult result)
2423{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002424
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002425 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002426 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002427 }
2428
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002429 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002430 {
2431 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002432 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2433 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002434 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002435
2436 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002437}
2438
2439VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2440 VkDevice device,
2441 const VkMemoryAllocInfo* pAllocInfo,
2442 VkDeviceMemory* pMem)
2443{
2444 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002445
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002446 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2447
2448 PostAllocMemory(device, pMem, result);
2449
2450 return result;
2451}
2452
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002453bool PostFreeMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002454 VkDevice device,
2455 VkDeviceMemory mem,
2456 VkResult result)
2457{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002458
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002459
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002460 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002461 {
2462 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002463 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2464 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002465 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002466
2467 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002468}
2469
2470VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2471 VkDevice device,
2472 VkDeviceMemory mem)
2473{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002474 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2475
2476 PostFreeMemory(device, mem, result);
2477
2478 return result;
2479}
2480
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002481bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002482 VkDevice device,
2483 VkDeviceMemory mem,
2484 VkDeviceSize offset,
2485 VkDeviceSize size,
2486 VkMemoryMapFlags flags,
2487 void** ppData,
2488 VkResult result)
2489{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002490
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002491
2492
2493
2494
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002495 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002496 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002497 }
2498
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002499 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002500 {
2501 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002502 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2503 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002504 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002505
2506 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002507}
2508
2509VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2510 VkDevice device,
2511 VkDeviceMemory mem,
2512 VkDeviceSize offset,
2513 VkDeviceSize size,
2514 VkMemoryMapFlags flags,
2515 void** ppData)
2516{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002517 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2518
2519 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2520
2521 return result;
2522}
2523
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002524bool PostUnmapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002525 VkDevice device,
2526 VkDeviceMemory mem,
2527 VkResult result)
2528{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002529
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002530
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002531 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002532 {
2533 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002534 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2535 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002536 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002537
2538 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002539}
2540
2541VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2542 VkDevice device,
2543 VkDeviceMemory mem)
2544{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002545 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2546
2547 PostUnmapMemory(device, mem, result);
2548
2549 return result;
2550}
2551
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002552bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002553 VkDevice device,
2554 const VkMappedMemoryRange* pMemRanges)
2555{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002556 if(pMemRanges != nullptr)
2557 {
2558 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002559 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002560 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002561 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002562 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002563 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002564 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002565
2566 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002567}
2568
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002569bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002570 VkDevice device,
2571 uint32_t memRangeCount,
2572 VkResult result)
2573{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002574
2575
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002576 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002577 {
2578 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002579 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2580 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002581 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002582
2583 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002584}
2585
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002586VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002587 VkDevice device,
2588 uint32_t memRangeCount,
2589 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002590{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002591 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002592
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002593 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002594
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002595 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2596
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002597 return result;
2598}
2599
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002600bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002601 VkDevice device,
2602 const VkMappedMemoryRange* pMemRanges)
2603{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002604 if(pMemRanges != nullptr)
2605 {
2606 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002607 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002608 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002609 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002610 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002611 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002612 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002613
2614 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002615}
2616
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002617bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002618 VkDevice device,
2619 uint32_t memRangeCount,
2620 VkResult result)
2621{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002622
2623
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002624 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002625 {
2626 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002627 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2628 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002629 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002630
2631 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002632}
2633
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002634VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002635 VkDevice device,
2636 uint32_t memRangeCount,
2637 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002638{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002639 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002640
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002641 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002642
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002643 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2644
Tony Barbour859ceab2015-04-16 19:23:13 -06002645 return result;
2646}
2647
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002648bool PostGetDeviceMemoryCommitment(
2649 VkDevice device,
2650 VkDeviceMemory memory,
2651 VkDeviceSize* pCommittedMemoryInBytes,
2652 VkResult result)
2653{
2654
2655
2656 if(pCommittedMemoryInBytes != nullptr)
2657 {
2658 }
2659
2660 if(result < VK_SUCCESS)
2661 {
2662 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2663 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2664 return false;
2665 }
2666
2667 return true;
2668}
2669
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002670VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002671 VkDevice device,
2672 VkDeviceMemory memory,
2673 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002674{
2675 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2676
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002677 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2678
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002679 return result;
2680}
2681
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002682bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002683 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002684 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002685 VkDeviceMemory mem,
2686 VkDeviceSize memOffset,
2687 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002688{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002689
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002690
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002691
2692
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002693 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002694 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002695 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2696 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2697 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002698 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002699
2700 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002701}
2702
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002703VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002704 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002705 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002706 VkDeviceMemory mem,
2707 VkDeviceSize memOffset)
2708{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002709 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002710
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002711 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002712
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002713 return result;
2714}
2715
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002716bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002717 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002718 VkImage image,
2719 VkDeviceMemory mem,
2720 VkDeviceSize memOffset,
2721 VkResult result)
2722{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002723
2724
2725
2726
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002727 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002728 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002729 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2730 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2731 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002732 }
2733
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002734 return true;
2735}
2736
2737VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2738 VkDevice device,
2739 VkImage image,
2740 VkDeviceMemory mem,
2741 VkDeviceSize memOffset)
2742{
2743 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2744
2745 PostBindImageMemory(device, image, mem, memOffset, result);
2746
2747 return result;
2748}
2749
2750bool PostGetBufferMemoryRequirements(
2751 VkDevice device,
2752 VkBuffer buffer,
2753 VkMemoryRequirements* pMemoryRequirements,
2754 VkResult result)
2755{
2756
2757
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002758 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002759 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002760 }
2761
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002762 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002763 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002764 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2765 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2766 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002767 }
2768
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002769 return true;
2770}
2771
2772VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2773 VkDevice device,
2774 VkBuffer buffer,
2775 VkMemoryRequirements* pMemoryRequirements)
2776{
2777 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2778
2779 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2780
2781 return result;
2782}
2783
2784bool PostGetImageMemoryRequirements(
2785 VkDevice device,
2786 VkImage image,
2787 VkMemoryRequirements* pMemoryRequirements,
2788 VkResult result)
2789{
2790
2791
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002792 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002793 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002794 }
2795
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002796 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002797 {
2798 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2799 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2800 return false;
2801 }
2802
2803 return true;
2804}
2805
2806VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2807 VkDevice device,
2808 VkImage image,
2809 VkMemoryRequirements* pMemoryRequirements)
2810{
2811 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2812
2813 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2814
2815 return result;
2816}
2817
2818bool PostGetImageSparseMemoryRequirements(
2819 VkDevice device,
2820 VkImage image,
2821 uint32_t* pNumRequirements,
2822 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2823 VkResult result)
2824{
2825
2826
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002827 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002828 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002829 }
2830
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002831 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002832 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002833 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2834 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2835 {
2836 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002837 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002838 return false;
2839 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002840 }
2841
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002842 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002843 {
2844 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2845 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2846 return false;
2847 }
2848
2849 return true;
2850}
2851
2852VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2853 VkDevice device,
2854 VkImage image,
2855 uint32_t* pNumRequirements,
2856 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2857{
2858 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2859
2860 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2861
2862 return result;
2863}
2864
2865bool PostGetPhysicalDeviceSparseImageFormatProperties(
2866 VkPhysicalDevice physicalDevice,
2867 VkFormat format,
2868 VkImageType type,
2869 uint32_t samples,
2870 VkImageUsageFlags usage,
2871 VkImageTiling tiling,
2872 uint32_t* pNumProperties,
2873 VkSparseImageFormatProperties* pProperties,
2874 VkResult result)
2875{
2876
2877 if(format < VK_FORMAT_BEGIN_RANGE ||
2878 format > VK_FORMAT_END_RANGE)
2879 {
2880 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002881 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002882 return false;
2883 }
2884
2885 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2886 type > VK_IMAGE_TYPE_END_RANGE)
2887 {
2888 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002889 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002890 return false;
2891 }
2892
2893
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002894
2895 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2896 tiling > VK_IMAGE_TILING_END_RANGE)
2897 {
2898 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002899 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002900 return false;
2901 }
2902
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002903 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002904 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002905 }
2906
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002907 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002908 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002909 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2910 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2911 {
2912 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002913 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002914 return false;
2915 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002916 }
2917
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002918 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002919 {
2920 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2921 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2922 return false;
2923 }
2924
2925 return true;
2926}
2927
2928VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2929 VkPhysicalDevice physicalDevice,
2930 VkFormat format,
2931 VkImageType type,
2932 uint32_t samples,
2933 VkImageUsageFlags usage,
2934 VkImageTiling tiling,
2935 uint32_t* pNumProperties,
2936 VkSparseImageFormatProperties* pProperties)
2937{
2938 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2939
2940 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2941
2942 return result;
2943}
2944
2945bool PreQueueBindSparseBufferMemory(
2946 VkQueue queue,
2947 const VkSparseMemoryBindInfo* pBindInfo)
2948{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002949 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002950 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002951 }
2952
2953 return true;
2954}
2955
2956bool PostQueueBindSparseBufferMemory(
2957 VkQueue queue,
2958 VkBuffer buffer,
2959 uint32_t numBindings,
2960 VkResult result)
2961{
2962
2963
2964
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002965 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002966 {
2967 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2968 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2969 return false;
2970 }
2971
2972 return true;
2973}
2974
2975VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2976 VkQueue queue,
2977 VkBuffer buffer,
2978 uint32_t numBindings,
2979 const VkSparseMemoryBindInfo* pBindInfo)
2980{
2981 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2982
2983 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2984
2985 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2986
2987 return result;
2988}
2989
2990bool PreQueueBindSparseImageOpaqueMemory(
2991 VkQueue queue,
2992 const VkSparseMemoryBindInfo* pBindInfo)
2993{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002994 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002995 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002996 }
2997
2998 return true;
2999}
3000
3001bool PostQueueBindSparseImageOpaqueMemory(
3002 VkQueue queue,
3003 VkImage image,
3004 uint32_t numBindings,
3005 VkResult result)
3006{
3007
3008
3009
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003010 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003011 {
3012 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
3013 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3014 return false;
3015 }
3016
3017 return true;
3018}
3019
3020VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
3021 VkQueue queue,
3022 VkImage image,
3023 uint32_t numBindings,
3024 const VkSparseMemoryBindInfo* pBindInfo)
3025{
3026 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
3027
3028 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
3029
3030 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
3031
3032 return result;
3033}
3034
3035bool PreQueueBindSparseImageMemory(
3036 VkQueue queue,
3037 const VkSparseImageMemoryBindInfo* pBindInfo)
3038{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003039 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003040 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003041 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3042 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
3043 {
3044 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003045 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003046 return false;
3047 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003048 }
3049
3050 return true;
3051}
3052
3053bool PostQueueBindSparseImageMemory(
3054 VkQueue queue,
3055 VkImage image,
3056 uint32_t numBindings,
3057 VkResult result)
3058{
3059
3060
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003061
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003062 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003063 {
3064 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003065 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3066 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003067 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003068
3069 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003070}
3071
3072VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003073 VkQueue queue,
3074 VkImage image,
3075 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003076 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003077{
3078 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003079
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003080 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003081
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003082 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003083
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003084 return result;
3085}
3086
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003087bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003088 VkDevice device,
3089 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003090{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003091 if(pCreateInfo != nullptr)
3092 {
3093 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003094 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003095 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003096 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003097 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003098 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003099 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003100
3101 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003102}
3103
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003104bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003105 VkDevice device,
3106 VkFence* pFence,
3107 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003108{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003109
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003110 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003111 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003112 }
3113
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003114 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003115 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003116 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003117 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3118 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003119 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003120
3121 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003122}
3123
3124VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3125 VkDevice device,
3126 const VkFenceCreateInfo* pCreateInfo,
3127 VkFence* pFence)
3128{
3129 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003130
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003131 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3132
3133 PostCreateFence(device, pFence, result);
3134
3135 return result;
3136}
3137
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003138bool PostDestroyFence(
3139 VkDevice device,
3140 VkFence fence,
3141 VkResult result)
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 = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3148 log_msg(mdd(device), 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 vkDestroyFence(
3156 VkDevice device,
3157 VkFence fence)
3158{
3159 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3160
3161 PostDestroyFence(device, fence, result);
3162
3163 return result;
3164}
3165
3166bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003167 VkDevice device,
3168 const VkFence* pFences)
3169{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003170 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003171 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003172 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003173
3174 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003175}
3176
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003177bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003178 VkDevice device,
3179 uint32_t fenceCount,
3180 VkResult result)
3181{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003182
3183
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003184 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003185 {
3186 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003187 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3188 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003189 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003190
3191 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003192}
3193
3194VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3195 VkDevice device,
3196 uint32_t fenceCount,
3197 const VkFence* pFences)
3198{
3199 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003200
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003201 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3202
3203 PostResetFences(device, fenceCount, result);
3204
3205 return result;
3206}
3207
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003208bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003209 VkDevice device,
3210 VkFence fence,
3211 VkResult result)
3212{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003213
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003214
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003215 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003216 {
3217 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003218 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3219 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003220 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003221
3222 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003223}
3224
3225VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3226 VkDevice device,
3227 VkFence fence)
3228{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003229 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3230
3231 PostGetFenceStatus(device, fence, result);
3232
3233 return result;
3234}
3235
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003236bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003237 VkDevice device,
3238 const VkFence* pFences)
3239{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003240 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003241 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003242 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003243
3244 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003245}
3246
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003247bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003248 VkDevice device,
3249 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003250 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003251 uint64_t timeout,
3252 VkResult result)
3253{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003254
3255
3256
3257
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003258 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003259 {
3260 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3262 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003263 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003264
3265 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003266}
3267
3268VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3269 VkDevice device,
3270 uint32_t fenceCount,
3271 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003272 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003273 uint64_t timeout)
3274{
3275 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003276
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003277 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3278
3279 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3280
3281 return result;
3282}
3283
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003284bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003285 VkDevice device,
3286 const VkSemaphoreCreateInfo* pCreateInfo)
3287{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003288 if(pCreateInfo != nullptr)
3289 {
3290 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003291 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003292 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003293 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003294 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003295 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003296 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003297
3298 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003299}
3300
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003301bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003302 VkDevice device,
3303 VkSemaphore* pSemaphore,
3304 VkResult result)
3305{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003306
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003307 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003308 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003309 }
3310
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003311 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003312 {
3313 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003314 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3315 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003316 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003317
3318 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003319}
3320
3321VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3322 VkDevice device,
3323 const VkSemaphoreCreateInfo* pCreateInfo,
3324 VkSemaphore* pSemaphore)
3325{
3326 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003327
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003328 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3329
3330 PostCreateSemaphore(device, pSemaphore, result);
3331
3332 return result;
3333}
3334
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003335bool PostDestroySemaphore(
3336 VkDevice device,
3337 VkSemaphore semaphore,
3338 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003339{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003340
3341
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003342 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003343 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003344 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3345 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3346 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003347 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003348
3349 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003350}
3351
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003352VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3353 VkDevice device,
3354 VkSemaphore semaphore)
3355{
3356 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3357
3358 PostDestroySemaphore(device, semaphore, result);
3359
3360 return result;
3361}
3362
3363bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003364 VkQueue queue,
3365 VkSemaphore semaphore,
3366 VkResult result)
3367{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003368
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003369
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003370 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003371 {
3372 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003373 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3374 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003375 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003376
3377 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003378}
3379
3380VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3381 VkQueue queue,
3382 VkSemaphore semaphore)
3383{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003384 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3385
3386 PostQueueSignalSemaphore(queue, semaphore, result);
3387
3388 return result;
3389}
3390
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003391bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003392 VkQueue queue,
3393 VkSemaphore semaphore,
3394 VkResult result)
3395{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003396
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003397
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003398 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003399 {
3400 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003401 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3402 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003403 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003404
3405 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003406}
3407
3408VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3409 VkQueue queue,
3410 VkSemaphore semaphore)
3411{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003412 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3413
3414 PostQueueWaitSemaphore(queue, semaphore, result);
3415
3416 return result;
3417}
3418
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003419bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003420 VkDevice device,
3421 const VkEventCreateInfo* pCreateInfo)
3422{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003423 if(pCreateInfo != nullptr)
3424 {
3425 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_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 "vkCreateEvent 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 PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003437 VkDevice device,
3438 VkEvent* pEvent,
3439 VkResult result)
3440{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003442 if(pEvent != 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 = "vkCreateEvent 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 vkCreateEvent(
3457 VkDevice device,
3458 const VkEventCreateInfo* pCreateInfo,
3459 VkEvent* pEvent)
3460{
3461 PreCreateEvent(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)->CreateEvent(device, pCreateInfo, pEvent);
3464
3465 PostCreateEvent(device, pEvent, result);
3466
3467 return result;
3468}
3469
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003470bool PostDestroyEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003471 VkDevice device,
3472 VkEvent event,
3473 VkResult result)
3474{
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 = "vkDestroyEvent 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 }
3483
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003484 return true;
3485}
3486
3487VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3488 VkDevice device,
3489 VkEvent event)
3490{
3491 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3492
3493 PostDestroyEvent(device, event, result);
3494
3495 return result;
3496}
3497
3498bool PostGetEventStatus(
3499 VkDevice device,
3500 VkEvent event,
3501 VkResult result)
3502{
3503
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 = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003508 log_msg(mdd(device), 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 vkGetEventStatus(
3516 VkDevice device,
3517 VkEvent event)
3518{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003519 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3520
3521 PostGetEventStatus(device, event, result);
3522
3523 return result;
3524}
3525
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003526bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527 VkDevice device,
3528 VkEvent event,
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 = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003536 log_msg(mdd(device), 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 vkSetEvent(
3544 VkDevice device,
3545 VkEvent event)
3546{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003547 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3548
3549 PostSetEvent(device, event, result);
3550
3551 return result;
3552}
3553
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003554bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003555 VkDevice device,
3556 VkEvent event,
3557 VkResult result)
3558{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003559
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003560
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003561 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003562 {
3563 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003564 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3565 return false;
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
3571VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3572 VkDevice device,
3573 VkEvent event)
3574{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003575 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3576
3577 PostResetEvent(device, event, result);
3578
3579 return result;
3580}
3581
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003582bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003583 VkDevice device,
3584 const VkQueryPoolCreateInfo* pCreateInfo)
3585{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003586 if(pCreateInfo != nullptr)
3587 {
3588 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003589 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003590 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003591 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003592 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003593 }
3594 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3595 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3596 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003597 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003598 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003599 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003600 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003601 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003602
3603 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003604}
3605
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003606bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003607 VkDevice device,
3608 VkQueryPool* pQueryPool,
3609 VkResult result)
3610{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003611
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003612 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003613 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003614 }
3615
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003616 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003617 {
3618 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003619 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3620 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003621 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003622
3623 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003624}
3625
3626VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3627 VkDevice device,
3628 const VkQueryPoolCreateInfo* pCreateInfo,
3629 VkQueryPool* pQueryPool)
3630{
3631 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003632
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003633 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3634
3635 PostCreateQueryPool(device, pQueryPool, result);
3636
3637 return result;
3638}
3639
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003640bool PostDestroyQueryPool(
3641 VkDevice device,
3642 VkQueryPool queryPool,
3643 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003644{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003645
3646
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003647 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003648 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003649 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3650 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3651 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003652 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003653
3654 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003655}
3656
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003657VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3658 VkDevice device,
3659 VkQueryPool queryPool)
3660{
3661 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3662
3663 PostDestroyQueryPool(device, queryPool, result);
3664
3665 return result;
3666}
3667
3668bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003669 VkDevice device,
3670 VkQueryPool queryPool,
3671 uint32_t startQuery,
3672 uint32_t queryCount,
3673 size_t* pDataSize,
3674 void* pData,
3675 VkQueryResultFlags flags,
3676 VkResult result)
3677{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003678
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003679
3680
3681
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003682 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003683 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003684 }
3685
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003686 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003687 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003688 }
3689
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003690
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003691 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003692 {
3693 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003694 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3695 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003696 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003697
3698 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003699}
3700
3701VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3702 VkDevice device,
3703 VkQueryPool queryPool,
3704 uint32_t startQuery,
3705 uint32_t queryCount,
3706 size_t* pDataSize,
3707 void* pData,
3708 VkQueryResultFlags flags)
3709{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003710 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3711
3712 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3713
3714 return result;
3715}
3716
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003717bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003718 VkDevice device,
3719 const VkBufferCreateInfo* pCreateInfo)
3720{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003721 if(pCreateInfo != nullptr)
3722 {
3723 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_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 "vkCreateBuffer 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 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003729 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3730 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003731 {
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 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003734 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003735 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003736 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003737 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003738 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003739 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003740
3741 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003742}
3743
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003744bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003745 VkDevice device,
3746 VkBuffer* pBuffer,
3747 VkResult result)
3748{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003749
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003750 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003751 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003752 }
3753
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003754 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003755 {
3756 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003757 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3758 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003759 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003760
3761 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003762}
3763
3764VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3765 VkDevice device,
3766 const VkBufferCreateInfo* pCreateInfo,
3767 VkBuffer* pBuffer)
3768{
3769 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003770
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003771 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3772
3773 PostCreateBuffer(device, pBuffer, result);
3774
3775 return result;
3776}
3777
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003778bool PostDestroyBuffer(
3779 VkDevice device,
3780 VkBuffer buffer,
3781 VkResult result)
3782{
3783
3784
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003785 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003786 {
3787 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3788 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3789 return false;
3790 }
3791
3792 return true;
3793}
3794
3795VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3796 VkDevice device,
3797 VkBuffer buffer)
3798{
3799 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
3800
3801 PostDestroyBuffer(device, buffer, result);
3802
3803 return result;
3804}
3805
3806bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003807 VkDevice device,
3808 const VkBufferViewCreateInfo* pCreateInfo)
3809{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003810 if(pCreateInfo != nullptr)
3811 {
3812 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003813 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003814 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003815 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003816 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003817 }
3818 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3819 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3820 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003821 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003822 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003823 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003824 }
3825 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3826 pCreateInfo->format > VK_FORMAT_END_RANGE)
3827 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003828 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003829 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003830 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003831 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003832 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003833
3834 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003835}
3836
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003837bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003838 VkDevice device,
3839 VkBufferView* pView,
3840 VkResult result)
3841{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003842
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003843 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003844 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003845 }
3846
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003847 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003848 {
3849 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003850 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3851 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003852 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003853
3854 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003855}
3856
3857VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3858 VkDevice device,
3859 const VkBufferViewCreateInfo* pCreateInfo,
3860 VkBufferView* pView)
3861{
3862 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003863
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003864 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3865
3866 PostCreateBufferView(device, pView, result);
3867
3868 return result;
3869}
3870
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003871bool PostDestroyBufferView(
3872 VkDevice device,
3873 VkBufferView bufferView,
3874 VkResult result)
3875{
3876
3877
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003878 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003879 {
3880 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
3881 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3882 return false;
3883 }
3884
3885 return true;
3886}
3887
3888VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
3889 VkDevice device,
3890 VkBufferView bufferView)
3891{
3892 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
3893
3894 PostDestroyBufferView(device, bufferView, result);
3895
3896 return result;
3897}
3898
3899bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003900 VkDevice device,
3901 const VkImageCreateInfo* pCreateInfo)
3902{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003903 if(pCreateInfo != nullptr)
3904 {
3905 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003906 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003907 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003908 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003909 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003910 }
3911 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3912 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3913 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003914 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003915 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003916 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003917 }
3918 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3919 pCreateInfo->format > VK_FORMAT_END_RANGE)
3920 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003921 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003922 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003923 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003924 }
3925 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3926 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3927 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003928 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003929 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003930 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003931 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003932 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3933 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003934 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3936 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003937 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003938 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003939 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003940 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003941 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003942 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003943
3944 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003945}
3946
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003947bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003948 VkDevice device,
3949 VkImage* pImage,
3950 VkResult result)
3951{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003952
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003953 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003954 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003955 }
3956
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003957 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003958 {
3959 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003960 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3961 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003962 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003963
3964 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003965}
3966
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003967VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3968 VkDevice device,
3969 const VkImageCreateInfo* pCreateInfo,
3970 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003971{
3972 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003973
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003974 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3975
3976 PostCreateImage(device, pImage, result);
3977
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003978 return result;
3979}
3980
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003981bool PostDestroyImage(
3982 VkDevice device,
3983 VkImage image,
3984 VkResult result)
3985{
3986
3987
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003988 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003989 {
3990 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
3991 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3992 return false;
3993 }
3994
3995 return true;
3996}
3997
3998VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
3999 VkDevice device,
4000 VkImage image)
4001{
4002 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
4003
4004 PostDestroyImage(device, image, result);
4005
4006 return result;
4007}
4008
4009bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004010 VkDevice device,
4011 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004012{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004013 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004014 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004015 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4016 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4017 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004018 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004019 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004020 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004021 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004022 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004023
4024 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004025}
4026
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004027bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004028 VkDevice device,
4029 VkImage image,
4030 VkSubresourceLayout* pLayout,
4031 VkResult result)
4032{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004033
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004034
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004035 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004036 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004037 }
4038
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004039 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004040 {
4041 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004042 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4043 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004044 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004045
4046 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004047}
4048
4049VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4050 VkDevice device,
4051 VkImage image,
4052 const VkImageSubresource* pSubresource,
4053 VkSubresourceLayout* pLayout)
4054{
4055 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004056
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004057 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4058
4059 PostGetImageSubresourceLayout(device, image, pLayout, result);
4060
4061 return result;
4062}
4063
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004064bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004065 VkDevice device,
4066 const VkImageViewCreateInfo* pCreateInfo)
4067{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004068 if(pCreateInfo != nullptr)
4069 {
4070 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004071 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004072 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004073 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004074 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004075 }
4076 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4077 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4078 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004079 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004080 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004081 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004082 }
4083 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4084 pCreateInfo->format > VK_FORMAT_END_RANGE)
4085 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004086 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004087 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004088 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004089 }
4090 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4091 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4092 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004093 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004094 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004095 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004096 }
4097 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4098 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4099 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004100 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004101 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004102 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004103 }
4104 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4105 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4106 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004107 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004108 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004109 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004110 }
4111 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4112 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4113 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004114 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004115 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004116 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004117 }
4118 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4119 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4120 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004121 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004122 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004123 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004124 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004125 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004126
4127 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004128}
4129
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004130bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004131 VkDevice device,
4132 VkImageView* pView,
4133 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004134{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004135
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004136 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004137 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004138 }
4139
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004140 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004141 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004142 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004143 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4144 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004145 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004146
4147 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004148}
4149
4150VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4151 VkDevice device,
4152 const VkImageViewCreateInfo* pCreateInfo,
4153 VkImageView* pView)
4154{
4155 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004156
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004157 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4158
4159 PostCreateImageView(device, pView, result);
4160
4161 return result;
4162}
4163
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004164bool PostDestroyImageView(
4165 VkDevice device,
4166 VkImageView imageView,
4167 VkResult result)
4168{
4169
4170
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004171 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004172 {
4173 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4174 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4175 return false;
4176 }
4177
4178 return true;
4179}
4180
4181VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4182 VkDevice device,
4183 VkImageView imageView)
4184{
4185 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4186
4187 PostDestroyImageView(device, imageView, result);
4188
4189 return result;
4190}
4191
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004192bool PostDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004193 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004194 VkShaderModule shaderModule,
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004195 VkResult result)
4196{
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004197
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004198
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004199 if(result < VK_SUCCESS)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004200 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004201 std::string reason = "vkDestroyShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4202 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4203 return false;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004204 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004205
4206 return true;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004207}
4208
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004209VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004210 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004211 VkShaderModule shaderModule)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004212{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004213 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004214
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004215 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004216
4217 return result;
4218}
4219
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004220bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004221 VkDevice device,
4222 const VkShaderCreateInfo* pCreateInfo)
4223{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004224 if(pCreateInfo != nullptr)
4225 {
4226 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004227 {
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 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004230 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004231 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004232 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004233 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004234 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004235 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004236
4237 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004238}
4239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004240bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004241 VkDevice device,
4242 VkShader* pShader,
4243 VkResult result)
4244{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004245
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004246 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004247 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004248 }
4249
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004250 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004251 {
4252 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004253 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4254 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004255 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004256
4257 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004258}
4259
4260VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4261 VkDevice device,
4262 const VkShaderCreateInfo* pCreateInfo,
4263 VkShader* pShader)
4264{
4265 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004266
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004267 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4268
4269 PostCreateShader(device, pShader, result);
4270
4271 return result;
4272}
4273
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004274bool PostDestroyShader(
4275 VkDevice device,
4276 VkShader shader,
4277 VkResult result)
4278{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004279
4280
4281 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004282 {
4283 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4284 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4285 return false;
4286 }
4287
4288 return true;
4289}
4290
4291VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4292 VkDevice device,
4293 VkShader shader)
4294{
4295 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4296
4297 PostDestroyShader(device, shader, result);
4298
4299 return result;
4300}
4301
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004302bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004303 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004304 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004305{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004306 if(pCreateInfo != nullptr)
4307 {
4308 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004309 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004310 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004311 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004312 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004313 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004314 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004315 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004316 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004317 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004318
4319 return true;
4320}
4321
4322bool PostCreatePipelineCache(
4323 VkDevice device,
4324 VkPipelineCache* pPipelineCache,
4325 VkResult result)
4326{
4327
4328 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004329 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004330 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004331
4332 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004333 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004334 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004335 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4336 return false;
4337 }
4338
4339 return true;
4340}
4341
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004342VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06004343 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004344 const VkPipelineCacheCreateInfo* pCreateInfo,
4345 VkPipelineCache* pPipelineCache)
4346{
4347 PreCreatePipelineCache(device, pCreateInfo);
4348
4349 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4350
4351 PostCreatePipelineCache(device, pPipelineCache, result);
4352
4353 return result;
4354}
4355
4356bool PostDestroyPipelineCache(
4357 VkDevice device,
4358 VkPipelineCache pipelineCache,
Tony Barboure307f582015-07-10 15:29:03 -06004359 VkResult result)
4360{
4361
Tony Barboure307f582015-07-10 15:29:03 -06004362
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004363 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004364 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004365 std::string reason = "vkDestroyPipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004366 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4367 return false;
4368 }
4369
4370 return true;
4371}
4372
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004373VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineCache(
4374 VkDevice device,
4375 VkPipelineCache pipelineCache)
4376{
4377 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache);
4378
4379 PostDestroyPipelineCache(device, pipelineCache, result);
4380
4381 return result;
4382}
4383
4384bool PostGetPipelineCacheSize(
4385 VkDevice device,
4386 VkPipelineCache pipelineCache)
4387{
4388
4389
4390 return true;
4391}
4392
4393VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4394 VkDevice device,
4395 VkPipelineCache pipelineCache)
4396{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004397 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004398
4399 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004400
4401 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004402}
4403
4404bool PostGetPipelineCacheData(
4405 VkDevice device,
4406 VkPipelineCache pipelineCache,
4407 void* pData,
4408 VkResult result)
4409{
4410
4411
4412 if(pData != nullptr)
4413 {
4414 }
4415
4416 if(result < VK_SUCCESS)
4417 {
4418 std::string reason = "vkGetPipelineCacheData 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 vkGetPipelineCacheData(
4427 VkDevice device,
4428 VkPipelineCache pipelineCache,
4429 void* pData)
4430{
4431 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4432
4433 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4434
4435 return result;
4436}
4437
4438bool PreMergePipelineCaches(
4439 VkDevice device,
4440 const VkPipelineCache* pSrcCaches)
4441{
4442 if(pSrcCaches != nullptr)
4443 {
4444 }
4445
4446 return true;
4447}
4448
4449bool PostMergePipelineCaches(
4450 VkDevice device,
4451 VkPipelineCache destCache,
4452 uint32_t srcCacheCount,
4453 VkResult result)
4454{
4455
4456
4457
4458 if(result < VK_SUCCESS)
4459 {
4460 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4461 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4462 return false;
4463 }
4464
4465 return true;
4466}
4467
4468VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4469 VkDevice device,
4470 VkPipelineCache destCache,
4471 uint32_t srcCacheCount,
4472 const VkPipelineCache* pSrcCaches)
4473{
4474 PreMergePipelineCaches(device, pSrcCaches);
4475
4476 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4477
4478 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4479
4480 return result;
4481}
4482
4483bool PreCreateGraphicsPipelines(
4484 VkDevice device,
4485 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4486{
4487 if(pCreateInfos != nullptr)
4488 {
4489 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4490 {
4491 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4492 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4493 return false;
4494 }
4495 if(pCreateInfos->pStages != nullptr)
4496 {
4497 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4498 {
4499 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4500 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4501 return false;
4502 }
4503 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4504 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4505 {
4506 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4507 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4508 return false;
4509 }
4510 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4511 {
4512 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4513 {
4514 }
4515 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4516 {
4517 }
4518 }
4519 }
4520 if(pCreateInfos->pVertexInputState != nullptr)
4521 {
4522 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4523 {
4524 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4525 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4526 return false;
4527 }
4528 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4529 {
4530 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4531 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4532 {
4533 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4534 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4535 return false;
4536 }
4537 }
4538 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4539 {
4540 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4541 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4542 {
4543 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4544 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4545 return false;
4546 }
4547 }
4548 }
4549 if(pCreateInfos->pInputAssemblyState != nullptr)
4550 {
4551 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4552 {
4553 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4554 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4555 return false;
4556 }
4557 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4558 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4559 {
4560 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4561 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4562 return false;
4563 }
4564 }
4565 if(pCreateInfos->pTessellationState != nullptr)
4566 {
4567 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4568 {
4569 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4570 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4571 return false;
4572 }
4573 }
4574 if(pCreateInfos->pViewportState != nullptr)
4575 {
4576 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4577 {
4578 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4579 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4580 return false;
4581 }
4582 }
4583 if(pCreateInfos->pRasterState != nullptr)
4584 {
4585 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4586 {
4587 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4588 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4589 return false;
4590 }
4591 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4592 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4593 {
4594 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4595 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4596 return false;
4597 }
4598 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4599 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4600 {
4601 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4602 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4603 return false;
4604 }
4605 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4606 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4607 {
4608 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4609 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4610 return false;
4611 }
4612 }
4613 if(pCreateInfos->pMultisampleState != nullptr)
4614 {
4615 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4616 {
4617 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4618 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4619 return false;
4620 }
4621 }
4622 if(pCreateInfos->pDepthStencilState != nullptr)
4623 {
4624 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4625 {
4626 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4627 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4628 return false;
4629 }
4630 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4631 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4632 {
4633 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4634 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4635 return false;
4636 }
4637 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4638 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4639 {
4640 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4641 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4642 return false;
4643 }
4644 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4645 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4646 {
4647 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4648 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4649 return false;
4650 }
4651 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4652 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4653 {
4654 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4655 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4656 return false;
4657 }
4658 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4659 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4660 {
4661 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4662 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4663 return false;
4664 }
4665 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4666 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4667 {
4668 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4669 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4670 return false;
4671 }
4672 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4673 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4674 {
4675 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4676 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4677 return false;
4678 }
4679 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4680 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4681 {
4682 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4683 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4684 return false;
4685 }
4686 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4687 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4688 {
4689 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4690 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4691 return false;
4692 }
4693 }
4694 if(pCreateInfos->pColorBlendState != nullptr)
4695 {
4696 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4697 {
4698 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4699 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4700 return false;
4701 }
4702 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4703 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4704 {
4705 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4706 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4707 return false;
4708 }
4709 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4710 {
4711 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4712 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4713 {
4714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4715 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4716 return false;
4717 }
4718 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4719 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4720 {
4721 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4722 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4723 return false;
4724 }
4725 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4726 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4727 {
4728 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4729 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4730 return false;
4731 }
4732 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4733 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4734 {
4735 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4736 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4737 return false;
4738 }
4739 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4740 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4741 {
4742 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4743 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4744 return false;
4745 }
4746 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4747 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4748 {
4749 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4750 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4751 return false;
4752 }
4753 }
4754 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004755 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4756 {
4757 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4758 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4759 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004760 }
4761
4762 return true;
4763}
4764
4765bool PostCreateGraphicsPipelines(
4766 VkDevice device,
4767 VkPipelineCache pipelineCache,
4768 uint32_t count,
4769 VkPipeline* pPipelines,
4770 VkResult result)
4771{
4772
4773
4774
4775 if(pPipelines != nullptr)
4776 {
4777 }
4778
4779 if(result < VK_SUCCESS)
4780 {
4781 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4782 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4783 return false;
4784 }
4785
4786 return true;
4787}
4788
4789VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4790 VkDevice device,
4791 VkPipelineCache pipelineCache,
4792 uint32_t count,
4793 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4794 VkPipeline* pPipelines)
4795{
4796 PreCreateGraphicsPipelines(device, pCreateInfos);
4797
4798 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4799
4800 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4801
4802 return result;
4803}
4804
4805bool PreCreateComputePipelines(
4806 VkDevice device,
4807 const VkComputePipelineCreateInfo* pCreateInfos)
4808{
4809 if(pCreateInfos != nullptr)
4810 {
4811 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4812 {
4813 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4814 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4815 return false;
4816 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004817 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004818 {
4819 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4820 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4821 return false;
4822 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004823 if(pCreateInfos->stage.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4824 pCreateInfos->stage.stage > VK_SHADER_STAGE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004825 {
4826 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4827 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4828 return false;
4829 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004830 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004831 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004832 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004833 {
4834 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004835 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004836 {
4837 }
4838 }
4839 }
4840
4841 return true;
4842}
4843
4844bool PostCreateComputePipelines(
4845 VkDevice device,
4846 VkPipelineCache pipelineCache,
4847 uint32_t count,
4848 VkPipeline* pPipelines,
4849 VkResult result)
4850{
4851
4852
4853
4854 if(pPipelines != nullptr)
4855 {
4856 }
4857
4858 if(result < VK_SUCCESS)
4859 {
4860 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4862 return false;
4863 }
4864
4865 return true;
4866}
4867
4868VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4869 VkDevice device,
4870 VkPipelineCache pipelineCache,
4871 uint32_t count,
4872 const VkComputePipelineCreateInfo* pCreateInfos,
4873 VkPipeline* pPipelines)
4874{
4875 PreCreateComputePipelines(device, pCreateInfos);
4876
4877 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4878
4879 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4880
4881 return result;
4882}
4883
Tony Barboure307f582015-07-10 15:29:03 -06004884bool PostDestroyPipeline(
4885 VkDevice device,
4886 VkPipeline pipeline,
4887 VkResult result)
4888{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004889
4890
4891 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004892 {
4893 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
4894 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4895 return false;
4896 }
4897
4898 return true;
4899}
4900
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004901VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
4902 VkDevice device,
4903 VkPipeline pipeline)
4904{
4905 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
4906
4907 PostDestroyPipeline(device, pipeline, result);
4908
4909 return result;
4910}
4911
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004912bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004913 VkDevice device,
4914 const VkPipelineLayoutCreateInfo* pCreateInfo)
4915{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004916 if(pCreateInfo != nullptr)
4917 {
4918 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004919 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004920 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004921 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4922 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004923 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004924 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004925 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004926 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004927 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004928 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004929 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004930 }
4931
4932 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004933}
4934
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004935bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004936 VkDevice device,
4937 VkPipelineLayout* pPipelineLayout,
4938 VkResult result)
4939{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004940
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004941 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004942 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004943 }
4944
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004945 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004946 {
4947 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004948 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4949 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004950 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004951
4952 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004953}
4954
4955VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4956 VkDevice device,
4957 const VkPipelineLayoutCreateInfo* pCreateInfo,
4958 VkPipelineLayout* pPipelineLayout)
4959{
4960 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004961
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004962 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4963
4964 PostCreatePipelineLayout(device, pPipelineLayout, result);
4965
4966 return result;
4967}
4968
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004969bool PostDestroyPipelineLayout(
4970 VkDevice device,
4971 VkPipelineLayout pipelineLayout,
4972 VkResult result)
4973{
4974
4975
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004976 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004977 {
4978 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
4979 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4980 return false;
4981 }
4982
4983 return true;
4984}
4985
4986VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
4987 VkDevice device,
4988 VkPipelineLayout pipelineLayout)
4989{
4990 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
4991
4992 PostDestroyPipelineLayout(device, pipelineLayout, result);
4993
4994 return result;
4995}
4996
4997bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004998 VkDevice device,
4999 const VkSamplerCreateInfo* pCreateInfo)
5000{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005001 if(pCreateInfo != nullptr)
5002 {
5003 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005004 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005005 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005006 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005007 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005008 }
5009 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5010 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5011 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005012 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005013 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005014 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005015 }
5016 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5017 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5018 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005019 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005020 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005021 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005022 }
5023 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5024 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5025 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005026 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005027 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005028 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005029 }
5030 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5031 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5032 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005033 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005034 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005035 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005036 }
5037 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5038 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5039 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005040 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005041 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005042 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005043 }
5044 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5045 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5046 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005047 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005048 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005049 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005050 }
5051 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5052 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5053 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005054 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005055 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005056 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005057 }
5058 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5059 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5060 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005061 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005062 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005063 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005064 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005065 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005066
5067 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005068}
5069
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005070bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005071 VkDevice device,
5072 VkSampler* pSampler,
5073 VkResult result)
5074{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005075
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005076 if(pSampler != 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 = "vkCreateSampler 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 vkCreateSampler(
5091 VkDevice device,
5092 const VkSamplerCreateInfo* pCreateInfo,
5093 VkSampler* pSampler)
5094{
5095 PreCreateSampler(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)->CreateSampler(device, pCreateInfo, pSampler);
5098
5099 PostCreateSampler(device, pSampler, result);
5100
5101 return result;
5102}
5103
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005104bool PostDestroySampler(
5105 VkDevice device,
5106 VkSampler sampler,
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 = "vkDestroySampler 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 vkDestroySampler(
5122 VkDevice device,
5123 VkSampler sampler)
5124{
5125 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5126
5127 PostDestroySampler(device, sampler, result);
5128
5129 return result;
5130}
5131
5132bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005133 VkDevice device,
5134 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5135{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005136 if(pCreateInfo != nullptr)
5137 {
5138 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_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 "vkCreateDescriptorSetLayout 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 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005144 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005145 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005146 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5147 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5148 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005149 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005150 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005151 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005152 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005153 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005154 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005155 }
5156 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005157 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005158
5159 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005160}
5161
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005162bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005163 VkDevice device,
5164 VkDescriptorSetLayout* pSetLayout,
5165 VkResult result)
5166{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005167
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005168 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005169 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005170 }
5171
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005172 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005173 {
5174 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005175 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5176 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005177 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005178
5179 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005180}
5181
5182VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5183 VkDevice device,
5184 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5185 VkDescriptorSetLayout* pSetLayout)
5186{
5187 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005188
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005189 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5190
5191 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5192
5193 return result;
5194}
5195
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005196bool PostDestroyDescriptorSetLayout(
5197 VkDevice device,
5198 VkDescriptorSetLayout descriptorSetLayout,
5199 VkResult result)
5200{
5201
5202
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005203 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005204 {
5205 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5206 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5207 return false;
5208 }
5209
5210 return true;
5211}
5212
5213VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5214 VkDevice device,
5215 VkDescriptorSetLayout descriptorSetLayout)
5216{
5217 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5218
5219 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5220
5221 return result;
5222}
5223
5224bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005225 VkDevice device,
5226 const VkDescriptorPoolCreateInfo* pCreateInfo)
5227{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005228 if(pCreateInfo != nullptr)
5229 {
5230 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005231 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005232 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005233 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005234 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005235 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005236 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005237 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005238 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5239 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5240 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005241 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005242 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005243 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005244 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005245 }
5246 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005247
5248 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005249}
5250
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005251bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005252 VkDevice device,
5253 VkDescriptorPoolUsage poolUsage,
5254 uint32_t maxSets,
5255 VkDescriptorPool* pDescriptorPool,
5256 VkResult result)
5257{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005258
5259 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5260 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5261 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005262 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005263 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005264 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005265 }
5266
5267
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005268 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005269 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005270 }
5271
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005272 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005273 {
5274 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005275 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5276 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005277 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005278
5279 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005280}
5281
5282VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5283 VkDevice device,
5284 VkDescriptorPoolUsage poolUsage,
5285 uint32_t maxSets,
5286 const VkDescriptorPoolCreateInfo* pCreateInfo,
5287 VkDescriptorPool* pDescriptorPool)
5288{
5289 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005290
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005291 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5292
5293 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5294
5295 return result;
5296}
5297
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005298bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005299 VkDevice device,
5300 VkDescriptorPool descriptorPool,
5301 VkResult result)
5302{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005303
5304
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005305 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005306 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005307 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5308 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5309 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005310 }
5311
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005312 return true;
5313}
5314
5315VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5316 VkDevice device,
5317 VkDescriptorPool descriptorPool)
5318{
5319 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5320
5321 PostDestroyDescriptorPool(device, descriptorPool, result);
5322
5323 return result;
5324}
5325
5326bool PostResetDescriptorPool(
5327 VkDevice device,
5328 VkDescriptorPool descriptorPool,
5329 VkResult result)
5330{
5331
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005332
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005333 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005334 {
5335 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005336 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5337 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005338 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005339
5340 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005341}
5342
5343VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5344 VkDevice device,
5345 VkDescriptorPool descriptorPool)
5346{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005347 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5348
5349 PostResetDescriptorPool(device, descriptorPool, result);
5350
5351 return result;
5352}
5353
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005354bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005355 VkDevice device,
5356 const VkDescriptorSetLayout* pSetLayouts)
5357{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005358 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005359 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005360 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005361
5362 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005363}
5364
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005365bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005366 VkDevice device,
5367 VkDescriptorPool descriptorPool,
5368 VkDescriptorSetUsage setUsage,
5369 uint32_t count,
5370 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005371 VkResult result)
5372{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005373
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005374
5375 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5376 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5377 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005378 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005379 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005380 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005381 }
5382
5383
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005384 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005385 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005386 }
5387
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005388 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005389 {
5390 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005391 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5392 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005393 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005394
5395 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005396}
5397
5398VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5399 VkDevice device,
5400 VkDescriptorPool descriptorPool,
5401 VkDescriptorSetUsage setUsage,
5402 uint32_t count,
5403 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06005404 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005405{
5406 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005407
Cody Northropc8aa4a52015-08-03 12:47:29 -06005408 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005409
Cody Northropc8aa4a52015-08-03 12:47:29 -06005410 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005411
5412 return result;
5413}
5414
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005415bool PreFreeDescriptorSets(
5416 VkDevice device,
5417 const VkDescriptorSet* pDescriptorSets)
5418{
5419 if(pDescriptorSets != nullptr)
5420 {
5421 }
5422
5423 return true;
5424}
5425
5426bool PostFreeDescriptorSets(
5427 VkDevice device,
5428 VkDescriptorPool descriptorPool,
5429 uint32_t count,
5430 VkResult result)
5431{
5432
5433
5434
5435 if(result < VK_SUCCESS)
5436 {
5437 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5438 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5439 return false;
5440 }
5441
5442 return true;
5443}
5444
5445VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
5446 VkDevice device,
5447 VkDescriptorPool descriptorPool,
5448 uint32_t count,
5449 const VkDescriptorSet* pDescriptorSets)
5450{
5451 PreFreeDescriptorSets(device, pDescriptorSets);
5452
5453 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
5454
5455 PostFreeDescriptorSets(device, descriptorPool, count, result);
5456
5457 return result;
5458}
5459
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005460bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005461 VkDevice device,
5462 const VkWriteDescriptorSet* pDescriptorWrites,
5463 const VkCopyDescriptorSet* pDescriptorCopies)
5464{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005465 if(pDescriptorWrites != nullptr)
5466 {
5467 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005468 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005469 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005470 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005471 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005472 }
5473 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5474 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5475 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005476 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005477 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005478 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005479 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005480 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005481 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005482 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5483 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5484 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005485 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005486 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005487 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005488 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005489 }
5490 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005491
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005492 if(pDescriptorCopies != nullptr)
5493 {
5494 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005495 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005496 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005497 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005498 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005499 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005500 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005501
5502 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005503}
5504
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005505bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005506 VkDevice device,
5507 uint32_t writeCount,
5508 uint32_t copyCount,
5509 VkResult result)
5510{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005511
5512
5513
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005514 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005515 {
5516 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005517 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5518 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005520
5521 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005522}
5523
5524VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
5525 VkDevice device,
5526 uint32_t writeCount,
5527 const VkWriteDescriptorSet* pDescriptorWrites,
5528 uint32_t copyCount,
5529 const VkCopyDescriptorSet* pDescriptorCopies)
5530{
5531 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005532
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005533 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
5534
5535 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
5536
5537 return result;
5538}
5539
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005540bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005541 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005542 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005543{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005544 if(pCreateInfo != nullptr)
5545 {
5546 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005547 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005548 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005549 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005550 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005551 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005552 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005553 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005554 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005555 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005556 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005557 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005558 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005559
5560 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005561}
5562
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005563bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005564 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005565 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005566 VkResult result)
5567{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005568
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005569 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005570 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005571 }
5572
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005573 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005574 {
5575 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005576 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5577 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005578 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005579
5580 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005581}
5582
5583VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5584 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005585 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5586 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005587{
5588 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005589
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005590 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5591
5592 PostCreateDynamicViewportState(device, pState, result);
5593
5594 return result;
5595}
5596
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005597bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005598 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005599 VkDynamicViewportState dynamicViewportState,
5600 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005601{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005602
5603
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005604 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005605 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005606 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
5607 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5608 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005609 }
5610
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005611 return true;
5612}
5613
5614VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
5615 VkDevice device,
5616 VkDynamicViewportState dynamicViewportState)
5617{
5618 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
5619
5620 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
5621
5622 return result;
5623}
5624
Cody Northrope4bc6942015-08-26 10:01:32 -06005625bool PreCreateDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005626 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005627 const VkDynamicLineWidthStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005628{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005629 if(pCreateInfo != nullptr)
5630 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005631 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005632 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005633 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005634 "vkCreateDynamicLineWidthState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005635 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005636 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005637 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005638
5639 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005640}
5641
Cody Northrope4bc6942015-08-26 10:01:32 -06005642bool PostCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005643 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005644 VkDynamicLineWidthState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005645 VkResult result)
5646{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005647
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005648 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005649 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005650 }
5651
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005652 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005653 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005654 std::string reason = "vkCreateDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005655 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5656 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005657 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005658
5659 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005660}
5661
Cody Northrope4bc6942015-08-26 10:01:32 -06005662VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005663 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005664 const VkDynamicLineWidthStateCreateInfo* pCreateInfo,
5665 VkDynamicLineWidthState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005666{
Cody Northrope4bc6942015-08-26 10:01:32 -06005667 PreCreateDynamicLineWidthState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005668
Cody Northrope4bc6942015-08-26 10:01:32 -06005669 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005670
Cody Northrope4bc6942015-08-26 10:01:32 -06005671 PostCreateDynamicLineWidthState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005672
5673 return result;
5674}
5675
Cody Northrope4bc6942015-08-26 10:01:32 -06005676bool PostDestroyDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005677 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005678 VkDynamicLineWidthState dynamicLineWidthState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005679 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005680{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005681
5682
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005683 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005684 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005685 std::string reason = "vkDestroyDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005686 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5687 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005688 }
5689
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005690 return true;
5691}
5692
Cody Northrope4bc6942015-08-26 10:01:32 -06005693VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005694 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005695 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005696{
Cody Northrope4bc6942015-08-26 10:01:32 -06005697 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicLineWidthState(device, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005698
Cody Northrope4bc6942015-08-26 10:01:32 -06005699 PostDestroyDynamicLineWidthState(device, dynamicLineWidthState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005700
5701 return result;
5702}
5703
Cody Northrope4bc6942015-08-26 10:01:32 -06005704bool PreCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005705 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005706 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo)
Cody Northropf5bd2252015-08-17 11:10:49 -06005707{
5708 if(pCreateInfo != nullptr)
5709 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005710 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO)
Cody Northropf5bd2252015-08-17 11:10:49 -06005711 {
5712 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005713 "vkCreateDynamicDepthBiasState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Cody Northropf5bd2252015-08-17 11:10:49 -06005714 return false;
5715 }
5716 }
5717
5718 return true;
5719}
5720
Cody Northrope4bc6942015-08-26 10:01:32 -06005721bool PostCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005722 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005723 VkDynamicDepthBiasState* pState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005724 VkResult result)
5725{
5726
5727 if(pState != nullptr)
5728 {
5729 }
5730
5731 if(result < VK_SUCCESS)
5732 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005733 std::string reason = "vkCreateDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005734 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5735 return false;
5736 }
5737
5738 return true;
5739}
5740
Cody Northrope4bc6942015-08-26 10:01:32 -06005741VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005742 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005743 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo,
5744 VkDynamicDepthBiasState* pState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005745{
Cody Northrope4bc6942015-08-26 10:01:32 -06005746 PreCreateDynamicDepthBiasState(device, pCreateInfo);
Cody Northropf5bd2252015-08-17 11:10:49 -06005747
Cody Northrope4bc6942015-08-26 10:01:32 -06005748 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005749
Cody Northrope4bc6942015-08-26 10:01:32 -06005750 PostCreateDynamicDepthBiasState(device, pState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005751
5752 return result;
5753}
5754
Cody Northrope4bc6942015-08-26 10:01:32 -06005755bool PostDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005756 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005757 VkDynamicDepthBiasState dynamicDepthBiasState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005758 VkResult result)
5759{
5760
5761
5762 if(result < VK_SUCCESS)
5763 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005764 std::string reason = "vkDestroyDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005765 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5766 return false;
5767 }
5768
5769 return true;
5770}
5771
Cody Northrope4bc6942015-08-26 10:01:32 -06005772VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005773 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005774 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005775{
Cody Northrope4bc6942015-08-26 10:01:32 -06005776 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBiasState(device, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005777
Cody Northrope4bc6942015-08-26 10:01:32 -06005778 PostDestroyDynamicDepthBiasState(device, dynamicDepthBiasState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005779
5780 return result;
5781}
5782
Cody Northrope4bc6942015-08-26 10:01:32 -06005783bool PreCreateDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005784 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005785 const VkDynamicBlendStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005786{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005787 if(pCreateInfo != nullptr)
5788 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005789 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005790 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005791 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005792 "vkCreateDynamicBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005793 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005794 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005795 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005796
5797 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005798}
5799
Cody Northrope4bc6942015-08-26 10:01:32 -06005800bool PostCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005801 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005802 VkDynamicBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005803 VkResult result)
5804{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005805
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005806 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005808 }
5809
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005810 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005811 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005812 std::string reason = "vkCreateDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005813 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5814 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005815 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005816
5817 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005818}
5819
Cody Northrope4bc6942015-08-26 10:01:32 -06005820VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005821 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005822 const VkDynamicBlendStateCreateInfo* pCreateInfo,
5823 VkDynamicBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005824{
Cody Northrope4bc6942015-08-26 10:01:32 -06005825 PreCreateDynamicBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005826
Cody Northrope4bc6942015-08-26 10:01:32 -06005827 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005828
Cody Northrope4bc6942015-08-26 10:01:32 -06005829 PostCreateDynamicBlendState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005830
5831 return result;
5832}
5833
Cody Northrope4bc6942015-08-26 10:01:32 -06005834bool PostDestroyDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005835 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005836 VkDynamicBlendState dynamicBlendState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005837 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005838{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005839
5840
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005841 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005842 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005843 std::string reason = "vkDestroyDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005844 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5845 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005846 }
5847
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005848 return true;
5849}
5850
Cody Northrope4bc6942015-08-26 10:01:32 -06005851VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005852 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005853 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005854{
Cody Northrope4bc6942015-08-26 10:01:32 -06005855 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicBlendState(device, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005856
Cody Northrope4bc6942015-08-26 10:01:32 -06005857 PostDestroyDynamicBlendState(device, dynamicBlendState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005858
5859 return result;
5860}
5861
Cody Northrope4bc6942015-08-26 10:01:32 -06005862bool PreCreateDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005863 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005864 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005865{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005866 if(pCreateInfo != nullptr)
5867 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005868 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005869 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005870 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005871 "vkCreateDynamicDepthBoundsState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005872 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005873 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005874 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005875
5876 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005877}
5878
Cody Northrope4bc6942015-08-26 10:01:32 -06005879bool PostCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005880 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005881 VkDynamicDepthBoundsState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005882 VkResult result)
5883{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005884
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005885 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005886 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005887 }
5888
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005889 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005890 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005891 std::string reason = "vkCreateDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5893 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005894 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005895
5896 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005897}
5898
Cody Northrope4bc6942015-08-26 10:01:32 -06005899VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005900 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005901 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo,
5902 VkDynamicDepthBoundsState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005903{
Cody Northrope4bc6942015-08-26 10:01:32 -06005904 PreCreateDynamicDepthBoundsState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005905
Cody Northrope4bc6942015-08-26 10:01:32 -06005906 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005907
Cody Northrope4bc6942015-08-26 10:01:32 -06005908 PostCreateDynamicDepthBoundsState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005909
5910 return result;
5911}
5912
Cody Northrope4bc6942015-08-26 10:01:32 -06005913bool PostDestroyDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005914 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005915 VkDynamicDepthBoundsState dynamicDepthBoundsState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005916 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005917{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005918 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005919 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005920 std::string reason = "vkDestroyDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005921 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5922 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005923 }
5924
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005925 return true;
5926}
5927
Cody Northrope4bc6942015-08-26 10:01:32 -06005928VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005929 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005930 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005931{
Cody Northrope4bc6942015-08-26 10:01:32 -06005932 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005933
Cody Northrope4bc6942015-08-26 10:01:32 -06005934 PostDestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState, result);
Cody Northrop2605cb02015-08-18 15:21:16 -06005935
5936 return result;
5937}
5938
5939bool PreCreateDynamicStencilState(
5940 VkDevice device,
5941 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
5942 const VkDynamicStencilStateCreateInfo* pCreateInfoBack)
5943{
5944 if(pCreateInfoFront != nullptr)
5945 {
5946 if(pCreateInfoFront->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
5947 {
5948 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5949 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoFront->sType, is an invalid enumerator");
5950 return false;
5951 }
5952 }
5953
5954 if(pCreateInfoBack != nullptr)
5955 {
5956 if(pCreateInfoBack->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
5957 {
5958 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5959 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoBack->sType, is an invalid enumerator");
5960 return false;
5961 }
5962 }
5963
5964 return true;
5965}
5966
5967bool PostCreateDynamicStencilState(
5968 VkDevice device,
5969 VkDynamicStencilState* pState,
5970 VkResult result)
5971{
5972
5973 if(pState != nullptr)
5974 {
5975 }
5976
5977 if(result < VK_SUCCESS)
5978 {
5979 std::string reason = "vkCreateDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
5980 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5981 return false;
5982 }
5983
5984 return true;
5985}
5986
5987VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
5988 VkDevice device,
5989 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
5990 const VkDynamicStencilStateCreateInfo* pCreateInfoBack,
5991 VkDynamicStencilState* pState)
5992{
5993 PreCreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack);
5994
5995 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
5996
5997 PostCreateDynamicStencilState(device, pState, result);
5998
5999 return result;
6000}
6001
6002bool PostDestroyDynamicStencilState(
6003 VkDevice device,
6004 VkDynamicStencilState dynamicStencilState,
6005 VkResult result)
6006{
6007 if(result < VK_SUCCESS)
6008 {
6009 std::string reason = "vkDestroyDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6010 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6011 return false;
6012 }
6013
6014 return true;
6015}
6016
6017VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicStencilState(
6018 VkDevice device,
6019 VkDynamicStencilState dynamicStencilState)
6020{
6021 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicStencilState(device, dynamicStencilState);
6022
6023 PostDestroyDynamicStencilState(device, dynamicStencilState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006024
6025 return result;
6026}
6027
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006028bool PreCreateFramebuffer(
6029 VkDevice device,
6030 const VkFramebufferCreateInfo* pCreateInfo)
6031{
6032 if(pCreateInfo != nullptr)
6033 {
6034 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
6035 {
6036 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6037 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6038 return false;
6039 }
6040 if(pCreateInfo->pAttachments != nullptr)
6041 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006042 }
6043 }
6044
6045 return true;
6046}
6047
6048bool PostCreateFramebuffer(
6049 VkDevice device,
6050 VkFramebuffer* pFramebuffer,
6051 VkResult result)
6052{
6053
6054 if(pFramebuffer != nullptr)
6055 {
6056 }
6057
6058 if(result < VK_SUCCESS)
6059 {
6060 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6061 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6062 return false;
6063 }
6064
6065 return true;
6066}
6067
6068VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
6069 VkDevice device,
6070 const VkFramebufferCreateInfo* pCreateInfo,
6071 VkFramebuffer* pFramebuffer)
6072{
6073 PreCreateFramebuffer(device, pCreateInfo);
6074
6075 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
6076
6077 PostCreateFramebuffer(device, pFramebuffer, result);
6078
6079 return result;
6080}
6081
6082bool PostDestroyFramebuffer(
6083 VkDevice device,
6084 VkFramebuffer framebuffer,
6085 VkResult result)
6086{
6087
6088
6089 if(result < VK_SUCCESS)
6090 {
6091 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6092 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6093 return false;
6094 }
6095
6096 return true;
6097}
6098
6099VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
6100 VkDevice device,
6101 VkFramebuffer framebuffer)
6102{
6103 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
6104
6105 PostDestroyFramebuffer(device, framebuffer, result);
6106
6107 return result;
6108}
6109
6110bool PreCreateRenderPass(
6111 VkDevice device,
6112 const VkRenderPassCreateInfo* pCreateInfo)
6113{
6114 if(pCreateInfo != nullptr)
6115 {
6116 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
6117 {
6118 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6119 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6120 return false;
6121 }
6122 if(pCreateInfo->pAttachments != nullptr)
6123 {
6124 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
6125 {
6126 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6127 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
6128 return false;
6129 }
6130 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
6131 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
6132 {
6133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6134 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
6135 return false;
6136 }
6137 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6138 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6139 {
6140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6141 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
6142 return false;
6143 }
6144 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6145 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6146 {
6147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6148 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
6149 return false;
6150 }
6151 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6152 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6153 {
6154 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6155 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
6156 return false;
6157 }
6158 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6159 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6160 {
6161 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6162 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
6163 return false;
6164 }
6165 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6166 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
6167 {
6168 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6169 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
6170 return false;
6171 }
6172 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6173 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
6174 {
6175 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6176 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
6177 return false;
6178 }
6179 }
6180 if(pCreateInfo->pSubpasses != nullptr)
6181 {
6182 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
6183 {
6184 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6185 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
6186 return false;
6187 }
6188 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6189 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6190 {
6191 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6192 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
6193 return false;
6194 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006195 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006196 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006197 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6198 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006199 {
6200 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006201 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006202 return false;
6203 }
6204 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006205 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006206 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006207 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6208 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006209 {
6210 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006211 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006212 return false;
6213 }
6214 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006215 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006216 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006217 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6218 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006219 {
6220 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006221 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006222 return false;
6223 }
6224 }
6225 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6226 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
6227 {
6228 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6229 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
6230 return false;
6231 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006232 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006233 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006234 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6235 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006236 {
6237 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006238 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006239 return false;
6240 }
6241 }
6242 }
6243 if(pCreateInfo->pDependencies != nullptr)
6244 {
6245 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
6246 {
6247 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6248 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
6249 return false;
6250 }
6251 }
6252 }
6253
6254 return true;
6255}
6256
6257bool PostCreateRenderPass(
6258 VkDevice device,
6259 VkRenderPass* pRenderPass,
6260 VkResult result)
6261{
6262
6263 if(pRenderPass != nullptr)
6264 {
6265 }
6266
6267 if(result < VK_SUCCESS)
6268 {
6269 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6270 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6271 return false;
6272 }
6273
6274 return true;
6275}
6276
6277VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
6278 VkDevice device,
6279 const VkRenderPassCreateInfo* pCreateInfo,
6280 VkRenderPass* pRenderPass)
6281{
6282 PreCreateRenderPass(device, pCreateInfo);
6283
6284 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
6285
6286 PostCreateRenderPass(device, pRenderPass, result);
6287
6288 return result;
6289}
6290
6291bool PostDestroyRenderPass(
6292 VkDevice device,
6293 VkRenderPass renderPass,
6294 VkResult result)
6295{
6296
6297
6298 if(result < VK_SUCCESS)
6299 {
6300 std::string reason = "vkDestroyRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6301 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6302 return false;
6303 }
6304
6305 return true;
6306}
6307
6308VK_LAYER_EXPORT VkResult VKAPI vkDestroyRenderPass(
6309 VkDevice device,
6310 VkRenderPass renderPass)
6311{
6312 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass);
6313
6314 PostDestroyRenderPass(device, renderPass, result);
6315
6316 return result;
6317}
6318
6319bool PostGetRenderAreaGranularity(
6320 VkDevice device,
6321 VkRenderPass renderPass,
6322 VkExtent2D* pGranularity,
6323 VkResult result)
6324{
6325
6326
6327 if(pGranularity != nullptr)
6328 {
6329 }
6330
6331 if(result < VK_SUCCESS)
6332 {
6333 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
6334 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6335 return false;
6336 }
6337
6338 return true;
6339}
6340
6341VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
6342 VkDevice device,
6343 VkRenderPass renderPass,
6344 VkExtent2D* pGranularity)
6345{
6346 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
6347
6348 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
6349
6350 return result;
6351}
6352
6353bool PreCreateCommandPool(
6354 VkDevice device,
6355 const VkCmdPoolCreateInfo* pCreateInfo)
6356{
6357 if(pCreateInfo != nullptr)
6358 {
6359 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
6360 {
6361 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6362 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6363 return false;
6364 }
6365 }
6366
6367 return true;
6368}
6369
6370bool PostCreateCommandPool(
6371 VkDevice device,
6372 VkCmdPool* pCmdPool,
6373 VkResult result)
6374{
6375
6376 if(pCmdPool != nullptr)
6377 {
6378 }
6379
6380 if(result < VK_SUCCESS)
6381 {
6382 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6383 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6384 return false;
6385 }
6386
6387 return true;
6388}
6389
6390VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
6391 VkDevice device,
6392 const VkCmdPoolCreateInfo* pCreateInfo,
6393 VkCmdPool* pCmdPool)
6394{
6395 PreCreateCommandPool(device, pCreateInfo);
6396
6397 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
6398
6399 PostCreateCommandPool(device, pCmdPool, result);
6400
6401 return result;
6402}
6403
6404bool PostDestroyCommandPool(
6405 VkDevice device,
6406 VkCmdPool cmdPool,
6407 VkResult result)
6408{
6409
6410
6411 if(result < VK_SUCCESS)
6412 {
6413 std::string reason = "vkDestroyCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6414 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6415 return false;
6416 }
6417
6418 return true;
6419}
6420
6421VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandPool(
6422 VkDevice device,
6423 VkCmdPool cmdPool)
6424{
6425 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, cmdPool);
6426
6427 PostDestroyCommandPool(device, cmdPool, result);
6428
6429 return result;
6430}
6431
6432bool PostResetCommandPool(
6433 VkDevice device,
6434 VkCmdPool cmdPool,
6435 VkCmdPoolResetFlags flags,
6436 VkResult result)
6437{
6438
6439
6440
6441 if(result < VK_SUCCESS)
6442 {
6443 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6444 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6445 return false;
6446 }
6447
6448 return true;
6449}
6450
6451VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
6452 VkDevice device,
6453 VkCmdPool cmdPool,
6454 VkCmdPoolResetFlags flags)
6455{
6456 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
6457
6458 PostResetCommandPool(device, cmdPool, flags, result);
6459
6460 return result;
6461}
6462
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006463bool PreCreateCommandBuffer(
6464 VkDevice device,
6465 const VkCmdBufferCreateInfo* pCreateInfo)
6466{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006467 if(pCreateInfo != nullptr)
6468 {
6469 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006470 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006471 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006472 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006473 return false;
6474 }
6475 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6476 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6477 {
6478 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006479 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006480 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006481 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006482 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006483
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006484 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006485}
6486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006487bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006488 VkDevice device,
6489 VkCmdBuffer* pCmdBuffer,
6490 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006491{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006492
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006493 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006494 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006495 }
6496
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006497 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006498 {
6499 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006500 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6501 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006502 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006503
6504 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006505}
6506
6507VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6508 VkDevice device,
6509 const VkCmdBufferCreateInfo* pCreateInfo,
6510 VkCmdBuffer* pCmdBuffer)
6511{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006512 PreCreateCommandBuffer(device, pCreateInfo);
6513
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006514 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6515
6516 PostCreateCommandBuffer(device, pCmdBuffer, result);
6517
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006518 return result;
6519}
6520
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006521bool PostDestroyCommandBuffer(
6522 VkDevice device,
6523 VkCmdBuffer commandBuffer,
6524 VkResult result)
6525{
6526
6527
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006528 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006529 {
6530 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6531 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6532 return false;
6533 }
6534
6535 return true;
6536}
6537
6538VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6539 VkDevice device,
6540 VkCmdBuffer commandBuffer)
6541{
6542 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6543
6544 PostDestroyCommandBuffer(device, commandBuffer, result);
6545
6546 return result;
6547}
6548
6549bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006550 VkCmdBuffer cmdBuffer,
6551 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006552{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006553 if(pBeginInfo != nullptr)
6554 {
6555 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006556 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006557 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006558 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006559 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006560 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006561 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006562
6563 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006564}
6565
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006566bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006567 VkCmdBuffer cmdBuffer,
6568 VkResult result)
6569{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006570
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006571 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006572 {
6573 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006574 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6575 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006576 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006577
6578 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006579}
6580
6581VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6582 VkCmdBuffer cmdBuffer,
6583 const VkCmdBufferBeginInfo* pBeginInfo)
6584{
6585 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006586
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006587 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6588
6589 PostBeginCommandBuffer(cmdBuffer, result);
6590
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006591 return result;
6592}
6593
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006594bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006595 VkCmdBuffer cmdBuffer,
6596 VkResult result)
6597{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006598
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006599 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006600 {
6601 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006602 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6603 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006604 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006605
6606 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006607}
6608
6609VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6610 VkCmdBuffer cmdBuffer)
6611{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006612 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6613
6614 PostEndCommandBuffer(cmdBuffer, result);
6615
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006616 return result;
6617}
6618
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006619bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006620 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006621 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006622 VkResult result)
6623{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006624
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006625
6626 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006627 {
6628 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006629 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6630 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006631 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006632
6633 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006634}
6635
6636VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006637 VkCmdBuffer cmdBuffer,
6638 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006639{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006640 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006641
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006642 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006643
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006644 return result;
6645}
6646
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006647bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006648 VkCmdBuffer cmdBuffer,
6649 VkPipelineBindPoint pipelineBindPoint,
6650 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006651{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006652
6653 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6654 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6655 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006656 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006657 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006658 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006659 }
6660
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006661
6662 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006663}
6664
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006665VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6666 VkCmdBuffer cmdBuffer,
6667 VkPipelineBindPoint pipelineBindPoint,
6668 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006669{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006670 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6671
6672 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6673}
6674
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006675bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006676 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006677 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006678{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006679
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006680
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006681 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006682}
6683
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006684VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006685 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006686 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006687{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006688 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006689
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006690 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006691}
6692
Cody Northrope4bc6942015-08-26 10:01:32 -06006693bool PostCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006694 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006695 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006696{
6697
6698
6699 return true;
6700}
6701
Cody Northrope4bc6942015-08-26 10:01:32 -06006702VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006703 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006704 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006705{
Cody Northrope4bc6942015-08-26 10:01:32 -06006706 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006707
Cody Northrope4bc6942015-08-26 10:01:32 -06006708 PostCmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006709}
6710
Cody Northrope4bc6942015-08-26 10:01:32 -06006711bool PostCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006712 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006713 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006714{
6715
6716
6717 return true;
6718}
6719
Cody Northrope4bc6942015-08-26 10:01:32 -06006720VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006721 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006722 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006723{
Cody Northrope4bc6942015-08-26 10:01:32 -06006724 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006725
Cody Northrope4bc6942015-08-26 10:01:32 -06006726 PostCmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006727}
6728
Cody Northrope4bc6942015-08-26 10:01:32 -06006729bool PostCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006730 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006731 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006732{
6733
6734
6735 return true;
6736}
6737
Cody Northrope4bc6942015-08-26 10:01:32 -06006738VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006739 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006740 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006741{
Cody Northrope4bc6942015-08-26 10:01:32 -06006742 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006743
Cody Northrope4bc6942015-08-26 10:01:32 -06006744 PostCmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006745}
6746
Cody Northrope4bc6942015-08-26 10:01:32 -06006747bool PostCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006748 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006749 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006750{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006751 return true;
6752}
6753
Cody Northrope4bc6942015-08-26 10:01:32 -06006754VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006755 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006756 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006757{
Cody Northrope4bc6942015-08-26 10:01:32 -06006758 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006759
Cody Northrope4bc6942015-08-26 10:01:32 -06006760 PostCmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Cody Northrop2605cb02015-08-18 15:21:16 -06006761}
6762
6763bool PostCmdBindDynamicStencilState(
6764 VkCmdBuffer cmdBuffer,
6765 VkDynamicStencilState dynamicStencilState)
6766{
6767 return true;
6768}
6769
6770VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(
6771 VkCmdBuffer cmdBuffer,
6772 VkDynamicStencilState dynamicStencilState)
6773{
6774 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
6775
6776 PostCmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006777}
6778
6779bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006780 VkCmdBuffer cmdBuffer,
6781 const VkDescriptorSet* pDescriptorSets,
6782 const uint32_t* pDynamicOffsets)
6783{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006784 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006785 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006786 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006787
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006788 if(pDynamicOffsets != nullptr)
6789 {
6790 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006791
6792 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006793}
6794
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006795bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006796 VkCmdBuffer cmdBuffer,
6797 VkPipelineBindPoint pipelineBindPoint,
6798 VkPipelineLayout layout,
6799 uint32_t firstSet,
6800 uint32_t setCount,
6801 uint32_t dynamicOffsetCount)
6802{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006803
6804 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6805 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6806 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006807 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006808 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006809 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006810 }
6811
6812
6813
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006814
6815
6816 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006817}
6818
6819VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6820 VkCmdBuffer cmdBuffer,
6821 VkPipelineBindPoint pipelineBindPoint,
6822 VkPipelineLayout layout,
6823 uint32_t firstSet,
6824 uint32_t setCount,
6825 const VkDescriptorSet* pDescriptorSets,
6826 uint32_t dynamicOffsetCount,
6827 const uint32_t* pDynamicOffsets)
6828{
6829 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006830
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006831 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6832
6833 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6834}
6835
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006836bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006837 VkCmdBuffer cmdBuffer,
6838 VkBuffer buffer,
6839 VkDeviceSize offset,
6840 VkIndexType indexType)
6841{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006842
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006843
6844
6845 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6846 indexType > VK_INDEX_TYPE_END_RANGE)
6847 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006848 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006849 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006850 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006851 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006852
6853 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006854}
6855
6856VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6857 VkCmdBuffer cmdBuffer,
6858 VkBuffer buffer,
6859 VkDeviceSize offset,
6860 VkIndexType indexType)
6861{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006862 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6863
6864 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6865}
6866
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006867bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006868 VkCmdBuffer cmdBuffer,
6869 const VkBuffer* pBuffers,
6870 const VkDeviceSize* pOffsets)
6871{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006872 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006873 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006874 }
6875
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006876 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006877 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006878 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006879
6880 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006881}
6882
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006883bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006884 VkCmdBuffer cmdBuffer,
6885 uint32_t startBinding,
6886 uint32_t bindingCount)
6887{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006888
6889
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006890
6891 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006892}
6893
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06006894VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006895 VkCmdBuffer cmdBuffer,
6896 uint32_t startBinding,
6897 uint32_t bindingCount,
6898 const VkBuffer* pBuffers,
6899 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006900{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006901 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006902
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006903 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
6904
6905 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006906}
6907
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006908bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006909 VkCmdBuffer cmdBuffer,
6910 uint32_t firstVertex,
6911 uint32_t vertexCount,
6912 uint32_t firstInstance,
6913 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006914{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006915
6916
6917
6918
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006919
6920 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006921}
6922
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006923VK_LAYER_EXPORT void VKAPI vkCmdDraw(
6924 VkCmdBuffer cmdBuffer,
6925 uint32_t firstVertex,
6926 uint32_t vertexCount,
6927 uint32_t firstInstance,
6928 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006929{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006930 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
6931
6932 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006933}
6934
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006935bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006936 VkCmdBuffer cmdBuffer,
6937 uint32_t firstIndex,
6938 uint32_t indexCount,
6939 int32_t vertexOffset,
6940 uint32_t firstInstance,
6941 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006942{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006943
6944
6945
6946
6947
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006948
6949 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006950}
6951
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006952VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
6953 VkCmdBuffer cmdBuffer,
6954 uint32_t firstIndex,
6955 uint32_t indexCount,
6956 int32_t vertexOffset,
6957 uint32_t firstInstance,
6958 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006959{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006960 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6961
6962 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6963}
6964
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006965bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006966 VkCmdBuffer cmdBuffer,
6967 VkBuffer buffer,
6968 VkDeviceSize offset,
6969 uint32_t count,
6970 uint32_t stride)
6971{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006972
6973
6974
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006975
6976
6977 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006978}
6979
6980VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
6981 VkCmdBuffer cmdBuffer,
6982 VkBuffer buffer,
6983 VkDeviceSize offset,
6984 uint32_t count,
6985 uint32_t stride)
6986{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006987 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6988
6989 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6990}
6991
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006992bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006993 VkCmdBuffer cmdBuffer,
6994 VkBuffer buffer,
6995 VkDeviceSize offset,
6996 uint32_t count,
6997 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006998{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006999
7000
7001
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007002
7003
7004 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007005}
7006
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007007VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7008 VkCmdBuffer cmdBuffer,
7009 VkBuffer buffer,
7010 VkDeviceSize offset,
7011 uint32_t count,
7012 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007013{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007014 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7015
7016 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7017}
7018
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007019bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007020 VkCmdBuffer cmdBuffer,
7021 uint32_t x,
7022 uint32_t y,
7023 uint32_t z)
7024{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007025
7026
7027
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007028
7029 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007030}
7031
7032VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7033 VkCmdBuffer cmdBuffer,
7034 uint32_t x,
7035 uint32_t y,
7036 uint32_t z)
7037{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007038 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7039
7040 PostCmdDispatch(cmdBuffer, x, y, z);
7041}
7042
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007043bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007044 VkCmdBuffer cmdBuffer,
7045 VkBuffer buffer,
7046 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007047{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007048
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007049
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007050
7051 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007052}
7053
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007054VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7055 VkCmdBuffer cmdBuffer,
7056 VkBuffer buffer,
7057 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007058{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007059 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7060
7061 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007062}
7063
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007064bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007065 VkCmdBuffer cmdBuffer,
7066 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007067{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007068 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007069 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007070 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007071
7072 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007073}
7074
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007075bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007076 VkCmdBuffer cmdBuffer,
7077 VkBuffer srcBuffer,
7078 VkBuffer destBuffer,
7079 uint32_t regionCount)
7080{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007081
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007082
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007083
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007084
7085 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007086}
7087
7088VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7089 VkCmdBuffer cmdBuffer,
7090 VkBuffer srcBuffer,
7091 VkBuffer destBuffer,
7092 uint32_t regionCount,
7093 const VkBufferCopy* pRegions)
7094{
7095 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007096
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007097 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7098
7099 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7100}
7101
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007102bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007103 VkCmdBuffer cmdBuffer,
7104 const VkImageCopy* pRegions)
7105{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007106 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007107 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007108 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7109 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7110 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007111 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007112 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007113 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007114 }
7115 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7116 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7117 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007118 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007119 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007120 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007121 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007122 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007123
7124 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007125}
7126
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007127bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007128 VkCmdBuffer cmdBuffer,
7129 VkImage srcImage,
7130 VkImageLayout srcImageLayout,
7131 VkImage destImage,
7132 VkImageLayout destImageLayout,
7133 uint32_t regionCount)
7134{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007135
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007136
7137 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7138 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7139 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007140 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007141 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007142 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007143 }
7144
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007145
7146 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7147 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7148 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007149 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007150 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007151 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007152 }
7153
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007154
7155 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007156}
7157
7158VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7159 VkCmdBuffer cmdBuffer,
7160 VkImage srcImage,
7161 VkImageLayout srcImageLayout,
7162 VkImage destImage,
7163 VkImageLayout destImageLayout,
7164 uint32_t regionCount,
7165 const VkImageCopy* pRegions)
7166{
7167 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007168
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007169 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7170
7171 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7172}
7173
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007174bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007175 VkCmdBuffer cmdBuffer,
7176 const VkImageBlit* pRegions)
7177{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007178 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007179 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007180 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7181 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7182 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007183 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007184 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007185 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007186 }
7187 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7188 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7189 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007190 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007191 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007192 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007193 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007194 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007195
7196 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007197}
7198
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007199bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007200 VkCmdBuffer cmdBuffer,
7201 VkImage srcImage,
7202 VkImageLayout srcImageLayout,
7203 VkImage destImage,
7204 VkImageLayout destImageLayout,
7205 uint32_t regionCount,
7206 VkTexFilter filter)
7207{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007208
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007209
7210 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7211 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7212 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007213 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007214 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007215 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007216 }
7217
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007218
7219 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7220 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7221 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007222 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007223 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007224 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007225 }
7226
7227
7228 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7229 filter > VK_TEX_FILTER_END_RANGE)
7230 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007231 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007232 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007233 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007234 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007235
7236 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007237}
7238
7239VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7240 VkCmdBuffer cmdBuffer,
7241 VkImage srcImage,
7242 VkImageLayout srcImageLayout,
7243 VkImage destImage,
7244 VkImageLayout destImageLayout,
7245 uint32_t regionCount,
7246 const VkImageBlit* pRegions,
7247 VkTexFilter filter)
7248{
7249 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007250
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007251 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7252
7253 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7254}
7255
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007256bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007257 VkCmdBuffer cmdBuffer,
7258 const VkBufferImageCopy* pRegions)
7259{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007260 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007261 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007262 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7263 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7264 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007265 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007266 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007267 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007268 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007269 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007270
7271 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007272}
7273
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007274bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007275 VkCmdBuffer cmdBuffer,
7276 VkBuffer srcBuffer,
7277 VkImage destImage,
7278 VkImageLayout destImageLayout,
7279 uint32_t regionCount)
7280{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007281
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007282
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007283
7284 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7285 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7286 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007287 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007288 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007289 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007290 }
7291
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007292
7293 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007294}
7295
7296VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7297 VkCmdBuffer cmdBuffer,
7298 VkBuffer srcBuffer,
7299 VkImage destImage,
7300 VkImageLayout destImageLayout,
7301 uint32_t regionCount,
7302 const VkBufferImageCopy* pRegions)
7303{
7304 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007305
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007306 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7307
7308 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7309}
7310
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007311bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007312 VkCmdBuffer cmdBuffer,
7313 const VkBufferImageCopy* pRegions)
7314{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007315 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007316 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007317 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7318 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7319 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007320 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007321 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007322 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007323 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007324 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007325
7326 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007327}
7328
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007329bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007330 VkCmdBuffer cmdBuffer,
7331 VkImage srcImage,
7332 VkImageLayout srcImageLayout,
7333 VkBuffer destBuffer,
7334 uint32_t regionCount)
7335{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007336
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007337
7338 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7339 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7340 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007341 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007342 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007343 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007344 }
7345
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007346
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007347
7348 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007349}
7350
7351VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7352 VkCmdBuffer cmdBuffer,
7353 VkImage srcImage,
7354 VkImageLayout srcImageLayout,
7355 VkBuffer destBuffer,
7356 uint32_t regionCount,
7357 const VkBufferImageCopy* pRegions)
7358{
7359 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007360
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007361 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7362
7363 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7364}
7365
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007366bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007367 VkCmdBuffer cmdBuffer,
7368 const uint32_t* pData)
7369{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007370 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007371 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007372 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007373
7374 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007375}
7376
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007377bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007378 VkCmdBuffer cmdBuffer,
7379 VkBuffer destBuffer,
7380 VkDeviceSize destOffset,
7381 VkDeviceSize dataSize)
7382{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007383
7384
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007385
7386
7387 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007388}
7389
7390VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7391 VkCmdBuffer cmdBuffer,
7392 VkBuffer destBuffer,
7393 VkDeviceSize destOffset,
7394 VkDeviceSize dataSize,
7395 const uint32_t* pData)
7396{
7397 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007398
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007399 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7400
7401 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7402}
7403
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007404bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007405 VkCmdBuffer cmdBuffer,
7406 VkBuffer destBuffer,
7407 VkDeviceSize destOffset,
7408 VkDeviceSize fillSize,
7409 uint32_t data)
7410{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007411
7412
7413
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007414
7415
7416 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007417}
7418
7419VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7420 VkCmdBuffer cmdBuffer,
7421 VkBuffer destBuffer,
7422 VkDeviceSize destOffset,
7423 VkDeviceSize fillSize,
7424 uint32_t data)
7425{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007426 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7427
7428 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7429}
7430
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007431bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007432 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007433 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007434 const VkImageSubresourceRange* pRanges)
7435{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007436 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007437 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007438 }
7439
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007440 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007441 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007442 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7443 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7444 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007445 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007446 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007447 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007448 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007449 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007450
7451 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007452}
7453
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007454bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007455 VkCmdBuffer cmdBuffer,
7456 VkImage image,
7457 VkImageLayout imageLayout,
7458 uint32_t rangeCount)
7459{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007460
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007461
7462 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7463 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7464 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007465 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007466 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007467 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007468 }
7469
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007470
7471 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007472}
7473
7474VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7475 VkCmdBuffer cmdBuffer,
7476 VkImage image,
7477 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007478 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007479 uint32_t rangeCount,
7480 const VkImageSubresourceRange* pRanges)
7481{
7482 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007483
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007484 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7485
7486 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7487}
7488
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007489bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007490 VkCmdBuffer cmdBuffer,
7491 const VkImageSubresourceRange* pRanges)
7492{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007493 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007494 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007495 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7496 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7497 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007498 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007499 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007500 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007501 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007502 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007503
7504 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007505}
7506
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007507bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007508 VkCmdBuffer cmdBuffer,
7509 VkImage image,
7510 VkImageLayout imageLayout,
7511 float depth,
7512 uint32_t stencil,
7513 uint32_t rangeCount)
7514{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007515
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007516
7517 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7518 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7519 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007520 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007521 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007522 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007523 }
7524
7525
7526
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007527
7528 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007529}
7530
Chris Forbes2951d7d2015-06-22 17:21:59 +12007531VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007532 VkCmdBuffer cmdBuffer,
7533 VkImage image,
7534 VkImageLayout imageLayout,
7535 float depth,
7536 uint32_t stencil,
7537 uint32_t rangeCount,
7538 const VkImageSubresourceRange* pRanges)
7539{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007540 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007541
Chris Forbes2951d7d2015-06-22 17:21:59 +12007542 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007543
Chris Forbes2951d7d2015-06-22 17:21:59 +12007544 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007545}
7546
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007547bool PreCmdClearColorAttachment(
7548 VkCmdBuffer cmdBuffer,
7549 const VkClearColorValue* pColor,
7550 const VkRect3D* pRects)
7551{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007552 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007553 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007554 }
7555
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007556 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007557 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007558 }
7559
7560 return true;
7561}
7562
7563bool PostCmdClearColorAttachment(
7564 VkCmdBuffer cmdBuffer,
7565 uint32_t colorAttachment,
7566 VkImageLayout imageLayout,
7567 uint32_t rectCount)
7568{
7569
7570
7571 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7572 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7573 {
7574 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007575 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007576 return false;
7577 }
7578
7579
7580 return true;
7581}
7582
7583VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7584 VkCmdBuffer cmdBuffer,
7585 uint32_t colorAttachment,
7586 VkImageLayout imageLayout,
7587 const VkClearColorValue* pColor,
7588 uint32_t rectCount,
7589 const VkRect3D* pRects)
7590{
7591 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7592
7593 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7594
7595 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7596}
7597
7598bool PreCmdClearDepthStencilAttachment(
7599 VkCmdBuffer cmdBuffer,
7600 const VkRect3D* pRects)
7601{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007602 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007603 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007604 }
7605
7606 return true;
7607}
7608
7609bool PostCmdClearDepthStencilAttachment(
7610 VkCmdBuffer cmdBuffer,
7611 VkImageAspectFlags imageAspectMask,
7612 VkImageLayout imageLayout,
7613 float depth,
7614 uint32_t stencil,
7615 uint32_t rectCount)
7616{
7617
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007618
7619 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7620 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7621 {
7622 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007623 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007624 return false;
7625 }
7626
7627
7628
7629
7630 return true;
7631}
7632
7633VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7634 VkCmdBuffer cmdBuffer,
7635 VkImageAspectFlags imageAspectMask,
7636 VkImageLayout imageLayout,
7637 float depth,
7638 uint32_t stencil,
7639 uint32_t rectCount,
7640 const VkRect3D* pRects)
7641{
7642 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7643
7644 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7645
7646 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7647}
7648
7649bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007650 VkCmdBuffer cmdBuffer,
7651 const VkImageResolve* pRegions)
7652{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007653 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007654 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007655 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7656 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7657 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007658 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007659 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007660 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007661 }
7662 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7663 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7664 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007665 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007666 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007667 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007668 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007669 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007670
7671 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007672}
7673
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007674bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007675 VkCmdBuffer cmdBuffer,
7676 VkImage srcImage,
7677 VkImageLayout srcImageLayout,
7678 VkImage destImage,
7679 VkImageLayout destImageLayout,
7680 uint32_t regionCount)
7681{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007682
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007683
7684 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7685 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7686 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007687 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007688 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007689 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007690 }
7691
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007692
7693 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7694 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7695 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007696 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007697 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007698 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007699 }
7700
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007701
7702 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007703}
7704
7705VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7706 VkCmdBuffer cmdBuffer,
7707 VkImage srcImage,
7708 VkImageLayout srcImageLayout,
7709 VkImage destImage,
7710 VkImageLayout destImageLayout,
7711 uint32_t regionCount,
7712 const VkImageResolve* pRegions)
7713{
7714 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007715
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007716 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7717
7718 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7719}
7720
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007721bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007722 VkCmdBuffer cmdBuffer,
7723 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007724 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007725{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007726
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007727
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007728
7729 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007730}
7731
7732VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7733 VkCmdBuffer cmdBuffer,
7734 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007735 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007736{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007737 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007738
Tony Barbourc2e987e2015-06-29 16:20:35 -06007739 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007740}
7741
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007742bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007743 VkCmdBuffer cmdBuffer,
7744 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007745 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007746{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007747
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007748
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007749
7750 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007751}
7752
7753VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7754 VkCmdBuffer cmdBuffer,
7755 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007756 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007757{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007758 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007759
Tony Barbourc2e987e2015-06-29 16:20:35 -06007760 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007761}
7762
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007763bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007764 VkCmdBuffer cmdBuffer,
7765 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007766 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007767{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007768 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007769 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007770 }
7771
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007772 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007773 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007774 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007775
7776 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007777}
7778
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007779bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007780 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007781 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007782 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007783 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007784 uint32_t memBarrierCount)
7785{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007786
Tony Barbourc2e987e2015-06-29 16:20:35 -06007787
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007788
7789
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007790
7791 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007792}
7793
7794VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
7795 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007796 uint32_t eventCount,
7797 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007798 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007799 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007800 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007801 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007802{
7803 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007804
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007805 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007806
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007807 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007808}
7809
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007810bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007811 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007812 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007813{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007814 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007815 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007816 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007817
7818 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007819}
7820
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007821bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007822 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007823 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007824 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007825 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007826 uint32_t memBarrierCount)
7827{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007828
Tony Barbourc2e987e2015-06-29 16:20:35 -06007829
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007830
7831
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007832
7833 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007834}
7835
7836VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7837 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007838 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007839 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007840 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007841 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007842 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007843{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007844 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007845
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007846 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007847
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007848 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007849}
7850
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007851bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007852 VkCmdBuffer cmdBuffer,
7853 VkQueryPool queryPool,
7854 uint32_t slot,
7855 VkQueryControlFlags flags)
7856{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007857
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007858
7859
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007860
7861 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007862}
7863
7864VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
7865 VkCmdBuffer cmdBuffer,
7866 VkQueryPool queryPool,
7867 uint32_t slot,
7868 VkQueryControlFlags flags)
7869{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007870 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7871
7872 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7873}
7874
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007875bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007876 VkCmdBuffer cmdBuffer,
7877 VkQueryPool queryPool,
7878 uint32_t slot)
7879{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007880
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007881
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007882
7883 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007884}
7885
7886VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
7887 VkCmdBuffer cmdBuffer,
7888 VkQueryPool queryPool,
7889 uint32_t slot)
7890{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007891 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
7892
7893 PostCmdEndQuery(cmdBuffer, queryPool, slot);
7894}
7895
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007896bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007897 VkCmdBuffer cmdBuffer,
7898 VkQueryPool queryPool,
7899 uint32_t startQuery,
7900 uint32_t queryCount)
7901{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007902
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007903
7904
7905
7906 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007907}
7908
7909VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
7910 VkCmdBuffer cmdBuffer,
7911 VkQueryPool queryPool,
7912 uint32_t startQuery,
7913 uint32_t queryCount)
7914{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007915 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7916
7917 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7918}
7919
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007920bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007921 VkCmdBuffer cmdBuffer,
7922 VkTimestampType timestampType,
7923 VkBuffer destBuffer,
7924 VkDeviceSize destOffset)
7925{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007926
7927 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
7928 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
7929 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007930 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007931 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007932 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007933 }
7934
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007935
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007936
7937 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007938}
7939
7940VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
7941 VkCmdBuffer cmdBuffer,
7942 VkTimestampType timestampType,
7943 VkBuffer destBuffer,
7944 VkDeviceSize destOffset)
7945{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007946 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
7947
7948 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
7949}
7950
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007951bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007952 VkCmdBuffer cmdBuffer,
7953 VkQueryPool queryPool,
7954 uint32_t startQuery,
7955 uint32_t queryCount,
7956 VkBuffer destBuffer,
7957 VkDeviceSize destOffset,
7958 VkDeviceSize destStride,
7959 VkQueryResultFlags flags)
7960{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007961
7962
7963
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007964
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007965
7966
7967
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007968
7969 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007970}
7971
Jeremy Hayescf469132015-04-17 10:36:53 -06007972VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007973 VkCmdBuffer cmdBuffer,
7974 VkQueryPool queryPool,
7975 uint32_t startQuery,
7976 uint32_t queryCount,
7977 VkBuffer destBuffer,
7978 VkDeviceSize destOffset,
7979 VkDeviceSize destStride,
7980 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06007981{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007982 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
7983
7984 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06007985}
7986
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007987bool PreCmdPushConstants(
7988 VkCmdBuffer cmdBuffer,
7989 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007990{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007991 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007992 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007993 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007994
7995 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007996}
7997
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007998bool PostCmdPushConstants(
7999 VkCmdBuffer cmdBuffer,
8000 VkPipelineLayout layout,
8001 VkShaderStageFlags stageFlags,
8002 uint32_t start,
8003 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008004{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008005
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008006
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008007
8008
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008009
8010 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008011}
8012
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008013VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
8014 VkCmdBuffer cmdBuffer,
8015 VkPipelineLayout layout,
8016 VkShaderStageFlags stageFlags,
8017 uint32_t start,
8018 uint32_t length,
8019 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008020{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008021 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008022
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008023 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008024
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008025 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008026}
8027
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008028bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008029 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008030 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008031{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008032 if(pRenderPassBegin != nullptr)
8033 {
8034 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008035 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008036 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008037 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008038 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008039 }
Cody Northropc332eef2015-08-04 11:51:03 -06008040 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008041 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008042 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06008043 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008044
8045 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008046}
8047
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008048bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008049 VkCmdBuffer cmdBuffer,
8050 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008051{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008052
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008053 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8054 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
8055 {
8056 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8057 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8058 return false;
8059 }
8060
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008061 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008062}
8063
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008064VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8065 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008066 const VkRenderPassBeginInfo* pRenderPassBegin,
8067 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008068{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008069 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8070
Chia-I Wuc278df82015-07-07 11:50:03 +08008071 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008072
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008073 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008074}
8075
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008076bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08008077 VkCmdBuffer cmdBuffer,
8078 VkRenderPassContents contents)
8079{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008080
8081 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008082 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008083 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008084 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008085 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8086 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008087 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008088
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008089 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08008090}
8091
8092VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8093 VkCmdBuffer cmdBuffer,
8094 VkRenderPassContents contents)
8095{
Chia-I Wuc278df82015-07-07 11:50:03 +08008096 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8097
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008098 PostCmdNextSubpass(cmdBuffer, contents);
8099}
8100
8101bool PostCmdEndRenderPass(
8102 VkCmdBuffer cmdBuffer)
8103{
8104
8105 return true;
8106}
8107
8108VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
8109 VkCmdBuffer cmdBuffer)
8110{
8111 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8112
8113 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08008114}
8115
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008116bool PreCmdExecuteCommands(
8117 VkCmdBuffer cmdBuffer,
8118 const VkCmdBuffer* pCmdBuffers)
8119{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008120 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008121 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008122 }
8123
8124 return true;
8125}
8126
8127bool PostCmdExecuteCommands(
8128 VkCmdBuffer cmdBuffer,
8129 uint32_t cmdBuffersCount)
8130{
8131
8132
8133 return true;
8134}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008135
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008136VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008137 VkCmdBuffer cmdBuffer,
8138 uint32_t cmdBuffersCount,
8139 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008140{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008141 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8142
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008143 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8144
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008145 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008146}
8147
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008148VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008149{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008150 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008151 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008152 }
8153
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008154 /* loader uses this to force layer initialization; device object is wrapped */
8155 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008156 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008157 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008158 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008159
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008160 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008161 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008162 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008163 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008164 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008165 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008166 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008167 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008168 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008169 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008170 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008171 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008172 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008173 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008174 if (!strcmp(funcName, "vkFreeMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008175 return (PFN_vkVoidFunction) vkFreeMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008176 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008177 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008178 if (!strcmp(funcName, "vkUnmapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008179 return (PFN_vkVoidFunction) vkUnmapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008180 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008181 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008182 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008183 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008184 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008185 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008186 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008187 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008188 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008189 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008190 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008191 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008192 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008193 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008194 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008195 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008196 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008197 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008198 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008199 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008200 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008201 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008202 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008203 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008204 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008205 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008206 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008207 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008208 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008209 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008210 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008211 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008212 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008213 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008214 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008215 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008216 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008217 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008218 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008219 return (PFN_vkVoidFunction) vkCreateImageView;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06008220 if (!strcmp(funcName, "vkDestroyImageView"))
8221 return (PFN_vkVoidFunction) vkDestroyImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008222 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008223 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008224 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008225 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008226 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008227 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008228 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008229 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008230 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008231 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008232 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008233 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008234 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008235 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008236 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008237 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008238 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008239 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008240 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008241 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Cody Northrope4bc6942015-08-26 10:01:32 -06008242 if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
8243 return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
8244 if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
8245 return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
8246 if (!strcmp(funcName, "vkCreateDynamicBlendState"))
8247 return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
8248 if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
8249 return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
Cody Northrop2605cb02015-08-18 15:21:16 -06008250 if (!strcmp(funcName, "vkCreateDynamicStencilState"))
8251 return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008252 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008253 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008254 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008255 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008256 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008257 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008258 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008259 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008260 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008261 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008262 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008263 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008264 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008265 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008266 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008267 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008268 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008269 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008270 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008271 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008272 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008273 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008274 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008275 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008276 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008277 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008278 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008279 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008280 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008281 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008282 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008283 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008284 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008285 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008286 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008287 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008288 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008289 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008290 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008291 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008292 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008293 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008294 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008295 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008296 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008297 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008298 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008299 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008300 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008301 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008302 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008303 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008304 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008305 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008306 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008307 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008308 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008309 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008310 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008311 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008312 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008313 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008314 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008315 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008316 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008317 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008318 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008319 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008320 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008321 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008322 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008323 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008324
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008325 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008326 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008327 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008328 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008329 }
8330}
8331
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008332VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008333{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008334 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008335 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008336 }
8337
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008338 /* loader uses this to force layer initialization; instance object is wrapped */
8339 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008340 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008341 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008342 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008343
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008344 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008345 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008346 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008347 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008348 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008349 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008350 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008351 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008352 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008353 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06008354 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008355 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008356 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008357 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008358 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008359 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008360 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008361 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008362 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008363 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008364
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008365 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008366 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008367 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008368 return fptr;
8369
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008370 {
8371 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8372 return NULL;
8373 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8374 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008375}