blob: 10762027c4c3bad7956eb3b4732d8edb901dc114 [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.
Michael Lentine6715e522015-09-15 14:59:14 -05005 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
24 */
25
26#include <stdio.h>
27#include <stdlib.h>
28#include <string.h>
29
30#include <iostream>
31#include <string>
32#include <sstream>
Mark Lobodzinski3723c512015-05-26 10:58:40 -050033#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060034#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060035
Tobin Ehlis7a51d902015-07-03 10:34:49 -060036#include "vk_loader_platform.h"
Tobin Ehlis2d1d9702015-07-03 09:42:57 -060037#include "vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060038#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060039#include "vk_enum_validate_helper.h"
40#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060041
Tobin Ehlis56d204a2015-07-03 10:15:26 -060042#include "vk_layer_table.h"
43#include "vk_layer_data.h"
44#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060045#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060046
Cody Northrop73bb6572015-09-28 15:09:32 -060047struct layer_data {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060048 debug_report_data *report_data;
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060049 std::vector<VkDbgMsgCallback> logging_callback;
Cody Northrop73bb6572015-09-28 15:09:32 -060050
51 layer_data() :
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060052 report_data(nullptr)
Cody Northrop73bb6572015-09-28 15:09:32 -060053 {};
54};
Mark Lobodzinski3723c512015-05-26 10:58:40 -050055
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060056static std::unordered_map<void*, layer_data*> layer_data_map;
57static device_table_map pc_device_table_map;
58static instance_table_map pc_instance_table_map;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060059
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060060// "my instance data"
61debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060062{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060063 dispatch_key key = get_dispatch_key(object);
Tobin Ehlis8354e022015-09-01 11:46:36 -060064 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060065#if DISPATCH_MAP_DEBUG
66 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
67#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060068 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060069
70 return data->report_data;
71}
72
73// "my device data"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060074debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060075{
76 dispatch_key key = get_dispatch_key(object);
77 layer_data *data = get_my_data_ptr(key, layer_data_map);
78#if DISPATCH_MAP_DEBUG
79 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
80#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060081 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060082 return data->report_data;
83}
84
85static void InitParamChecker(layer_data *data)
86{
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060087 VkDbgMsgCallback callback;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060088 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
89
90 uint32_t debug_action = 0;
91 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
92 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
93 {
94 FILE *log_output = NULL;
95 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb4b6e7c2015-09-15 09:55:54 -060096 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060097 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void *) log_output, &callback);
98 data->logging_callback.push_back(callback);
99 }
100
101 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
102 layer_create_msg_callback(data->report_data, report_flags, win32_debug_output_msg, NULL, &callback);
103 data->logging_callback.push_back(callback);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600104 }
105}
106
107VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
108 VkInstance instance,
109 VkFlags msgFlags,
110 const PFN_vkDbgMsgCallback pfnMsgCallback,
111 void* pUserData,
112 VkDbgMsgCallback* pMsgCallback)
113{
114 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
115 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
116
117 if (result == VK_SUCCESS)
118 {
119 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
120 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
121 }
122
123 return result;
124}
125
126VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
127 VkInstance instance,
128 VkDbgMsgCallback msgCallback)
129{
130 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
131 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
132
133 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
134 layer_destroy_msg_callback(data->report_data, msgCallback);
135
136 return result;
137}
138
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600139static const VkLayerProperties pc_global_layers[] = {
140 {
141 "ParamChecker",
142 VK_API_VERSION,
143 VK_MAKE_VERSION(0, 1, 0),
144 "Validation layer: ParamChecker",
145 }
146};
Tony Barbour426b9052015-06-24 16:06:58 -0600147
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600148VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600149 const char *pLayerName,
150 uint32_t *pCount,
151 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600152{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600153 /* ParamChecker does not have any global extensions */
154 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600155}
156
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600157VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600158 uint32_t *pCount,
159 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600160{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600161 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
162 pc_global_layers,
163 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600164}
165
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600166VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600167 VkPhysicalDevice physicalDevice,
168 const char* pLayerName,
169 uint32_t* pCount,
170 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600171{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600172 /* ParamChecker does not have any physical device extensions */
173 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayescf469132015-04-17 10:36:53 -0600174}
175
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600176VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600177 VkPhysicalDevice physicalDevice,
178 uint32_t* pCount,
179 VkLayerProperties* pProperties)
180{
181 /* ParamChecker's physical device layers are the same as global */
182 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
183 pCount, pProperties);
184}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600185
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600186// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600187
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600188static
189std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600190{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600191 switch(enumerator)
192 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600193 case VK_RESULT_MAX_ENUM:
194 {
195 return "VK_RESULT_MAX_ENUM";
196 break;
197 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600198 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600199 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600200 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600201 break;
202 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600203 case VK_ERROR_INCOMPATIBLE_DRIVER:
204 {
205 return "VK_ERROR_INCOMPATIBLE_DRIVER";
206 break;
207 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600208 case VK_ERROR_MEMORY_MAP_FAILED:
209 {
210 return "VK_ERROR_MEMORY_MAP_FAILED";
211 break;
212 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600213 case VK_INCOMPLETE:
214 {
215 return "VK_INCOMPLETE";
216 break;
217 }
218 case VK_ERROR_OUT_OF_HOST_MEMORY:
219 {
220 return "VK_ERROR_OUT_OF_HOST_MEMORY";
221 break;
222 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600223 case VK_ERROR_INITIALIZATION_FAILED:
224 {
225 return "VK_ERROR_INITIALIZATION_FAILED";
226 break;
227 }
228 case VK_NOT_READY:
229 {
230 return "VK_NOT_READY";
231 break;
232 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600233 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
234 {
235 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
236 break;
237 }
238 case VK_EVENT_SET:
239 {
240 return "VK_EVENT_SET";
241 break;
242 }
243 case VK_TIMEOUT:
244 {
245 return "VK_TIMEOUT";
246 break;
247 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600248 case VK_EVENT_RESET:
249 {
250 return "VK_EVENT_RESET";
251 break;
252 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600253 case VK_UNSUPPORTED:
254 {
255 return "VK_UNSUPPORTED";
256 break;
257 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600258 case VK_SUCCESS:
259 {
260 return "VK_SUCCESS";
261 break;
262 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600263 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600264 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600265 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600266 break;
267 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600268 case VK_ERROR_DEVICE_LOST:
269 {
270 return "VK_ERROR_DEVICE_LOST";
271 break;
272 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600273 default:
274 {
275 return "unrecognized enumerator";
276 break;
277 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600278 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600279}
280
281static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600282bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
283{
Courtney Goeltzenleuchter75295792015-09-10 16:25:49 -0600284 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600285 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
286 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
287 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
288 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
289 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
290 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
291 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
292 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
293 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600294 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
295 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
296 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600297 if(enumerator & (~allFlags))
298 {
299 return false;
300 }
301
302 return true;
303}
304
305static
306std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
307{
308 if(!ValidateEnumerator(enumerator))
309 {
310 return "unrecognized enumerator";
311 }
312
313 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600314 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
315 {
316 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
317 }
318 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
319 {
320 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
321 }
322 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
323 {
324 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
325 }
326 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
327 {
328 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
329 }
330 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
331 {
332 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
333 }
334 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
335 {
336 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
337 }
338 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
339 {
340 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
341 }
342 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
343 {
344 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
345 }
346 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
347 {
348 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
349 }
350 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
351 {
352 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
353 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600354 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
355 {
356 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
357 }
358 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
359 {
360 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
361 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600362
363 std::string enumeratorString;
364 for(auto const& string : strings)
365 {
366 enumeratorString += string;
367
368 if(string != strings.back())
369 {
370 enumeratorString += '|';
371 }
372 }
373
374 return enumeratorString;
375}
376
377static
378bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
379{
380 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600381 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600382 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
383 VK_IMAGE_USAGE_STORAGE_BIT |
384 VK_IMAGE_USAGE_SAMPLED_BIT |
385 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
386 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600387 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600388 if(enumerator & (~allFlags))
389 {
390 return false;
391 }
392
393 return true;
394}
395
396static
397std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
398{
399 if(!ValidateEnumerator(enumerator))
400 {
401 return "unrecognized enumerator";
402 }
403
404 std::vector<std::string> strings;
405 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
406 {
407 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
408 }
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600409 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600410 {
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600411 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600412 }
413 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
414 {
415 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
416 }
417 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
418 {
419 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
420 }
421 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
422 {
423 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
424 }
425 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
426 {
427 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
428 }
429 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
430 {
431 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
432 }
433 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
434 {
435 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
436 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600437
438 std::string enumeratorString;
439 for(auto const& string : strings)
440 {
441 enumeratorString += string;
442
443 if(string != strings.back())
444 {
445 enumeratorString += '|';
446 }
447 }
448
449 return enumeratorString;
450}
451
452static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600453bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
454{
455 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
456 VK_QUEUE_DMA_BIT |
457 VK_QUEUE_COMPUTE_BIT |
458 VK_QUEUE_SPARSE_MEMMGR_BIT |
459 VK_QUEUE_GRAPHICS_BIT);
460 if(enumerator & (~allFlags))
461 {
462 return false;
463 }
464
465 return true;
466}
467
468static
469std::string EnumeratorString(VkQueueFlagBits const& enumerator)
470{
471 if(!ValidateEnumerator(enumerator))
472 {
473 return "unrecognized enumerator";
474 }
475
476 std::vector<std::string> strings;
477 if(enumerator & VK_QUEUE_EXTENDED_BIT)
478 {
479 strings.push_back("VK_QUEUE_EXTENDED_BIT");
480 }
481 if(enumerator & VK_QUEUE_DMA_BIT)
482 {
483 strings.push_back("VK_QUEUE_DMA_BIT");
484 }
485 if(enumerator & VK_QUEUE_COMPUTE_BIT)
486 {
487 strings.push_back("VK_QUEUE_COMPUTE_BIT");
488 }
489 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
490 {
491 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
492 }
493 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
494 {
495 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
496 }
497
498 std::string enumeratorString;
499 for(auto const& string : strings)
500 {
501 enumeratorString += string;
502
503 if(string != strings.back())
504 {
505 enumeratorString += '|';
506 }
507 }
508
509 return enumeratorString;
510}
511
512static
513bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
514{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600515 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
516 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600517 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
518 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
519 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
520 VK_MEMORY_PROPERTY_DEVICE_ONLY);
521 if(enumerator & (~allFlags))
522 {
523 return false;
524 }
525
526 return true;
527}
528
529static
530std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
531{
532 if(!ValidateEnumerator(enumerator))
533 {
534 return "unrecognized enumerator";
535 }
536
537 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600538 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
539 {
540 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
541 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600542 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
543 {
544 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
545 }
546 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
547 {
548 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
549 }
550 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
551 {
552 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
553 }
554 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
555 {
556 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
557 }
558 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
559 {
560 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
561 }
562
563 std::string enumeratorString;
564 for(auto const& string : strings)
565 {
566 enumeratorString += string;
567
568 if(string != strings.back())
569 {
570 enumeratorString += '|';
571 }
572 }
573
574 return enumeratorString;
575}
576
577static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600578bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600579{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600580 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600581 if(enumerator & (~allFlags))
582 {
583 return false;
584 }
585
586 return true;
587}
588
589static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600590std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600591{
592 if(!ValidateEnumerator(enumerator))
593 {
594 return "unrecognized enumerator";
595 }
596
597 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600598 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600599 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600600 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600601 }
602
603 std::string enumeratorString;
604 for(auto const& string : strings)
605 {
606 enumeratorString += string;
607
608 if(string != strings.back())
609 {
610 enumeratorString += '|';
611 }
612 }
613
614 return enumeratorString;
615}
616
617static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600618bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
619{
620 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
621 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
622 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
623 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600624 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600625 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600626 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600627
628 return true;
629}
630
631static
632std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
633{
634 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600635 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600636 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600637 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600638
639 std::vector<std::string> strings;
640 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600641 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600642 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600643 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600644 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600645 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600646 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600647 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600648 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600649 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600650 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600651 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600652
653 std::string enumeratorString;
654 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600655 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600656 enumeratorString += string;
657
658 if(string != strings.back())
659 {
660 enumeratorString += '|';
661 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600662 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600663
664 return enumeratorString;
665}
666
667static
668bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
669{
670 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
671 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600672 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600673 return false;
674 }
675
676 return true;
677}
678
679static
680std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
681{
682 if(!ValidateEnumerator(enumerator))
683 {
684 return "unrecognized enumerator";
685 }
686
687 std::vector<std::string> strings;
688 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
689 {
690 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
691 }
692
693 std::string enumeratorString;
694 for(auto const& string : strings)
695 {
696 enumeratorString += string;
697
698 if(string != strings.back())
699 {
700 enumeratorString += '|';
701 }
702 }
703
704 return enumeratorString;
705}
706
707static
708bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
709{
710 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
711 if(enumerator & (~allFlags))
712 {
713 return false;
714 }
715
716 return true;
717}
718
719static
720std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
721{
722 if(!ValidateEnumerator(enumerator))
723 {
724 return "unrecognized enumerator";
725 }
726
727 std::vector<std::string> strings;
728 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
729 {
730 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
731 }
732
733 std::string enumeratorString;
734 for(auto const& string : strings)
735 {
736 enumeratorString += string;
737
738 if(string != strings.back())
739 {
740 enumeratorString += '|';
741 }
742 }
743
744 return enumeratorString;
745}
746
747static
748bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
749{
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600750 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
751 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
752 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
753 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
754 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
755 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
756 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
757 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
758 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
759 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
760 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600761 if(enumerator & (~allFlags))
762 {
763 return false;
764 }
765
766 return true;
767}
768
769static
770std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
771{
772 if(!ValidateEnumerator(enumerator))
773 {
774 return "unrecognized enumerator";
775 }
776
777 std::vector<std::string> strings;
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600778 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600779 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600780 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600781 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600782 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600783 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600784 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600785 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600786 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600787 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600788 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600789 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600790 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600791 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600792 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600793 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600794 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600795 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600796 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600797 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600798 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600799 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600800 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600801 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600802 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600803 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600804 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600805 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600806 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600807 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600808 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600809 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600810 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600811 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600812 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600813 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600814 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600815 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600816 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600817 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600818 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600819 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600820 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600821 }
822
823 std::string enumeratorString;
824 for(auto const& string : strings)
825 {
826 enumeratorString += string;
827
828 if(string != strings.back())
829 {
830 enumeratorString += '|';
831 }
832 }
833
834 return enumeratorString;
835}
836
837static
838bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
839{
840 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
841 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
842 VK_QUERY_RESULT_WAIT_BIT |
843 VK_QUERY_RESULT_64_BIT |
844 VK_QUERY_RESULT_DEFAULT);
845 if(enumerator & (~allFlags))
846 {
847 return false;
848 }
849
850 return true;
851}
852
853static
854std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
855{
856 if(!ValidateEnumerator(enumerator))
857 {
858 return "unrecognized enumerator";
859 }
860
861 std::vector<std::string> strings;
862 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
863 {
864 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
865 }
866 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
867 {
868 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
869 }
870 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
871 {
872 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
873 }
874 if(enumerator & VK_QUERY_RESULT_64_BIT)
875 {
876 strings.push_back("VK_QUERY_RESULT_64_BIT");
877 }
878 if(enumerator & VK_QUERY_RESULT_DEFAULT)
879 {
880 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600881 }
882
883 std::string enumeratorString;
884 for(auto const& string : strings)
885 {
886 enumeratorString += string;
887
888 if(string != strings.back())
889 {
890 enumeratorString += '|';
891 }
892 }
893
894 return enumeratorString;
895}
896
897static
898bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
899{
900 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
901 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
902 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
903 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
904 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
905 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
906 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
907 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600908 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600909 if(enumerator & (~allFlags))
910 {
911 return false;
912 }
913
914 return true;
915}
916
917static
918std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
919{
920 if(!ValidateEnumerator(enumerator))
921 {
922 return "unrecognized enumerator";
923 }
924
925 std::vector<std::string> strings;
926 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
927 {
928 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
929 }
930 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
931 {
932 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
933 }
934 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
935 {
936 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
937 }
938 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
939 {
940 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
941 }
942 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
943 {
944 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
945 }
946 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
947 {
948 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
949 }
950 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
951 {
952 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
953 }
954 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
955 {
956 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
957 }
958 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
959 {
960 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
961 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600962
963 std::string enumeratorString;
964 for(auto const& string : strings)
965 {
966 enumeratorString += string;
967
968 if(string != strings.back())
969 {
970 enumeratorString += '|';
971 }
972 }
973
974 return enumeratorString;
975}
976
977static
978bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
979{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600980 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
981 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600982 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600983 if(enumerator & (~allFlags))
984 {
985 return false;
986 }
987
988 return true;
989}
990
991static
992std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
993{
994 if(!ValidateEnumerator(enumerator))
995 {
996 return "unrecognized enumerator";
997 }
998
999 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001000 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1001 {
1002 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1003 }
1004 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1005 {
1006 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1007 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001008 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001009 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001010 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001011 }
1012
1013 std::string enumeratorString;
1014 for(auto const& string : strings)
1015 {
1016 enumeratorString += string;
1017
1018 if(string != strings.back())
1019 {
1020 enumeratorString += '|';
1021 }
1022 }
1023
1024 return enumeratorString;
1025}
1026
1027static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001028bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1029{
1030 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001031 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1032 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001033 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001034 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001035 if(enumerator & (~allFlags))
1036 {
1037 return false;
1038 }
1039
1040 return true;
1041}
1042
1043static
1044std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1045{
1046 if(!ValidateEnumerator(enumerator))
1047 {
1048 return "unrecognized enumerator";
1049 }
1050
1051 std::vector<std::string> strings;
1052 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1053 {
1054 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1055 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001056 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1057 {
1058 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1059 }
1060 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1061 {
1062 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1063 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001064 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1065 {
1066 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1067 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001068 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001069 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001070 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001071 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001072
1073 std::string enumeratorString;
1074 for(auto const& string : strings)
1075 {
1076 enumeratorString += string;
1077
1078 if(string != strings.back())
1079 {
1080 enumeratorString += '|';
1081 }
1082 }
1083
1084 return enumeratorString;
1085}
1086
1087static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001088bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001089{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001090 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1091 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001092 if(enumerator & (~allFlags))
1093 {
1094 return false;
1095 }
1096
1097 return true;
1098}
1099
1100static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001101std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001102{
1103 if(!ValidateEnumerator(enumerator))
1104 {
1105 return "unrecognized enumerator";
1106 }
1107
1108 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001109 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001110 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001111 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001112 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001113 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001114 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001115 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001116 }
1117
1118 std::string enumeratorString;
1119 for(auto const& string : strings)
1120 {
1121 enumeratorString += string;
1122
1123 if(string != strings.back())
1124 {
1125 enumeratorString += '|';
1126 }
1127 }
1128
1129 return enumeratorString;
1130}
1131
1132static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001133bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1134{
1135 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1136 VK_CHANNEL_B_BIT |
1137 VK_CHANNEL_G_BIT |
1138 VK_CHANNEL_R_BIT);
1139 if(enumerator & (~allFlags))
1140 {
1141 return false;
1142 }
1143
1144 return true;
1145}
1146
1147static
1148std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1149{
1150 if(!ValidateEnumerator(enumerator))
1151 {
1152 return "unrecognized enumerator";
1153 }
1154
1155 std::vector<std::string> strings;
1156 if(enumerator & VK_CHANNEL_A_BIT)
1157 {
1158 strings.push_back("VK_CHANNEL_A_BIT");
1159 }
1160 if(enumerator & VK_CHANNEL_B_BIT)
1161 {
1162 strings.push_back("VK_CHANNEL_B_BIT");
1163 }
1164 if(enumerator & VK_CHANNEL_G_BIT)
1165 {
1166 strings.push_back("VK_CHANNEL_G_BIT");
1167 }
1168 if(enumerator & VK_CHANNEL_R_BIT)
1169 {
1170 strings.push_back("VK_CHANNEL_R_BIT");
1171 }
1172
1173 std::string enumeratorString;
1174 for(auto const& string : strings)
1175 {
1176 enumeratorString += string;
1177
1178 if(string != strings.back())
1179 {
1180 enumeratorString += '|';
1181 }
1182 }
1183
1184 return enumeratorString;
1185}
1186
1187static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001188bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001189{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001190 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1191 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1192 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001193 if(enumerator & (~allFlags))
1194 {
1195 return false;
1196 }
1197
1198 return true;
1199}
1200
1201static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001202std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001203{
1204 if(!ValidateEnumerator(enumerator))
1205 {
1206 return "unrecognized enumerator";
1207 }
1208
1209 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001210 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001211 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001212 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1213 }
1214 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1215 {
1216 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1217 }
1218 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1219 {
1220 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001221 }
1222
1223 std::string enumeratorString;
1224 for(auto const& string : strings)
1225 {
1226 enumeratorString += string;
1227
1228 if(string != strings.back())
1229 {
1230 enumeratorString += '|';
1231 }
1232 }
1233
1234 return enumeratorString;
1235}
1236
1237static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001238bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001239{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001240 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1241 VK_SHADER_STAGE_FRAGMENT_BIT |
1242 VK_SHADER_STAGE_GEOMETRY_BIT |
1243 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001244 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1245 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001246 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001247 if(enumerator & (~allFlags))
1248 {
1249 return false;
1250 }
1251
1252 return true;
1253}
1254
1255static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001256std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001257{
1258 if(!ValidateEnumerator(enumerator))
1259 {
1260 return "unrecognized enumerator";
1261 }
1262
1263 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001264 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001265 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001266 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001267 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001268 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001269 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001270 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001271 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001272 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001273 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001274 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1275 }
1276 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1277 {
1278 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1279 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001280 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001281 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001282 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001283 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001284 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001285 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001286 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001287 }
1288 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1289 {
1290 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001291 }
1292
1293 std::string enumeratorString;
1294 for(auto const& string : strings)
1295 {
1296 enumeratorString += string;
1297
1298 if(string != strings.back())
1299 {
1300 enumeratorString += '|';
1301 }
1302 }
1303
1304 return enumeratorString;
1305}
1306
1307static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001308bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001309{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001310 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1311 VK_PIPELINE_STAGE_HOST_BIT |
1312 VK_PIPELINE_STAGE_TRANSFER_BIT |
1313 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1314 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1315 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001316 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001317 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001318 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1319 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1320 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001321 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001322 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1323 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1324 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1325 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001326 if(enumerator & (~allFlags))
1327 {
1328 return false;
1329 }
1330
1331 return true;
1332}
1333
1334static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001335std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001336{
1337 if(!ValidateEnumerator(enumerator))
1338 {
1339 return "unrecognized enumerator";
1340 }
1341
1342 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001343 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001344 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001345 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001346 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001347 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001348 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001349 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001350 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001351 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001352 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001353 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001354 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001355 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001356 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001357 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001358 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001359 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001360 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001361 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001362 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001363 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001364 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001365 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001366 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001367 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001368 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001369 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001370 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001371 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001372 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001373 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001374 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001375 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001376 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001377 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001378 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001379 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001380 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001381 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1382 }
1383 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1384 {
1385 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1386 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001387 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001388 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001389 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001390 }
1391 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1392 {
1393 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1394 }
1395 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1396 {
1397 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1398 }
1399 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1400 {
1401 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1402 }
1403 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1404 {
1405 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001406 }
1407
1408 std::string enumeratorString;
1409 for(auto const& string : strings)
1410 {
1411 enumeratorString += string;
1412
1413 if(string != strings.back())
1414 {
1415 enumeratorString += '|';
1416 }
1417 }
1418
1419 return enumeratorString;
1420}
1421
1422static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001423bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001424{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001425 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1426 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1427 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1428 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1429 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001430 if(enumerator & (~allFlags))
1431 {
1432 return false;
1433 }
1434
1435 return true;
1436}
1437
1438static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001440{
1441 if(!ValidateEnumerator(enumerator))
1442 {
1443 return "unrecognized enumerator";
1444 }
1445
1446 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001448 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001449 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001450 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001451 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001452 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001453 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001454 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001455 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001456 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001457 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1458 }
1459 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1460 {
1461 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1462 }
1463 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1464 {
1465 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001466 }
1467
1468 std::string enumeratorString;
1469 for(auto const& string : strings)
1470 {
1471 enumeratorString += string;
1472
1473 if(string != strings.back())
1474 {
1475 enumeratorString += '|';
1476 }
1477 }
1478
1479 return enumeratorString;
1480}
1481
1482static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001483bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001484{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001485 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1486 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1487 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1488 VK_MEMORY_INPUT_SHADER_READ_BIT |
1489 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1490 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1491 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1492 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1493 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1494 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001495 if(enumerator & (~allFlags))
1496 {
1497 return false;
1498 }
1499
1500 return true;
1501}
1502
1503static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001504std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001505{
1506 if(!ValidateEnumerator(enumerator))
1507 {
1508 return "unrecognized enumerator";
1509 }
1510
1511 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001512 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001513 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001514 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1515 }
1516 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1517 {
1518 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1519 }
1520 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1521 {
1522 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1523 }
1524 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1525 {
1526 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1527 }
1528 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1529 {
1530 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1531 }
1532 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1533 {
1534 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1535 }
1536 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1537 {
1538 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1539 }
1540 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1541 {
1542 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1543 }
1544 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1545 {
1546 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1547 }
1548 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1549 {
1550 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001551 }
1552
1553 std::string enumeratorString;
1554 for(auto const& string : strings)
1555 {
1556 enumeratorString += string;
1557
1558 if(string != strings.back())
1559 {
1560 enumeratorString += '|';
1561 }
1562 }
1563
1564 return enumeratorString;
1565}
1566
1567static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001568bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001569{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001570 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1571 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001572 if(enumerator & (~allFlags))
1573 {
1574 return false;
1575 }
1576
1577 return true;
1578}
1579
1580static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001581std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001582{
1583 if(!ValidateEnumerator(enumerator))
1584 {
1585 return "unrecognized enumerator";
1586 }
1587
1588 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001589 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001590 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001591 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001592 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001593 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001594 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001595 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001596 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001597
1598 std::string enumeratorString;
1599 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001600 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001601 enumeratorString += string;
1602
1603 if(string != strings.back())
1604 {
1605 enumeratorString += '|';
1606 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001607 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001608
1609 return enumeratorString;
1610}
1611
1612static
1613bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1614{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001615 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001616 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001617 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001618 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001619 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001620
1621 return true;
1622}
1623
1624static
1625std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1626{
1627 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001628 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001629 return "unrecognized enumerator";
1630 }
1631
1632 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001633 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001634 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001635 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001636 }
1637
1638 std::string enumeratorString;
1639 for(auto const& string : strings)
1640 {
1641 enumeratorString += string;
1642
1643 if(string != strings.back())
1644 {
1645 enumeratorString += '|';
1646 }
1647 }
1648
1649 return enumeratorString;
1650}
1651
1652static
1653bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1654{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001655 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1656 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001657 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1658 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1659 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1660 if(enumerator & (~allFlags))
1661 {
1662 return false;
1663 }
1664
1665 return true;
1666}
1667
1668static
1669std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1670{
1671 if(!ValidateEnumerator(enumerator))
1672 {
1673 return "unrecognized enumerator";
1674 }
1675
1676 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001677 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1678 {
1679 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1680 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001681 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1682 {
1683 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1684 }
1685 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1686 {
1687 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1688 }
1689 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1690 {
1691 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1692 }
1693 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1694 {
1695 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1696 }
1697
1698 std::string enumeratorString;
1699 for(auto const& string : strings)
1700 {
1701 enumeratorString += string;
1702
1703 if(string != strings.back())
1704 {
1705 enumeratorString += '|';
1706 }
1707 }
1708
1709 return enumeratorString;
1710}
1711
1712static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001713bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001714{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001715 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001716 if(enumerator & (~allFlags))
1717 {
1718 return false;
1719 }
1720
1721 return true;
1722}
1723
1724static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001725std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001726{
1727 if(!ValidateEnumerator(enumerator))
1728 {
1729 return "unrecognized enumerator";
1730 }
1731
1732 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001733 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001734 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001735 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001736 }
1737
1738 std::string enumeratorString;
1739 for(auto const& string : strings)
1740 {
1741 enumeratorString += string;
1742
1743 if(string != strings.back())
1744 {
1745 enumeratorString += '|';
1746 }
1747 }
1748
1749 return enumeratorString;
1750}
1751
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001752static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001753bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001754{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001755 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1756 VK_IMAGE_ASPECT_STENCIL_BIT |
1757 VK_IMAGE_ASPECT_DEPTH_BIT |
1758 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001759 if(enumerator & (~allFlags))
1760 {
1761 return false;
1762 }
1763
1764 return true;
1765}
1766
1767static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001768std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001769{
1770 if(!ValidateEnumerator(enumerator))
1771 {
1772 return "unrecognized enumerator";
1773 }
1774
1775 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001776 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001777 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001778 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1779 }
1780 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1781 {
1782 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1783 }
1784 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1785 {
1786 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1787 }
1788 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1789 {
1790 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1791 }
1792
1793 std::string enumeratorString;
1794 for(auto const& string : strings)
1795 {
1796 enumeratorString += string;
1797
1798 if(string != strings.back())
1799 {
1800 enumeratorString += '|';
1801 }
1802 }
1803
1804 return enumeratorString;
1805}
1806
1807static
1808bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1809{
1810 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1811 if(enumerator & (~allFlags))
1812 {
1813 return false;
1814 }
1815
1816 return true;
1817}
1818
1819static
1820std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1821{
1822 if(!ValidateEnumerator(enumerator))
1823 {
1824 return "unrecognized enumerator";
1825 }
1826
1827 std::vector<std::string> strings;
1828 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1829 {
1830 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001831 }
1832
1833 std::string enumeratorString;
1834 for(auto const& string : strings)
1835 {
1836 enumeratorString += string;
1837
1838 if(string != strings.back())
1839 {
1840 enumeratorString += '|';
1841 }
1842 }
1843
1844 return enumeratorString;
1845}
1846
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001847VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1848 const VkInstanceCreateInfo* pCreateInfo,
1849 VkInstance* pInstance)
1850{
1851 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1852 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1853
1854 if (result == VK_SUCCESS) {
1855 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1856 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001857 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001858
1859 InitParamChecker(data);
1860 }
1861
1862 return result;
1863}
1864
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001865VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001866 VkInstance instance)
1867{
1868 // Grab the key before the instance is destroyed.
1869 dispatch_key key = get_dispatch_key(instance);
1870 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001871 pTable->DestroyInstance(instance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001872
1873 // Clean up logging callback, if any
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001874 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1875 while (my_data->logging_callback.size() > 0) {
1876 VkDbgMsgCallback callback = my_data->logging_callback.back();
1877 layer_destroy_msg_callback(my_data->report_data, callback);
1878 my_data->logging_callback.pop_back();
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001879 }
1880
1881 layer_debug_report_destroy_instance(mid(instance));
1882 layer_data_map.erase(pTable);
1883
1884 pc_instance_table_map.erase(key);
1885 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001886}
1887
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001888bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001889 VkInstance instance,
1890 uint32_t* pPhysicalDeviceCount,
1891 VkPhysicalDevice* pPhysicalDevices,
1892 VkResult result)
1893{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001894
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001895 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001896 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001897 }
1898
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001899 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001900 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001901 }
1902
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001903 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001904 {
1905 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001906 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1907 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001908 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001909
1910 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001911}
1912
1913VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1914 VkInstance instance,
1915 uint32_t* pPhysicalDeviceCount,
1916 VkPhysicalDevice* pPhysicalDevices)
1917{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001918 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1919
1920 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1921
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001922 return result;
1923}
1924
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001925bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001926 VkPhysicalDevice physicalDevice,
1927 VkPhysicalDeviceFeatures* pFeatures,
1928 VkResult result)
1929{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001930
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001931 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001932 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001933 }
1934
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001935 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001936 {
1937 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001938 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1939 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001940 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001941
1942 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001943}
1944
1945VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
1946 VkPhysicalDevice physicalDevice,
1947 VkPhysicalDeviceFeatures* pFeatures)
1948{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001949 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1950
1951 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
1952
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001953 return result;
1954}
1955
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001956bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001957 VkPhysicalDevice physicalDevice,
1958 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001959 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001960 VkResult result)
1961{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001962
1963 if(format < VK_FORMAT_BEGIN_RANGE ||
1964 format > VK_FORMAT_END_RANGE)
1965 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001966 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001967 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001968 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001969 }
1970
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001971 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001972 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001973 }
1974
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001975 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001976 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001977 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001978 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1979 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001980 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001981
1982 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001983}
1984
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001985VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001986 VkPhysicalDevice physicalDevice,
1987 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001988 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001989{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001990 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001991
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001992 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
1993
1994 return result;
1995}
1996
1997bool PostGetPhysicalDeviceImageFormatProperties(
1998 VkPhysicalDevice physicalDevice,
1999 VkFormat format,
2000 VkImageType type,
2001 VkImageTiling tiling,
2002 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002003 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002004 VkImageFormatProperties* pImageFormatProperties,
2005 VkResult result)
2006{
2007
2008 if(format < VK_FORMAT_BEGIN_RANGE ||
2009 format > VK_FORMAT_END_RANGE)
2010 {
2011 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2012 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2013 return false;
2014 }
2015
2016 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2017 type > VK_IMAGE_TYPE_END_RANGE)
2018 {
2019 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2020 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2021 return false;
2022 }
2023
2024 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2025 tiling > VK_IMAGE_TILING_END_RANGE)
2026 {
2027 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2028 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2029 return false;
2030 }
2031
2032
2033 if(pImageFormatProperties != nullptr)
2034 {
2035 }
2036
2037 if(result < VK_SUCCESS)
2038 {
2039 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2040 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2041 return false;
2042 }
2043
2044 return true;
2045}
2046
2047VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2048 VkPhysicalDevice physicalDevice,
2049 VkFormat format,
2050 VkImageType type,
2051 VkImageTiling tiling,
2052 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002053 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002054 VkImageFormatProperties* pImageFormatProperties)
2055{
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002056 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002057
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002058 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002059
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002060 return result;
2061}
2062
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002063bool PostGetPhysicalDeviceProperties(
2064 VkPhysicalDevice physicalDevice,
2065 VkPhysicalDeviceProperties* pProperties,
2066 VkResult result)
2067{
2068
2069 if(pProperties != nullptr)
2070 {
2071 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2072 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2073 {
2074 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2075 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2076 return false;
2077 }
2078 }
2079
2080 if(result < VK_SUCCESS)
2081 {
2082 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2083 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2084 return false;
2085 }
2086
2087 return true;
2088}
2089
2090VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2091 VkPhysicalDevice physicalDevice,
2092 VkPhysicalDeviceProperties* pProperties)
2093{
2094 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2095
2096 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2097
2098 return result;
2099}
2100
Cody Northropef72e2a2015-08-03 17:04:53 -06002101bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002102 VkPhysicalDevice physicalDevice,
2103 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002104 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002105 VkResult result)
2106{
2107
Cody Northropef72e2a2015-08-03 17:04:53 -06002108 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002109 {
2110 }
2111
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002112 if(pQueueProperties != nullptr)
2113 {
2114 }
2115
2116 if(result < VK_SUCCESS)
2117 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002118 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002119 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2120 return false;
2121 }
2122
2123 return true;
2124}
2125
2126VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2127 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002128 uint32_t* pCount,
2129 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002130{
Cody Northropef72e2a2015-08-03 17:04:53 -06002131 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002132
Cody Northropef72e2a2015-08-03 17:04:53 -06002133 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002134
2135 return result;
2136}
2137
2138bool PostGetPhysicalDeviceMemoryProperties(
2139 VkPhysicalDevice physicalDevice,
2140 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2141 VkResult result)
2142{
2143
2144 if(pMemoryProperties != nullptr)
2145 {
2146 }
2147
2148 if(result < VK_SUCCESS)
2149 {
2150 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2151 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2152 return false;
2153 }
2154
2155 return true;
2156}
2157
2158VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2159 VkPhysicalDevice physicalDevice,
2160 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2161{
2162 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2163
2164 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2165
2166 return result;
2167}
2168
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002169VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2170 VkPhysicalDevice physicalDevice,
2171 const VkDeviceCreateInfo* pCreateInfo,
2172 VkDevice* pDevice)
2173{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002174 /*
2175 * NOTE: The loader fills in the ICD's device object in *pDevice.
2176 * Use that object to get the dispatch table.
2177 *
2178 * NOTE: We do not validate physicalDevice or any dispatchable
2179 * object as the first parameter. We couldn't get here if it was wrong!
2180 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002181 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002182 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2183 if(result == VK_SUCCESS)
2184 {
2185 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2186 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2187 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2188 }
2189
2190 return result;
2191}
2192
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002193VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002194 VkDevice device)
2195{
2196 layer_debug_report_destroy_device(device);
2197
2198 dispatch_key key = get_dispatch_key(device);
2199#if DISPATCH_MAP_DEBUG
2200 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2201#endif
2202
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002203 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002204 pc_device_table_map.erase(key);
2205 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002206}
2207
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002208bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002209 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002210 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002211 uint32_t queueIndex,
2212 VkQueue* pQueue,
2213 VkResult result)
2214{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002215
2216
2217
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002218 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002219 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002220 }
2221
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002222 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002223 {
2224 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002225 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2226 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002227 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002228
2229 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002230}
2231
2232VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2233 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002234 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002235 uint32_t queueIndex,
2236 VkQueue* pQueue)
2237{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002238 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002239
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002240 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002241
2242 return result;
2243}
2244
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002245bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002246 VkQueue queue,
2247 const VkCmdBuffer* pCmdBuffers)
2248{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002249 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002250 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002251 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002252
2253 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002254}
2255
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002256bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002257 VkQueue queue,
2258 uint32_t cmdBufferCount,
2259 VkFence fence,
2260 VkResult result)
2261{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002262
2263
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002264
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002265 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002266 {
2267 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002268 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2269 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002270 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002271
2272 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002273}
2274
2275VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2276 VkQueue queue,
2277 uint32_t cmdBufferCount,
2278 const VkCmdBuffer* pCmdBuffers,
2279 VkFence fence)
2280{
2281 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002282
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002283 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2284
2285 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2286
2287 return result;
2288}
2289
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002290bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002291 VkQueue queue,
2292 VkResult result)
2293{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002294
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002295 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002296 {
2297 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002298 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2299 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002300 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002301
2302 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002303}
2304
2305VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2306 VkQueue queue)
2307{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002308 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2309
2310 PostQueueWaitIdle(queue, result);
2311
2312 return result;
2313}
2314
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002315bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002316 VkDevice device,
2317 VkResult result)
2318{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002319
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002320 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002321 {
2322 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002323 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2324 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002325 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002326
2327 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002328}
2329
2330VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2331 VkDevice device)
2332{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002333 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2334
2335 PostDeviceWaitIdle(device, result);
2336
2337 return result;
2338}
2339
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002340bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002341 VkDevice device,
2342 const VkMemoryAllocInfo* pAllocInfo)
2343{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002344 if(pAllocInfo != nullptr)
2345 {
2346 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002347 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002348 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002349 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002350 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002351 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002352 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002353
2354 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002355}
2356
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002357bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002358 VkDevice device,
2359 VkDeviceMemory* pMem,
2360 VkResult result)
2361{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002362
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002363 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002364 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002365 }
2366
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002367 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002368 {
2369 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002370 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2371 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002372 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002373
2374 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002375}
2376
2377VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2378 VkDevice device,
2379 const VkMemoryAllocInfo* pAllocInfo,
2380 VkDeviceMemory* pMem)
2381{
2382 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002383
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002384 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2385
2386 PostAllocMemory(device, pMem, result);
2387
2388 return result;
2389}
2390
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002391bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002392 VkDevice device,
2393 VkDeviceMemory mem,
2394 VkDeviceSize offset,
2395 VkDeviceSize size,
2396 VkMemoryMapFlags flags,
2397 void** ppData,
2398 VkResult result)
2399{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002400
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002401
2402
2403
2404
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002405 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002406 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002407 }
2408
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002409 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002410 {
2411 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002412 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2413 return false;
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
2419VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2420 VkDevice device,
2421 VkDeviceMemory mem,
2422 VkDeviceSize offset,
2423 VkDeviceSize size,
2424 VkMemoryMapFlags flags,
2425 void** ppData)
2426{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002427 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2428
2429 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2430
2431 return result;
2432}
2433
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002434bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002435 VkDevice device,
2436 const VkMappedMemoryRange* pMemRanges)
2437{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002438 if(pMemRanges != nullptr)
2439 {
2440 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002441 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002442 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002443 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002444 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002445 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002446 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002447
2448 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002449}
2450
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002451bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002452 VkDevice device,
2453 uint32_t memRangeCount,
2454 VkResult result)
2455{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002456
2457
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002458 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002459 {
2460 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002461 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2462 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002463 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002464
2465 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002466}
2467
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002468VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002469 VkDevice device,
2470 uint32_t memRangeCount,
2471 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002472{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002473 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002474
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002475 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002476
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002477 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2478
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002479 return result;
2480}
2481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002482bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002483 VkDevice device,
2484 const VkMappedMemoryRange* pMemRanges)
2485{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002486 if(pMemRanges != nullptr)
2487 {
2488 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002489 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002491 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002492 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002493 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002494 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002495
2496 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002497}
2498
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002499bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002500 VkDevice device,
2501 uint32_t memRangeCount,
2502 VkResult result)
2503{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002504
2505
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002506 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002507 {
2508 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002509 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2510 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002511 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002512
2513 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002514}
2515
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002516VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002517 VkDevice device,
2518 uint32_t memRangeCount,
2519 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002520{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002521 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002522
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002523 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002524
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002525 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2526
Tony Barbour859ceab2015-04-16 19:23:13 -06002527 return result;
2528}
2529
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002530bool PostGetDeviceMemoryCommitment(
2531 VkDevice device,
2532 VkDeviceMemory memory,
2533 VkDeviceSize* pCommittedMemoryInBytes,
2534 VkResult result)
2535{
2536
2537
2538 if(pCommittedMemoryInBytes != nullptr)
2539 {
2540 }
2541
2542 if(result < VK_SUCCESS)
2543 {
2544 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2545 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2546 return false;
2547 }
2548
2549 return true;
2550}
2551
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002552VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002553 VkDevice device,
2554 VkDeviceMemory memory,
2555 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002556{
2557 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2558
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002559 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2560
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002561 return result;
2562}
2563
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002564bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002565 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002566 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002567 VkDeviceMemory mem,
2568 VkDeviceSize memOffset,
2569 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002570{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002571
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002572
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002573
2574
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002575 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002576 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002577 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2578 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2579 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002580 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002581
2582 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002583}
2584
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002585VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002586 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002587 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002588 VkDeviceMemory mem,
2589 VkDeviceSize memOffset)
2590{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002591 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002592
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002593 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002594
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002595 return result;
2596}
2597
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002598bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002599 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002600 VkImage image,
2601 VkDeviceMemory mem,
2602 VkDeviceSize memOffset,
2603 VkResult result)
2604{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002605
2606
2607
2608
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002609 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002610 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002611 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2612 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2613 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002614 }
2615
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002616 return true;
2617}
2618
2619VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2620 VkDevice device,
2621 VkImage image,
2622 VkDeviceMemory mem,
2623 VkDeviceSize memOffset)
2624{
2625 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2626
2627 PostBindImageMemory(device, image, mem, memOffset, result);
2628
2629 return result;
2630}
2631
2632bool PostGetBufferMemoryRequirements(
2633 VkDevice device,
2634 VkBuffer buffer,
2635 VkMemoryRequirements* pMemoryRequirements,
2636 VkResult result)
2637{
2638
2639
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002640 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002641 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002642 }
2643
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002644 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002645 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002646 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2647 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2648 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002649 }
2650
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002651 return true;
2652}
2653
2654VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2655 VkDevice device,
2656 VkBuffer buffer,
2657 VkMemoryRequirements* pMemoryRequirements)
2658{
2659 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2660
2661 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2662
2663 return result;
2664}
2665
2666bool PostGetImageMemoryRequirements(
2667 VkDevice device,
2668 VkImage image,
2669 VkMemoryRequirements* pMemoryRequirements,
2670 VkResult result)
2671{
2672
2673
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002674 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002675 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002676 }
2677
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002678 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002679 {
2680 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2681 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2682 return false;
2683 }
2684
2685 return true;
2686}
2687
2688VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2689 VkDevice device,
2690 VkImage image,
2691 VkMemoryRequirements* pMemoryRequirements)
2692{
2693 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2694
2695 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2696
2697 return result;
2698}
2699
2700bool PostGetImageSparseMemoryRequirements(
2701 VkDevice device,
2702 VkImage image,
2703 uint32_t* pNumRequirements,
2704 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2705 VkResult result)
2706{
2707
2708
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002709 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002710 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002711 }
2712
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002713 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002714 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002715 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2716 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2717 {
2718 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002719 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002720 return false;
2721 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002722 }
2723
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002724 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002725 {
2726 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2727 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2728 return false;
2729 }
2730
2731 return true;
2732}
2733
2734VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2735 VkDevice device,
2736 VkImage image,
2737 uint32_t* pNumRequirements,
2738 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2739{
2740 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2741
2742 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2743
2744 return result;
2745}
2746
2747bool PostGetPhysicalDeviceSparseImageFormatProperties(
2748 VkPhysicalDevice physicalDevice,
2749 VkFormat format,
2750 VkImageType type,
2751 uint32_t samples,
2752 VkImageUsageFlags usage,
2753 VkImageTiling tiling,
2754 uint32_t* pNumProperties,
2755 VkSparseImageFormatProperties* pProperties,
2756 VkResult result)
2757{
2758
2759 if(format < VK_FORMAT_BEGIN_RANGE ||
2760 format > VK_FORMAT_END_RANGE)
2761 {
2762 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002763 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002764 return false;
2765 }
2766
2767 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2768 type > VK_IMAGE_TYPE_END_RANGE)
2769 {
2770 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002771 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002772 return false;
2773 }
2774
2775
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002776
2777 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2778 tiling > VK_IMAGE_TILING_END_RANGE)
2779 {
2780 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002781 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002782 return false;
2783 }
2784
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002785 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002786 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002787 }
2788
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002789 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002790 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002791 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2792 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2793 {
2794 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002795 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002796 return false;
2797 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002798 }
2799
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002800 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002801 {
2802 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2803 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2804 return false;
2805 }
2806
2807 return true;
2808}
2809
2810VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2811 VkPhysicalDevice physicalDevice,
2812 VkFormat format,
2813 VkImageType type,
2814 uint32_t samples,
2815 VkImageUsageFlags usage,
2816 VkImageTiling tiling,
2817 uint32_t* pNumProperties,
2818 VkSparseImageFormatProperties* pProperties)
2819{
2820 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2821
2822 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2823
2824 return result;
2825}
2826
2827bool PreQueueBindSparseBufferMemory(
2828 VkQueue queue,
2829 const VkSparseMemoryBindInfo* pBindInfo)
2830{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002831 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002832 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002833 }
2834
2835 return true;
2836}
2837
2838bool PostQueueBindSparseBufferMemory(
2839 VkQueue queue,
2840 VkBuffer buffer,
2841 uint32_t numBindings,
2842 VkResult result)
2843{
2844
2845
2846
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002847 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002848 {
2849 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2850 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2851 return false;
2852 }
2853
2854 return true;
2855}
2856
2857VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2858 VkQueue queue,
2859 VkBuffer buffer,
2860 uint32_t numBindings,
2861 const VkSparseMemoryBindInfo* pBindInfo)
2862{
2863 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2864
2865 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2866
2867 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2868
2869 return result;
2870}
2871
2872bool PreQueueBindSparseImageOpaqueMemory(
2873 VkQueue queue,
2874 const VkSparseMemoryBindInfo* pBindInfo)
2875{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002876 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002877 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002878 }
2879
2880 return true;
2881}
2882
2883bool PostQueueBindSparseImageOpaqueMemory(
2884 VkQueue queue,
2885 VkImage image,
2886 uint32_t numBindings,
2887 VkResult result)
2888{
2889
2890
2891
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002892 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002893 {
2894 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2895 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2896 return false;
2897 }
2898
2899 return true;
2900}
2901
2902VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2903 VkQueue queue,
2904 VkImage image,
2905 uint32_t numBindings,
2906 const VkSparseMemoryBindInfo* pBindInfo)
2907{
2908 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2909
2910 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2911
2912 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2913
2914 return result;
2915}
2916
2917bool PreQueueBindSparseImageMemory(
2918 VkQueue queue,
2919 const VkSparseImageMemoryBindInfo* pBindInfo)
2920{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002921 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002922 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002923 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2924 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
2925 {
2926 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002927 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002928 return false;
2929 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002930 }
2931
2932 return true;
2933}
2934
2935bool PostQueueBindSparseImageMemory(
2936 VkQueue queue,
2937 VkImage image,
2938 uint32_t numBindings,
2939 VkResult result)
2940{
2941
2942
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002943
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002944 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002945 {
2946 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002947 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2948 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002949 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002950
2951 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002952}
2953
2954VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002955 VkQueue queue,
2956 VkImage image,
2957 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002958 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002959{
2960 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002961
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002962 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002963
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002964 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002965
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002966 return result;
2967}
2968
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002969bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002970 VkDevice device,
2971 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002972{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002973 if(pCreateInfo != nullptr)
2974 {
2975 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002976 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002977 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002978 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002979 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002980 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002981 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002982
2983 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002984}
2985
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002986bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002987 VkDevice device,
2988 VkFence* pFence,
2989 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002990{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002991
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002992 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002993 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002994 }
2995
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002996 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002997 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002998 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002999 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3000 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003001 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003002
3003 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003004}
3005
3006VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3007 VkDevice device,
3008 const VkFenceCreateInfo* pCreateInfo,
3009 VkFence* pFence)
3010{
3011 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003012
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003013 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3014
3015 PostCreateFence(device, pFence, result);
3016
3017 return result;
3018}
3019
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003020bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003021 VkDevice device,
3022 const VkFence* pFences)
3023{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003024 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003025 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003026 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003027
3028 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003029}
3030
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003031bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003032 VkDevice device,
3033 uint32_t fenceCount,
3034 VkResult result)
3035{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003036
3037
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003038 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003039 {
3040 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003041 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3042 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003043 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003044
3045 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003046}
3047
3048VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3049 VkDevice device,
3050 uint32_t fenceCount,
3051 const VkFence* pFences)
3052{
3053 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003054
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003055 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3056
3057 PostResetFences(device, fenceCount, result);
3058
3059 return result;
3060}
3061
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003062bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003063 VkDevice device,
3064 VkFence fence,
3065 VkResult result)
3066{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003067
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003068
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003069 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003070 {
3071 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003072 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3073 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003074 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003075
3076 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003077}
3078
3079VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3080 VkDevice device,
3081 VkFence fence)
3082{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003083 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3084
3085 PostGetFenceStatus(device, fence, result);
3086
3087 return result;
3088}
3089
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003090bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003091 VkDevice device,
3092 const VkFence* pFences)
3093{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003094 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003095 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003096 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003097
3098 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003099}
3100
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003101bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003102 VkDevice device,
3103 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003104 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003105 uint64_t timeout,
3106 VkResult result)
3107{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003108
3109
3110
3111
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003112 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003113 {
3114 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3116 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003117 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003118
3119 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003120}
3121
3122VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3123 VkDevice device,
3124 uint32_t fenceCount,
3125 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003126 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003127 uint64_t timeout)
3128{
3129 PreWaitForFences(device, pFences);
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)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3132
3133 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3134
3135 return result;
3136}
3137
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003138bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003139 VkDevice device,
3140 const VkSemaphoreCreateInfo* pCreateInfo)
3141{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003142 if(pCreateInfo != nullptr)
3143 {
3144 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003145 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003146 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003147 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003148 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003149 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003150 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003151
3152 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003153}
3154
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003155bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003156 VkDevice device,
3157 VkSemaphore* pSemaphore,
3158 VkResult result)
3159{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003160
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003161 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003162 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003163 }
3164
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003165 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003166 {
3167 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003168 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3169 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003170 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003171
3172 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003173}
3174
3175VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3176 VkDevice device,
3177 const VkSemaphoreCreateInfo* pCreateInfo,
3178 VkSemaphore* pSemaphore)
3179{
3180 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003181
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003182 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3183
3184 PostCreateSemaphore(device, pSemaphore, result);
3185
3186 return result;
3187}
3188
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003189bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003190 VkQueue queue,
3191 VkSemaphore semaphore,
3192 VkResult result)
3193{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003194
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003195
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003196 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003197 {
3198 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003199 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3200 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003201 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003202
3203 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003204}
3205
3206VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3207 VkQueue queue,
3208 VkSemaphore semaphore)
3209{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003210 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3211
3212 PostQueueSignalSemaphore(queue, semaphore, result);
3213
3214 return result;
3215}
3216
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003217bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003218 VkQueue queue,
3219 VkSemaphore semaphore,
3220 VkResult result)
3221{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003222
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003223
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003224 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003225 {
3226 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003227 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3228 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003229 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003230
3231 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003232}
3233
3234VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3235 VkQueue queue,
3236 VkSemaphore semaphore)
3237{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003238 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3239
3240 PostQueueWaitSemaphore(queue, semaphore, result);
3241
3242 return result;
3243}
3244
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003245bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003246 VkDevice device,
3247 const VkEventCreateInfo* pCreateInfo)
3248{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003249 if(pCreateInfo != nullptr)
3250 {
3251 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003252 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003253 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003254 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003255 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003256 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003257 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003258
3259 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003260}
3261
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003262bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003263 VkDevice device,
3264 VkEvent* pEvent,
3265 VkResult result)
3266{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003267
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003268 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003269 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003270 }
3271
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003272 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003273 {
3274 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003275 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3276 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003277 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003278
3279 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003280}
3281
3282VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3283 VkDevice device,
3284 const VkEventCreateInfo* pCreateInfo,
3285 VkEvent* pEvent)
3286{
3287 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003288
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003289 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3290
3291 PostCreateEvent(device, pEvent, result);
3292
3293 return result;
3294}
3295
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003296bool PostGetEventStatus(
3297 VkDevice device,
3298 VkEvent event,
3299 VkResult result)
3300{
3301
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003302
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003303 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003304 {
3305 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003306 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3307 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003308 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003309
3310 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003311}
3312
3313VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3314 VkDevice device,
3315 VkEvent event)
3316{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003317 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3318
3319 PostGetEventStatus(device, event, result);
3320
3321 return result;
3322}
3323
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003324bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003325 VkDevice device,
3326 VkEvent event,
3327 VkResult result)
3328{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003329
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003330
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003331 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003332 {
3333 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003334 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3335 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003336 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003337
3338 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003339}
3340
3341VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3342 VkDevice device,
3343 VkEvent event)
3344{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003345 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3346
3347 PostSetEvent(device, event, result);
3348
3349 return result;
3350}
3351
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003352bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003353 VkDevice device,
3354 VkEvent event,
3355 VkResult result)
3356{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003357
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003358
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003359 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003360 {
3361 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003362 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3363 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003364 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003365
3366 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003367}
3368
3369VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3370 VkDevice device,
3371 VkEvent event)
3372{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003373 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3374
3375 PostResetEvent(device, event, result);
3376
3377 return result;
3378}
3379
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003380bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003381 VkDevice device,
3382 const VkQueryPoolCreateInfo* pCreateInfo)
3383{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003384 if(pCreateInfo != nullptr)
3385 {
3386 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003387 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003388 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003389 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003390 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003391 }
3392 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3393 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3394 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003395 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003396 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003397 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003398 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003399 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003400
3401 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003402}
3403
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003404bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003405 VkDevice device,
3406 VkQueryPool* pQueryPool,
3407 VkResult result)
3408{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003409
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003410 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003411 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003412 }
3413
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003414 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003415 {
3416 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003417 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3418 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003419 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003420
3421 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003422}
3423
3424VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3425 VkDevice device,
3426 const VkQueryPoolCreateInfo* pCreateInfo,
3427 VkQueryPool* pQueryPool)
3428{
3429 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003430
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003431 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3432
3433 PostCreateQueryPool(device, pQueryPool, result);
3434
3435 return result;
3436}
3437
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003438bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003439 VkDevice device,
3440 VkQueryPool queryPool,
3441 uint32_t startQuery,
3442 uint32_t queryCount,
3443 size_t* pDataSize,
3444 void* pData,
3445 VkQueryResultFlags flags,
3446 VkResult result)
3447{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003448
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003449
3450
3451
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003452 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003453 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003454 }
3455
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003456 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003457 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003458 }
3459
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003460
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003461 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003462 {
3463 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003464 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3465 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003466 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003467
3468 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003469}
3470
3471VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3472 VkDevice device,
3473 VkQueryPool queryPool,
3474 uint32_t startQuery,
3475 uint32_t queryCount,
3476 size_t* pDataSize,
3477 void* pData,
3478 VkQueryResultFlags flags)
3479{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003480 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3481
3482 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3483
3484 return result;
3485}
3486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003487bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003488 VkDevice device,
3489 const VkBufferCreateInfo* pCreateInfo)
3490{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003491 if(pCreateInfo != nullptr)
3492 {
3493 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003494 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003495 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003496 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003497 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003498 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003499 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3500 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003501 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003502 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003503 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003504 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003505 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003506 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003507 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003508 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003509 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003510
3511 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003512}
3513
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003514bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003515 VkDevice device,
3516 VkBuffer* pBuffer,
3517 VkResult result)
3518{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003519
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003520 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003521 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003522 }
3523
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003524 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003525 {
3526 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003527 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3528 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003529 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003530
3531 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003532}
3533
3534VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3535 VkDevice device,
3536 const VkBufferCreateInfo* pCreateInfo,
3537 VkBuffer* pBuffer)
3538{
3539 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003540
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003541 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3542
3543 PostCreateBuffer(device, pBuffer, result);
3544
3545 return result;
3546}
3547
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003548bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003549 VkDevice device,
3550 const VkBufferViewCreateInfo* pCreateInfo)
3551{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003552 if(pCreateInfo != nullptr)
3553 {
3554 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003555 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003556 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003557 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003558 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003559 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003560 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3561 pCreateInfo->format > VK_FORMAT_END_RANGE)
3562 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003563 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003564 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003565 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003566 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003567 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003568
3569 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003570}
3571
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003572bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003573 VkDevice device,
3574 VkBufferView* pView,
3575 VkResult result)
3576{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003577
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003578 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003579 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003580 }
3581
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003582 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003583 {
3584 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003585 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3586 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003587 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003588
3589 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003590}
3591
3592VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3593 VkDevice device,
3594 const VkBufferViewCreateInfo* pCreateInfo,
3595 VkBufferView* pView)
3596{
3597 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003598
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003599 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3600
3601 PostCreateBufferView(device, pView, result);
3602
3603 return result;
3604}
3605
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003606bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003607 VkDevice device,
3608 const VkImageCreateInfo* pCreateInfo)
3609{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003610 if(pCreateInfo != nullptr)
3611 {
3612 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003613 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003614 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003615 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003616 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003617 }
3618 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3619 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3620 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003621 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003622 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003623 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003624 }
3625 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3626 pCreateInfo->format > VK_FORMAT_END_RANGE)
3627 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003628 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003629 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003630 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003631 }
3632 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3633 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3634 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003635 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003636 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003637 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003638 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003639 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3640 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003641 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003642 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3643 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003644 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003645 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003646 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003647 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003648 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003649 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003650
3651 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003652}
3653
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003654bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003655 VkDevice device,
3656 VkImage* pImage,
3657 VkResult result)
3658{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003659
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003660 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003661 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003662 }
3663
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003664 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003665 {
3666 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003667 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3668 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003669 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003670
3671 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003672}
3673
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003674VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3675 VkDevice device,
3676 const VkImageCreateInfo* pCreateInfo,
3677 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003678{
3679 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003680
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003681 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3682
3683 PostCreateImage(device, pImage, result);
3684
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003685 return result;
3686}
3687
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003688bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003689 VkDevice device,
3690 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003691{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003692 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003693 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003694 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3695 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
3696 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003697 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003698 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003699 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003700 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003701 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003702
3703 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003704}
3705
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003706bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003707 VkDevice device,
3708 VkImage image,
3709 VkSubresourceLayout* pLayout,
3710 VkResult result)
3711{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003712
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003713
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003714 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003715 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003716 }
3717
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003718 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003719 {
3720 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003721 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3722 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003723 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003724
3725 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003726}
3727
3728VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
3729 VkDevice device,
3730 VkImage image,
3731 const VkImageSubresource* pSubresource,
3732 VkSubresourceLayout* pLayout)
3733{
3734 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003735
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003736 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
3737
3738 PostGetImageSubresourceLayout(device, image, pLayout, result);
3739
3740 return result;
3741}
3742
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003743bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003744 VkDevice device,
3745 const VkImageViewCreateInfo* pCreateInfo)
3746{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003747 if(pCreateInfo != nullptr)
3748 {
3749 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003750 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003751 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003752 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003753 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003754 }
3755 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3756 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3757 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003758 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003759 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003760 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003761 }
3762 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3763 pCreateInfo->format > VK_FORMAT_END_RANGE)
3764 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003765 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003766 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003768 }
3769 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3770 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3771 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003772 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003773 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003774 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003775 }
3776 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3777 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3778 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003779 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003780 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003781 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003782 }
3783 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3784 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3785 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003786 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003787 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003788 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003789 }
3790 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3791 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3792 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003793 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003794 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003795 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003796 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003797 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003798
3799 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003800}
3801
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003802bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003803 VkDevice device,
3804 VkImageView* pView,
3805 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003806{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003807
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003808 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003809 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003810 }
3811
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003812 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003813 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003814 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003815 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3816 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003817 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003818
3819 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003820}
3821
3822VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3823 VkDevice device,
3824 const VkImageViewCreateInfo* pCreateInfo,
3825 VkImageView* pView)
3826{
3827 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003828
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003829 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3830
3831 PostCreateImageView(device, pView, result);
3832
3833 return result;
3834}
3835
Michael Lentine6715e522015-09-15 14:59:14 -05003836bool PreCreateShaderModule(
3837 VkDevice device,
3838 const VkShaderModuleCreateInfo* pCreateInfo)
3839{
3840 if(pCreateInfo) {
3841 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3842 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3843 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3844 return false;
3845 }
3846 if(!pCreateInfo->pCode) {
3847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3848 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3849 return false;
3850 }
3851 } else {
3852 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3853 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3854 return false;
3855 }
3856
3857 return true;
3858}
3859
3860bool PostCreateShaderModule(
3861 VkDevice device,
3862 VkShaderModule* pShaderModule,
3863 VkResult result)
3864{
3865 if(result < VK_SUCCESS) {
3866 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3867 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3868 return false;
3869 }
3870
3871 return true;
3872}
3873
3874VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3875 VkDevice device,
3876 const VkShaderModuleCreateInfo* pCreateInfo,
3877 VkShaderModule* pShaderModule)
3878{
3879 PreCreateShaderModule(device, pCreateInfo);
3880 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3881 PostCreateShaderModule(device, pShaderModule, result);
3882 return result;
3883}
3884
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003885bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003886 VkDevice device,
3887 const VkShaderCreateInfo* pCreateInfo)
3888{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003889 if(pCreateInfo != nullptr)
3890 {
3891 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003892 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003893 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003894 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003895 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003896 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003897 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003898 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003899 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003900 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003901
3902 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003903}
3904
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003905bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003906 VkDevice device,
3907 VkShader* pShader,
3908 VkResult result)
3909{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003910
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003911 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003912 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003913 }
3914
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003915 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003916 {
3917 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003918 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3919 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003920 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003921
3922 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003923}
3924
3925VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3926 VkDevice device,
3927 const VkShaderCreateInfo* pCreateInfo,
3928 VkShader* pShader)
3929{
3930 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003931
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003932 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3933
3934 PostCreateShader(device, pShader, result);
3935
3936 return result;
3937}
3938
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003939bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003940 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003941 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003942{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003943 if(pCreateInfo != nullptr)
3944 {
3945 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003946 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003947 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003948 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003949 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003950 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003951 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003952 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003953 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003954 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003955
3956 return true;
3957}
3958
3959bool PostCreatePipelineCache(
3960 VkDevice device,
3961 VkPipelineCache* pPipelineCache,
3962 VkResult result)
3963{
3964
3965 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003966 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003967 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003968
3969 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003970 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003971 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06003972 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3973 return false;
3974 }
3975
3976 return true;
3977}
3978
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003979VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003980 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003981 const VkPipelineCacheCreateInfo* pCreateInfo,
3982 VkPipelineCache* pPipelineCache)
3983{
3984 PreCreatePipelineCache(device, pCreateInfo);
3985
3986 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3987
3988 PostCreatePipelineCache(device, pPipelineCache, result);
3989
3990 return result;
3991}
3992
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003993bool PostGetPipelineCacheSize(
3994 VkDevice device,
3995 VkPipelineCache pipelineCache)
3996{
3997
3998
3999 return true;
4000}
4001
4002VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4003 VkDevice device,
4004 VkPipelineCache pipelineCache)
4005{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004006 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004007
4008 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004009
4010 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004011}
4012
4013bool PostGetPipelineCacheData(
4014 VkDevice device,
4015 VkPipelineCache pipelineCache,
4016 void* pData,
4017 VkResult result)
4018{
4019
4020
4021 if(pData != nullptr)
4022 {
4023 }
4024
4025 if(result < VK_SUCCESS)
4026 {
4027 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4028 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4029 return false;
4030 }
4031
4032 return true;
4033}
4034
4035VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4036 VkDevice device,
4037 VkPipelineCache pipelineCache,
4038 void* pData)
4039{
4040 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4041
4042 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4043
4044 return result;
4045}
4046
4047bool PreMergePipelineCaches(
4048 VkDevice device,
4049 const VkPipelineCache* pSrcCaches)
4050{
4051 if(pSrcCaches != nullptr)
4052 {
4053 }
4054
4055 return true;
4056}
4057
4058bool PostMergePipelineCaches(
4059 VkDevice device,
4060 VkPipelineCache destCache,
4061 uint32_t srcCacheCount,
4062 VkResult result)
4063{
4064
4065
4066
4067 if(result < VK_SUCCESS)
4068 {
4069 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4070 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4071 return false;
4072 }
4073
4074 return true;
4075}
4076
4077VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4078 VkDevice device,
4079 VkPipelineCache destCache,
4080 uint32_t srcCacheCount,
4081 const VkPipelineCache* pSrcCaches)
4082{
4083 PreMergePipelineCaches(device, pSrcCaches);
4084
4085 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4086
4087 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4088
4089 return result;
4090}
4091
4092bool PreCreateGraphicsPipelines(
4093 VkDevice device,
4094 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4095{
4096 if(pCreateInfos != nullptr)
4097 {
4098 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4099 {
4100 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4101 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4102 return false;
4103 }
4104 if(pCreateInfos->pStages != nullptr)
4105 {
4106 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4107 {
4108 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4109 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4110 return false;
4111 }
4112 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4113 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4114 {
4115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4116 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4117 return false;
4118 }
4119 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4120 {
4121 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4122 {
4123 }
4124 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4125 {
4126 }
4127 }
4128 }
4129 if(pCreateInfos->pVertexInputState != nullptr)
4130 {
4131 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4132 {
4133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4134 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4135 return false;
4136 }
4137 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4138 {
4139 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4140 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4141 {
4142 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4143 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4144 return false;
4145 }
4146 }
4147 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4148 {
4149 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4150 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4151 {
4152 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4153 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4154 return false;
4155 }
4156 }
4157 }
4158 if(pCreateInfos->pInputAssemblyState != nullptr)
4159 {
4160 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4161 {
4162 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4163 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4164 return false;
4165 }
4166 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4167 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4168 {
4169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4170 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4171 return false;
4172 }
4173 }
4174 if(pCreateInfos->pTessellationState != nullptr)
4175 {
4176 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4177 {
4178 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4179 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4180 return false;
4181 }
4182 }
4183 if(pCreateInfos->pViewportState != nullptr)
4184 {
4185 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4186 {
4187 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4188 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4189 return false;
4190 }
4191 }
4192 if(pCreateInfos->pRasterState != nullptr)
4193 {
4194 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4195 {
4196 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4197 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4198 return false;
4199 }
4200 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4201 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4202 {
4203 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4204 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4205 return false;
4206 }
4207 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4208 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4209 {
4210 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4211 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4212 return false;
4213 }
4214 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4215 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4216 {
4217 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4218 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4219 return false;
4220 }
4221 }
4222 if(pCreateInfos->pMultisampleState != nullptr)
4223 {
4224 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4225 {
4226 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4227 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4228 return false;
4229 }
4230 }
4231 if(pCreateInfos->pDepthStencilState != nullptr)
4232 {
4233 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4234 {
4235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4236 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4237 return false;
4238 }
4239 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4240 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4241 {
4242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4243 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4244 return false;
4245 }
4246 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4247 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4248 {
4249 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4250 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4251 return false;
4252 }
4253 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4254 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4255 {
4256 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4257 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4258 return false;
4259 }
4260 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4261 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4262 {
4263 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4264 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4265 return false;
4266 }
4267 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4268 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4269 {
4270 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4271 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4272 return false;
4273 }
4274 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4275 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4276 {
4277 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4278 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4279 return false;
4280 }
4281 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4282 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4283 {
4284 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4285 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4286 return false;
4287 }
4288 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4289 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4290 {
4291 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4292 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4293 return false;
4294 }
4295 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4296 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4297 {
4298 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4299 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4300 return false;
4301 }
4302 }
4303 if(pCreateInfos->pColorBlendState != nullptr)
4304 {
4305 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4306 {
4307 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4308 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4309 return false;
4310 }
Michael Lentine6d033602015-10-06 14:55:54 -07004311 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4312 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004313 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4314 {
4315 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4316 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4317 return false;
4318 }
Michael Lentined833b882015-09-15 14:59:56 -05004319 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004320 {
4321 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4322 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4323 {
4324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4325 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4326 return false;
4327 }
4328 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4329 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4330 {
4331 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4332 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4333 return false;
4334 }
4335 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4336 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4337 {
4338 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4339 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4340 return false;
4341 }
4342 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4343 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4344 {
4345 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4346 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4347 return false;
4348 }
4349 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4350 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4351 {
4352 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4353 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4354 return false;
4355 }
4356 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4357 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4358 {
4359 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4360 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4361 return false;
4362 }
4363 }
4364 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004365 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4366 {
4367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4368 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4369 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004370 }
4371
4372 return true;
4373}
4374
4375bool PostCreateGraphicsPipelines(
4376 VkDevice device,
4377 VkPipelineCache pipelineCache,
4378 uint32_t count,
4379 VkPipeline* pPipelines,
4380 VkResult result)
4381{
4382
4383
4384
4385 if(pPipelines != nullptr)
4386 {
4387 }
4388
4389 if(result < VK_SUCCESS)
4390 {
4391 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4392 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4393 return false;
4394 }
4395
4396 return true;
4397}
4398
4399VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4400 VkDevice device,
4401 VkPipelineCache pipelineCache,
4402 uint32_t count,
4403 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4404 VkPipeline* pPipelines)
4405{
4406 PreCreateGraphicsPipelines(device, pCreateInfos);
4407
4408 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4409
4410 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4411
4412 return result;
4413}
4414
4415bool PreCreateComputePipelines(
4416 VkDevice device,
4417 const VkComputePipelineCreateInfo* pCreateInfos)
4418{
4419 if(pCreateInfos != nullptr)
4420 {
4421 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4422 {
4423 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4424 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4425 return false;
4426 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004427 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004428 {
4429 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4430 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4431 return false;
4432 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004433 if(pCreateInfos->stage.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4434 pCreateInfos->stage.stage > VK_SHADER_STAGE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004435 {
4436 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4437 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4438 return false;
4439 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004440 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004441 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004442 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004443 {
4444 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004445 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004446 {
4447 }
4448 }
4449 }
4450
4451 return true;
4452}
4453
4454bool PostCreateComputePipelines(
4455 VkDevice device,
4456 VkPipelineCache pipelineCache,
4457 uint32_t count,
4458 VkPipeline* pPipelines,
4459 VkResult result)
4460{
4461
4462
4463
4464 if(pPipelines != nullptr)
4465 {
4466 }
4467
4468 if(result < VK_SUCCESS)
4469 {
4470 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4471 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4472 return false;
4473 }
4474
4475 return true;
4476}
4477
4478VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4479 VkDevice device,
4480 VkPipelineCache pipelineCache,
4481 uint32_t count,
4482 const VkComputePipelineCreateInfo* pCreateInfos,
4483 VkPipeline* pPipelines)
4484{
4485 PreCreateComputePipelines(device, pCreateInfos);
4486
4487 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4488
4489 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4490
4491 return result;
4492}
4493
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004494bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004495 VkDevice device,
4496 const VkPipelineLayoutCreateInfo* pCreateInfo)
4497{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004498 if(pCreateInfo != nullptr)
4499 {
4500 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004501 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004502 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004503 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4504 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004505 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004506 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004507 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004508 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004509 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004510 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004511 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004512 }
4513
4514 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004515}
4516
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004517bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004518 VkDevice device,
4519 VkPipelineLayout* pPipelineLayout,
4520 VkResult result)
4521{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004522
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004523 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004524 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004525 }
4526
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004527 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004528 {
4529 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004530 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4531 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004532 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004533
4534 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004535}
4536
4537VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4538 VkDevice device,
4539 const VkPipelineLayoutCreateInfo* pCreateInfo,
4540 VkPipelineLayout* pPipelineLayout)
4541{
4542 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004543
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004544 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4545
4546 PostCreatePipelineLayout(device, pPipelineLayout, result);
4547
4548 return result;
4549}
4550
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004551bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004552 VkDevice device,
4553 const VkSamplerCreateInfo* pCreateInfo)
4554{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004555 if(pCreateInfo != nullptr)
4556 {
4557 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004558 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004560 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004561 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004562 }
4563 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4564 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4565 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004566 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004567 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004568 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004569 }
4570 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4571 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4572 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004574 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004575 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004576 }
4577 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4578 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4579 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004580 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004581 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004582 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004583 }
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004584 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_BEGIN_RANGE ||
4585 pCreateInfo->addressModeU > VK_TEX_ADDRESS_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004586 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004587 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004588 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004589 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004590 }
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004591 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_BEGIN_RANGE ||
4592 pCreateInfo->addressModeV > VK_TEX_ADDRESS_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004593 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004594 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004595 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004596 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004597 }
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004598 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_BEGIN_RANGE ||
4599 pCreateInfo->addressModeW > VK_TEX_ADDRESS_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004600 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004601 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004602 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004603 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004604 }
4605 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4606 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4607 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004608 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004609 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004610 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004611 }
4612 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4613 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4614 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004615 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004616 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004617 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004618 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004619 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004620
4621 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004622}
4623
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004624bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004625 VkDevice device,
4626 VkSampler* pSampler,
4627 VkResult result)
4628{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004629
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004630 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004631 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004632 }
4633
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004634 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004635 {
4636 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004637 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4638 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004639 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004640
4641 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004642}
4643
4644VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4645 VkDevice device,
4646 const VkSamplerCreateInfo* pCreateInfo,
4647 VkSampler* pSampler)
4648{
4649 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004650
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004651 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4652
4653 PostCreateSampler(device, pSampler, result);
4654
4655 return result;
4656}
4657
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004658bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004659 VkDevice device,
4660 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4661{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004662 if(pCreateInfo != nullptr)
4663 {
4664 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004665 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004666 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004667 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004668 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004669 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004670 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004671 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004672 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4673 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4674 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004675 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004676 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004677 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004678 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004679 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004680 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004681 }
4682 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004683 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004684
4685 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004686}
4687
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004688bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004689 VkDevice device,
4690 VkDescriptorSetLayout* pSetLayout,
4691 VkResult result)
4692{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004693
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004694 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004695 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004696 }
4697
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004698 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004699 {
4700 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004701 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4702 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004703 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004704
4705 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004706}
4707
4708VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4709 VkDevice device,
4710 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4711 VkDescriptorSetLayout* pSetLayout)
4712{
4713 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004714
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004715 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4716
4717 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4718
4719 return result;
4720}
4721
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004722bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004723 VkDevice device,
4724 const VkDescriptorPoolCreateInfo* pCreateInfo)
4725{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004726 if(pCreateInfo != nullptr)
4727 {
4728 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004729 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004730 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004731 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004732 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004733 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004734 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004735 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004736 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4737 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4738 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004739 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004740 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004741 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004742 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004743 }
4744 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004745
4746 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004747}
4748
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004749bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004750 VkDevice device,
4751 VkDescriptorPoolUsage poolUsage,
4752 uint32_t maxSets,
4753 VkDescriptorPool* pDescriptorPool,
4754 VkResult result)
4755{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004756
4757 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
4758 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
4759 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004760 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004761 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004762 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004763 }
4764
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004765 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004766
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004767 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004768 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004769 }
4770
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004771 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004772 {
4773 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4775 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004776 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004777
4778 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004779}
4780
4781VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4782 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004783 const VkDescriptorPoolCreateInfo* pCreateInfo,
4784 VkDescriptorPool* pDescriptorPool)
4785{
4786 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004787
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004788 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004789
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004790 PostCreateDescriptorPool(device, pCreateInfo->poolUsage, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004791
4792 return result;
4793}
4794
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004795bool PostResetDescriptorPool(
4796 VkDevice device,
4797 VkDescriptorPool descriptorPool,
4798 VkResult result)
4799{
4800
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004801
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004802 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004803 {
4804 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004805 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4806 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004807 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004808
4809 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004810}
4811
4812VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4813 VkDevice device,
4814 VkDescriptorPool descriptorPool)
4815{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004816 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
4817
4818 PostResetDescriptorPool(device, descriptorPool, result);
4819
4820 return result;
4821}
4822
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004823bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004824 VkDevice device,
4825 const VkDescriptorSetLayout* pSetLayouts)
4826{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004827 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004828 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004829 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004830
4831 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004832}
4833
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004834bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004835 VkDevice device,
4836 VkDescriptorPool descriptorPool,
4837 VkDescriptorSetUsage setUsage,
4838 uint32_t count,
4839 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004840 VkResult result)
4841{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004842
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004843
4844 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
4845 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
4846 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004848 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004849 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004850 }
4851
4852
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004853 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004854 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004855 }
4856
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004857 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004858 {
4859 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004860 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4861 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004862 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004863
4864 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004865}
4866
4867VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4868 VkDevice device,
4869 VkDescriptorPool descriptorPool,
4870 VkDescriptorSetUsage setUsage,
4871 uint32_t count,
4872 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004873 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004874{
4875 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004876
Cody Northropc8aa4a52015-08-03 12:47:29 -06004877 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004878
Cody Northropc8aa4a52015-08-03 12:47:29 -06004879 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004880
4881 return result;
4882}
4883
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004884bool PreFreeDescriptorSets(
4885 VkDevice device,
4886 const VkDescriptorSet* pDescriptorSets)
4887{
4888 if(pDescriptorSets != nullptr)
4889 {
4890 }
4891
4892 return true;
4893}
4894
4895bool PostFreeDescriptorSets(
4896 VkDevice device,
4897 VkDescriptorPool descriptorPool,
4898 uint32_t count,
4899 VkResult result)
4900{
4901
4902
4903
4904 if(result < VK_SUCCESS)
4905 {
4906 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4907 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4908 return false;
4909 }
4910
4911 return true;
4912}
4913
4914VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4915 VkDevice device,
4916 VkDescriptorPool descriptorPool,
4917 uint32_t count,
4918 const VkDescriptorSet* pDescriptorSets)
4919{
4920 PreFreeDescriptorSets(device, pDescriptorSets);
4921
4922 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4923
4924 PostFreeDescriptorSets(device, descriptorPool, count, result);
4925
4926 return result;
4927}
4928
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004929bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004930 VkDevice device,
4931 const VkWriteDescriptorSet* pDescriptorWrites,
4932 const VkCopyDescriptorSet* pDescriptorCopies)
4933{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004934 if(pDescriptorWrites != nullptr)
4935 {
4936 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004937 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004938 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004939 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004940 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004941 }
4942 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4943 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4944 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004945 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004946 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004947 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004948 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004949 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004950 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004951 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4952 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
4953 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004954 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004955 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004956 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004957 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004958 }
4959 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004960
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004961 if(pDescriptorCopies != nullptr)
4962 {
4963 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004964 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004965 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004966 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004967 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004968 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004969 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004970
4971 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004972}
4973
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004974VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004975 VkDevice device,
4976 uint32_t writeCount,
4977 const VkWriteDescriptorSet* pDescriptorWrites,
4978 uint32_t copyCount,
4979 const VkCopyDescriptorSet* pDescriptorCopies)
4980{
4981 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004982
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004983 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004984}
4985
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004986bool PreCreateFramebuffer(
4987 VkDevice device,
4988 const VkFramebufferCreateInfo* pCreateInfo)
4989{
4990 if(pCreateInfo != nullptr)
4991 {
4992 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4993 {
4994 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4995 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4996 return false;
4997 }
4998 if(pCreateInfo->pAttachments != nullptr)
4999 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005000 }
5001 }
5002
5003 return true;
5004}
5005
5006bool PostCreateFramebuffer(
5007 VkDevice device,
5008 VkFramebuffer* pFramebuffer,
5009 VkResult result)
5010{
5011
5012 if(pFramebuffer != nullptr)
5013 {
5014 }
5015
5016 if(result < VK_SUCCESS)
5017 {
5018 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
5019 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5020 return false;
5021 }
5022
5023 return true;
5024}
5025
5026VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
5027 VkDevice device,
5028 const VkFramebufferCreateInfo* pCreateInfo,
5029 VkFramebuffer* pFramebuffer)
5030{
5031 PreCreateFramebuffer(device, pCreateInfo);
5032
5033 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
5034
5035 PostCreateFramebuffer(device, pFramebuffer, result);
5036
5037 return result;
5038}
5039
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005040bool PreCreateRenderPass(
5041 VkDevice device,
5042 const VkRenderPassCreateInfo* pCreateInfo)
5043{
5044 if(pCreateInfo != nullptr)
5045 {
5046 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
5047 {
5048 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5049 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5050 return false;
5051 }
5052 if(pCreateInfo->pAttachments != nullptr)
5053 {
5054 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
5055 {
5056 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5057 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
5058 return false;
5059 }
5060 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5061 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
5062 {
5063 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5064 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
5065 return false;
5066 }
5067 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5068 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5069 {
5070 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5071 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
5072 return false;
5073 }
5074 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5075 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5076 {
5077 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5078 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
5079 return false;
5080 }
5081 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5082 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5083 {
5084 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5085 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
5086 return false;
5087 }
5088 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5089 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5090 {
5091 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5092 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
5093 return false;
5094 }
5095 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5096 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
5097 {
5098 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5099 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
5100 return false;
5101 }
5102 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5103 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
5104 {
5105 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5106 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
5107 return false;
5108 }
5109 }
5110 if(pCreateInfo->pSubpasses != nullptr)
5111 {
5112 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
5113 {
5114 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5115 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
5116 return false;
5117 }
5118 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5119 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5120 {
5121 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5122 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
5123 return false;
5124 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005125 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005126 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005127 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5128 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005129 {
5130 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005131 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005132 return false;
5133 }
5134 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005135 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005136 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005137 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5138 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005139 {
5140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005141 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005142 return false;
5143 }
5144 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005145 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005146 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005147 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5148 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005149 {
5150 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005151 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005152 return false;
5153 }
5154 }
5155 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5156 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
5157 {
5158 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5159 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
5160 return false;
5161 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005162 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005163 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005164 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5165 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005166 {
5167 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005168 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005169 return false;
5170 }
5171 }
5172 }
5173 if(pCreateInfo->pDependencies != nullptr)
5174 {
5175 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5176 {
5177 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5178 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5179 return false;
5180 }
5181 }
5182 }
5183
5184 return true;
5185}
5186
5187bool PostCreateRenderPass(
5188 VkDevice device,
5189 VkRenderPass* pRenderPass,
5190 VkResult result)
5191{
5192
5193 if(pRenderPass != nullptr)
5194 {
5195 }
5196
5197 if(result < VK_SUCCESS)
5198 {
5199 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5200 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5201 return false;
5202 }
5203
5204 return true;
5205}
5206
5207VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5208 VkDevice device,
5209 const VkRenderPassCreateInfo* pCreateInfo,
5210 VkRenderPass* pRenderPass)
5211{
5212 PreCreateRenderPass(device, pCreateInfo);
5213
5214 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5215
5216 PostCreateRenderPass(device, pRenderPass, result);
5217
5218 return result;
5219}
5220
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005221bool PostGetRenderAreaGranularity(
5222 VkDevice device,
5223 VkRenderPass renderPass,
5224 VkExtent2D* pGranularity,
5225 VkResult result)
5226{
5227
5228
5229 if(pGranularity != nullptr)
5230 {
5231 }
5232
5233 if(result < VK_SUCCESS)
5234 {
5235 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
5236 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5237 return false;
5238 }
5239
5240 return true;
5241}
5242
5243VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
5244 VkDevice device,
5245 VkRenderPass renderPass,
5246 VkExtent2D* pGranularity)
5247{
5248 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
5249
5250 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
5251
5252 return result;
5253}
5254
5255bool PreCreateCommandPool(
5256 VkDevice device,
5257 const VkCmdPoolCreateInfo* pCreateInfo)
5258{
5259 if(pCreateInfo != nullptr)
5260 {
5261 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5262 {
5263 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5264 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5265 return false;
5266 }
5267 }
5268
5269 return true;
5270}
5271
5272bool PostCreateCommandPool(
5273 VkDevice device,
5274 VkCmdPool* pCmdPool,
5275 VkResult result)
5276{
5277
5278 if(pCmdPool != nullptr)
5279 {
5280 }
5281
5282 if(result < VK_SUCCESS)
5283 {
5284 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5285 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5286 return false;
5287 }
5288
5289 return true;
5290}
5291
5292VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5293 VkDevice device,
5294 const VkCmdPoolCreateInfo* pCreateInfo,
5295 VkCmdPool* pCmdPool)
5296{
5297 PreCreateCommandPool(device, pCreateInfo);
5298
5299 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5300
5301 PostCreateCommandPool(device, pCmdPool, result);
5302
5303 return result;
5304}
5305
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005306bool PostResetCommandPool(
5307 VkDevice device,
5308 VkCmdPool cmdPool,
5309 VkCmdPoolResetFlags flags,
5310 VkResult result)
5311{
5312
5313
5314
5315 if(result < VK_SUCCESS)
5316 {
5317 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5318 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5319 return false;
5320 }
5321
5322 return true;
5323}
5324
5325VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5326 VkDevice device,
5327 VkCmdPool cmdPool,
5328 VkCmdPoolResetFlags flags)
5329{
5330 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5331
5332 PostResetCommandPool(device, cmdPool, flags, result);
5333
5334 return result;
5335}
5336
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005337bool PreCreateCommandBuffer(
5338 VkDevice device,
5339 const VkCmdBufferCreateInfo* pCreateInfo)
5340{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005341 if(pCreateInfo != nullptr)
5342 {
5343 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005344 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005345 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005346 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005347 return false;
5348 }
5349 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5350 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5351 {
5352 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005353 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005354 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005355 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005356 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005357
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005358 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005359}
5360
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005361bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005362 VkDevice device,
5363 VkCmdBuffer* pCmdBuffer,
5364 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005365{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005366
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005367 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005368 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005369 }
5370
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005371 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005372 {
5373 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005374 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5375 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005376 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005377
5378 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005379}
5380
5381VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
5382 VkDevice device,
5383 const VkCmdBufferCreateInfo* pCreateInfo,
5384 VkCmdBuffer* pCmdBuffer)
5385{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005386 PreCreateCommandBuffer(device, pCreateInfo);
5387
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005388 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
5389
5390 PostCreateCommandBuffer(device, pCmdBuffer, result);
5391
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005392 return result;
5393}
5394
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005395bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005396 VkCmdBuffer cmdBuffer,
5397 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005398{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005399 if(pBeginInfo != nullptr)
5400 {
5401 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005402 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005403 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005404 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005405 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005406 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005407 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005408
5409 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005410}
5411
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005412bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005413 VkCmdBuffer cmdBuffer,
5414 VkResult result)
5415{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005416
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005417 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005418 {
5419 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005420 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5421 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005422 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005423
5424 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005425}
5426
5427VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5428 VkCmdBuffer cmdBuffer,
5429 const VkCmdBufferBeginInfo* pBeginInfo)
5430{
5431 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005432
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005433 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5434
5435 PostBeginCommandBuffer(cmdBuffer, result);
5436
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005437 return result;
5438}
5439
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005440bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005441 VkCmdBuffer cmdBuffer,
5442 VkResult result)
5443{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005444
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005445 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005446 {
5447 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005448 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5449 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005450 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005451
5452 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005453}
5454
5455VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5456 VkCmdBuffer cmdBuffer)
5457{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005458 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5459
5460 PostEndCommandBuffer(cmdBuffer, result);
5461
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005462 return result;
5463}
5464
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005465bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005466 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005467 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005468 VkResult result)
5469{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005470
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005471
5472 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005473 {
5474 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005475 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5476 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005477 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005478
5479 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005480}
5481
5482VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005483 VkCmdBuffer cmdBuffer,
5484 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005485{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005486 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005487
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005488 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005489
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005490 return result;
5491}
5492
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005493bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005494 VkCmdBuffer cmdBuffer,
5495 VkPipelineBindPoint pipelineBindPoint,
5496 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005497{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005498
5499 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5500 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5501 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005502 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005503 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005504 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005505 }
5506
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005507
5508 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005509}
5510
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005511VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5512 VkCmdBuffer cmdBuffer,
5513 VkPipelineBindPoint pipelineBindPoint,
5514 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005515{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005516 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5517
5518 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5519}
5520
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005521VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005522{
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005523 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5524}
5525
5526VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5527{
5528 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529}
5530
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005531VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005532{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005533 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005534}
5535
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005536VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005537{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005538 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005539}
5540
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005541VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005542{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005543 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northropf5bd2252015-08-17 11:10:49 -06005544}
5545
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005546VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005547{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005548 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005549}
5550
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005551VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005552{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005553 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005554}
5555
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005556VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005557{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005558 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005559}
5560
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005561VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005562{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005563 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005564}
5565
5566bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005567 VkCmdBuffer cmdBuffer,
5568 const VkDescriptorSet* pDescriptorSets,
5569 const uint32_t* pDynamicOffsets)
5570{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005571 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005572 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005573 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005574
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005575 if(pDynamicOffsets != nullptr)
5576 {
5577 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005578
5579 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005580}
5581
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005582bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005583 VkCmdBuffer cmdBuffer,
5584 VkPipelineBindPoint pipelineBindPoint,
5585 VkPipelineLayout layout,
5586 uint32_t firstSet,
5587 uint32_t setCount,
5588 uint32_t dynamicOffsetCount)
5589{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005590
5591 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5592 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5593 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005594 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005595 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005596 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005597 }
5598
5599
5600
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005601
5602
5603 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005604}
5605
5606VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5607 VkCmdBuffer cmdBuffer,
5608 VkPipelineBindPoint pipelineBindPoint,
5609 VkPipelineLayout layout,
5610 uint32_t firstSet,
5611 uint32_t setCount,
5612 const VkDescriptorSet* pDescriptorSets,
5613 uint32_t dynamicOffsetCount,
5614 const uint32_t* pDynamicOffsets)
5615{
5616 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005617
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005618 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5619
5620 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5621}
5622
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005623bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005624 VkCmdBuffer cmdBuffer,
5625 VkBuffer buffer,
5626 VkDeviceSize offset,
5627 VkIndexType indexType)
5628{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005629
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005630
5631
5632 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5633 indexType > VK_INDEX_TYPE_END_RANGE)
5634 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005635 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005636 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005637 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005638 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005639
5640 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005641}
5642
5643VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5644 VkCmdBuffer cmdBuffer,
5645 VkBuffer buffer,
5646 VkDeviceSize offset,
5647 VkIndexType indexType)
5648{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005649 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5650
5651 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5652}
5653
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005654bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005655 VkCmdBuffer cmdBuffer,
5656 const VkBuffer* pBuffers,
5657 const VkDeviceSize* pOffsets)
5658{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005659 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005660 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005661 }
5662
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005663 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005664 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005665 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005666
5667 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005668}
5669
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005670bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005671 VkCmdBuffer cmdBuffer,
5672 uint32_t startBinding,
5673 uint32_t bindingCount)
5674{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005675
5676
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005677
5678 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005679}
5680
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06005681VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005682 VkCmdBuffer cmdBuffer,
5683 uint32_t startBinding,
5684 uint32_t bindingCount,
5685 const VkBuffer* pBuffers,
5686 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005687{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005688 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005689
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005690 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5691
5692 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005693}
5694
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005695bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005696 VkCmdBuffer cmdBuffer,
5697 uint32_t firstVertex,
5698 uint32_t vertexCount,
5699 uint32_t firstInstance,
5700 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005701{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005702
5703
5704
5705
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005706
5707 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005708}
5709
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005710VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5711 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005712 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005713 uint32_t instanceCount,
5714 uint32_t firstVertex,
5715 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005716{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005717 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005718
5719 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005720}
5721
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005722bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005723 VkCmdBuffer cmdBuffer,
5724 uint32_t firstIndex,
5725 uint32_t indexCount,
5726 int32_t vertexOffset,
5727 uint32_t firstInstance,
5728 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005729{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005730
5731
5732
5733
5734
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005735
5736 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005737}
5738
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005739VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5740 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005741 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005742 uint32_t instanceCount,
5743 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005744 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005745 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005746{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005747 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005748
5749 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5750}
5751
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005752bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005753 VkCmdBuffer cmdBuffer,
5754 VkBuffer buffer,
5755 VkDeviceSize offset,
5756 uint32_t count,
5757 uint32_t stride)
5758{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005759
5760
5761
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005762
5763
5764 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005765}
5766
5767VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5768 VkCmdBuffer cmdBuffer,
5769 VkBuffer buffer,
5770 VkDeviceSize offset,
5771 uint32_t count,
5772 uint32_t stride)
5773{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005774 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5775
5776 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5777}
5778
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005779bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005780 VkCmdBuffer cmdBuffer,
5781 VkBuffer buffer,
5782 VkDeviceSize offset,
5783 uint32_t count,
5784 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005785{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005786
5787
5788
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005789
5790
5791 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005792}
5793
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005794VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5795 VkCmdBuffer cmdBuffer,
5796 VkBuffer buffer,
5797 VkDeviceSize offset,
5798 uint32_t count,
5799 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005800{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005801 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5802
5803 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5804}
5805
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005806bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807 VkCmdBuffer cmdBuffer,
5808 uint32_t x,
5809 uint32_t y,
5810 uint32_t z)
5811{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005812
5813
5814
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005815
5816 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005817}
5818
5819VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5820 VkCmdBuffer cmdBuffer,
5821 uint32_t x,
5822 uint32_t y,
5823 uint32_t z)
5824{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005825 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5826
5827 PostCmdDispatch(cmdBuffer, x, y, z);
5828}
5829
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005830bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005831 VkCmdBuffer cmdBuffer,
5832 VkBuffer buffer,
5833 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005834{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005835
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005836
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005837
5838 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005839}
5840
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005841VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5842 VkCmdBuffer cmdBuffer,
5843 VkBuffer buffer,
5844 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005845{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005846 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5847
5848 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005849}
5850
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005851bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005852 VkCmdBuffer cmdBuffer,
5853 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005854{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005855 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005856 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005857 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005858
5859 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005860}
5861
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005862bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005863 VkCmdBuffer cmdBuffer,
5864 VkBuffer srcBuffer,
5865 VkBuffer destBuffer,
5866 uint32_t regionCount)
5867{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005868
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005869
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005870
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005871
5872 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005873}
5874
5875VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5876 VkCmdBuffer cmdBuffer,
5877 VkBuffer srcBuffer,
5878 VkBuffer destBuffer,
5879 uint32_t regionCount,
5880 const VkBufferCopy* pRegions)
5881{
5882 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005883
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005884 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5885
5886 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5887}
5888
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005889bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005890 VkCmdBuffer cmdBuffer,
5891 const VkImageCopy* pRegions)
5892{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005893 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005894 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005895 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5896 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5897 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005898 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005899 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005900 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005901 }
5902 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5903 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5904 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005905 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005906 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005907 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005908 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005909 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005910
5911 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005912}
5913
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005914bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005915 VkCmdBuffer cmdBuffer,
5916 VkImage srcImage,
5917 VkImageLayout srcImageLayout,
5918 VkImage destImage,
5919 VkImageLayout destImageLayout,
5920 uint32_t regionCount)
5921{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005922
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005923
5924 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5925 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5926 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005927 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005928 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005929 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005930 }
5931
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005932
5933 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5934 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5935 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005936 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005937 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005938 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005939 }
5940
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005941
5942 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005943}
5944
5945VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5946 VkCmdBuffer cmdBuffer,
5947 VkImage srcImage,
5948 VkImageLayout srcImageLayout,
5949 VkImage destImage,
5950 VkImageLayout destImageLayout,
5951 uint32_t regionCount,
5952 const VkImageCopy* pRegions)
5953{
5954 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005955
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005956 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5957
5958 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5959}
5960
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005961bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005962 VkCmdBuffer cmdBuffer,
5963 const VkImageBlit* pRegions)
5964{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005965 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005966 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005967 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5968 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5969 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005970 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005971 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005972 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005973 }
5974 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5975 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5976 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005977 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005978 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005979 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005980 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005981 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005982
5983 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005984}
5985
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005986bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005987 VkCmdBuffer cmdBuffer,
5988 VkImage srcImage,
5989 VkImageLayout srcImageLayout,
5990 VkImage destImage,
5991 VkImageLayout destImageLayout,
5992 uint32_t regionCount,
5993 VkTexFilter filter)
5994{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005995
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005996
5997 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5998 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5999 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006000 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006001 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006002 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006003 }
6004
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006005
6006 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6007 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6008 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006009 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006010 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006011 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006012 }
6013
6014
6015 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
6016 filter > VK_TEX_FILTER_END_RANGE)
6017 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006018 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006019 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006020 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006021 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006022
6023 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006024}
6025
6026VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
6027 VkCmdBuffer cmdBuffer,
6028 VkImage srcImage,
6029 VkImageLayout srcImageLayout,
6030 VkImage destImage,
6031 VkImageLayout destImageLayout,
6032 uint32_t regionCount,
6033 const VkImageBlit* pRegions,
6034 VkTexFilter filter)
6035{
6036 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006037
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006038 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
6039
6040 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
6041}
6042
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006043bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006044 VkCmdBuffer cmdBuffer,
6045 const VkBufferImageCopy* pRegions)
6046{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006047 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006048 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006049 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6050 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6051 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006052 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006053 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006054 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006055 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006056 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006057
6058 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006059}
6060
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006061bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006062 VkCmdBuffer cmdBuffer,
6063 VkBuffer srcBuffer,
6064 VkImage destImage,
6065 VkImageLayout destImageLayout,
6066 uint32_t regionCount)
6067{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006068
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006069
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006070
6071 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6072 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6073 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006074 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006075 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006076 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006077 }
6078
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006079
6080 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006081}
6082
6083VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
6084 VkCmdBuffer cmdBuffer,
6085 VkBuffer srcBuffer,
6086 VkImage destImage,
6087 VkImageLayout destImageLayout,
6088 uint32_t regionCount,
6089 const VkBufferImageCopy* pRegions)
6090{
6091 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006092
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006093 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
6094
6095 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
6096}
6097
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006098bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006099 VkCmdBuffer cmdBuffer,
6100 const VkBufferImageCopy* pRegions)
6101{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006102 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006103 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006104 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6105 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6106 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006107 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006108 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006109 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006110 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006111 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006112
6113 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006114}
6115
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006116bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006117 VkCmdBuffer cmdBuffer,
6118 VkImage srcImage,
6119 VkImageLayout srcImageLayout,
6120 VkBuffer destBuffer,
6121 uint32_t regionCount)
6122{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006123
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006124
6125 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6126 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6127 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006128 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006129 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006130 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006131 }
6132
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006133
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006134
6135 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006136}
6137
6138VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
6139 VkCmdBuffer cmdBuffer,
6140 VkImage srcImage,
6141 VkImageLayout srcImageLayout,
6142 VkBuffer destBuffer,
6143 uint32_t regionCount,
6144 const VkBufferImageCopy* pRegions)
6145{
6146 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006147
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006148 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
6149
6150 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
6151}
6152
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006153bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006154 VkCmdBuffer cmdBuffer,
6155 const uint32_t* pData)
6156{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006157 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006158 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006159 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006160
6161 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006162}
6163
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006164bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006165 VkCmdBuffer cmdBuffer,
6166 VkBuffer destBuffer,
6167 VkDeviceSize destOffset,
6168 VkDeviceSize dataSize)
6169{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006170
6171
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006172
6173
6174 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006175}
6176
6177VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6178 VkCmdBuffer cmdBuffer,
6179 VkBuffer destBuffer,
6180 VkDeviceSize destOffset,
6181 VkDeviceSize dataSize,
6182 const uint32_t* pData)
6183{
6184 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006185
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006186 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6187
6188 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6189}
6190
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006191bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006192 VkCmdBuffer cmdBuffer,
6193 VkBuffer destBuffer,
6194 VkDeviceSize destOffset,
6195 VkDeviceSize fillSize,
6196 uint32_t data)
6197{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006198
6199
6200
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006201
6202
6203 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006204}
6205
6206VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6207 VkCmdBuffer cmdBuffer,
6208 VkBuffer destBuffer,
6209 VkDeviceSize destOffset,
6210 VkDeviceSize fillSize,
6211 uint32_t data)
6212{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006213 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6214
6215 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6216}
6217
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006218bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006219 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12006220 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006221 const VkImageSubresourceRange* pRanges)
6222{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006223 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006224 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006225 }
6226
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006227 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006228 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006229 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006230 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006231
6232 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006233}
6234
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006235bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006236 VkCmdBuffer cmdBuffer,
6237 VkImage image,
6238 VkImageLayout imageLayout,
6239 uint32_t rangeCount)
6240{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006241
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006242
6243 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6244 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6245 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006246 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006247 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006248 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006249 }
6250
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006251
6252 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006253}
6254
6255VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6256 VkCmdBuffer cmdBuffer,
6257 VkImage image,
6258 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12006259 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006260 uint32_t rangeCount,
6261 const VkImageSubresourceRange* pRanges)
6262{
6263 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006264
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006265 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6266
6267 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6268}
6269
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006270bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006271 VkCmdBuffer cmdBuffer,
6272 const VkImageSubresourceRange* pRanges)
6273{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006274 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006275 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006276 /*
6277 * TODO: How do we validation pRanges->aspectMask?
6278 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6279 * VK_IMAGE_ASPECT_STENCIL_BIT.
6280 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006281 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006282
6283 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006284}
6285
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006286bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006287 VkCmdBuffer cmdBuffer,
6288 VkImage image,
6289 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006290 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006291 uint32_t rangeCount)
6292{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006293
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006294
6295 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6296 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6297 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006298 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006299 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006300 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006301 }
6302
6303
6304
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006305
6306 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006307}
6308
Chris Forbes2951d7d2015-06-22 17:21:59 +12006309VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006310 VkCmdBuffer cmdBuffer,
6311 VkImage image,
6312 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006313 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006314 uint32_t rangeCount,
6315 const VkImageSubresourceRange* pRanges)
6316{
Chris Forbes2951d7d2015-06-22 17:21:59 +12006317 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006318
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006319 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006320
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006321 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006322}
6323
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006324bool PreCmdClearAttachments(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006325 VkCmdBuffer cmdBuffer,
6326 const VkClearColorValue* pColor,
6327 const VkRect3D* pRects)
6328{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006329 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006330 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006331 }
6332
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006333 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006334 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006335 }
6336
6337 return true;
6338}
6339
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006340VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6341 VkCmdBuffer cmdBuffer,
6342 uint32_t attachmentCount,
6343 const VkClearAttachment* pAttachments,
6344 uint32_t rectCount,
6345 const VkRect3D* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006346{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006347 for (uint32_t i = 0; i < attachmentCount; i++) {
6348 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006349 }
6350
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006351 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006352}
6353
6354bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006355 VkCmdBuffer cmdBuffer,
6356 const VkImageResolve* pRegions)
6357{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006358 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006359 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006360 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6361 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6362 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006363 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006364 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006365 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006366 }
6367 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6368 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6369 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006370 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006371 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006372 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006373 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006374 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006375
6376 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006377}
6378
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006379bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006380 VkCmdBuffer cmdBuffer,
6381 VkImage srcImage,
6382 VkImageLayout srcImageLayout,
6383 VkImage destImage,
6384 VkImageLayout destImageLayout,
6385 uint32_t regionCount)
6386{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006387
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006388
6389 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6390 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6391 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006392 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006393 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006394 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006395 }
6396
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006397
6398 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6399 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6400 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006401 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006402 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006403 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006404 }
6405
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006406
6407 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006408}
6409
6410VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6411 VkCmdBuffer cmdBuffer,
6412 VkImage srcImage,
6413 VkImageLayout srcImageLayout,
6414 VkImage destImage,
6415 VkImageLayout destImageLayout,
6416 uint32_t regionCount,
6417 const VkImageResolve* pRegions)
6418{
6419 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006420
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006421 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6422
6423 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6424}
6425
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006426bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006427 VkCmdBuffer cmdBuffer,
6428 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006429 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006430{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006431
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006432
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006433
6434 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006435}
6436
6437VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6438 VkCmdBuffer cmdBuffer,
6439 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006440 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006441{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006442 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006443
Tony Barbourc2e987e2015-06-29 16:20:35 -06006444 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006445}
6446
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006447bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006448 VkCmdBuffer cmdBuffer,
6449 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006450 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006451{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006452
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006453
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006454
6455 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006456}
6457
6458VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6459 VkCmdBuffer cmdBuffer,
6460 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006461 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006462{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006463 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006464
Tony Barbourc2e987e2015-06-29 16:20:35 -06006465 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006466}
6467
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006468bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006469 VkCmdBuffer cmdBuffer,
6470 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006471 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006472{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006473 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006474 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006475 }
6476
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006477 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006478 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006479 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006480
6481 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006482}
6483
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006484bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006485 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006486 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006487 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006488 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006489 uint32_t memBarrierCount)
6490{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006491
Tony Barbourc2e987e2015-06-29 16:20:35 -06006492
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006493
6494
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006495
6496 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006497}
6498
6499VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6500 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006501 uint32_t eventCount,
6502 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006503 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006504 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006505 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006506 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006507{
6508 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006509
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006510 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006511
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006512 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006513}
6514
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006515bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006516 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006517 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006518{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006519 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006520 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006521 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006522
6523 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006524}
6525
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006526bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006527 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006528 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006529 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006530 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006531 uint32_t memBarrierCount)
6532{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006533
Tony Barbourc2e987e2015-06-29 16:20:35 -06006534
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006535
6536
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006537
6538 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006539}
6540
6541VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6542 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006543 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006544 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006545 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006546 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006547 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006548{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006549 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006550
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006551 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006552
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006553 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006554}
6555
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006556bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006557 VkCmdBuffer cmdBuffer,
6558 VkQueryPool queryPool,
6559 uint32_t slot,
6560 VkQueryControlFlags flags)
6561{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006562
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006563
6564
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006565
6566 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006567}
6568
6569VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6570 VkCmdBuffer cmdBuffer,
6571 VkQueryPool queryPool,
6572 uint32_t slot,
6573 VkQueryControlFlags flags)
6574{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006575 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6576
6577 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6578}
6579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006580bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006581 VkCmdBuffer cmdBuffer,
6582 VkQueryPool queryPool,
6583 uint32_t slot)
6584{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006585
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006586
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006587
6588 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006589}
6590
6591VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6592 VkCmdBuffer cmdBuffer,
6593 VkQueryPool queryPool,
6594 uint32_t slot)
6595{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006596 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6597
6598 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6599}
6600
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006601bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006602 VkCmdBuffer cmdBuffer,
6603 VkQueryPool queryPool,
6604 uint32_t startQuery,
6605 uint32_t queryCount)
6606{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006607
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006608
6609
6610
6611 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006612}
6613
6614VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6615 VkCmdBuffer cmdBuffer,
6616 VkQueryPool queryPool,
6617 uint32_t startQuery,
6618 uint32_t queryCount)
6619{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006620 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6621
6622 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6623}
6624
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006625bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006626 VkCmdBuffer cmdBuffer,
6627 VkTimestampType timestampType,
6628 VkBuffer destBuffer,
6629 VkDeviceSize destOffset)
6630{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006631
6632 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6633 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6634 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006635 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006636 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006637 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006638 }
6639
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006640
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006641
6642 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006643}
6644
6645VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6646 VkCmdBuffer cmdBuffer,
6647 VkTimestampType timestampType,
6648 VkBuffer destBuffer,
6649 VkDeviceSize destOffset)
6650{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006651 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6652
6653 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6654}
6655
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006656bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006657 VkCmdBuffer cmdBuffer,
6658 VkQueryPool queryPool,
6659 uint32_t startQuery,
6660 uint32_t queryCount,
6661 VkBuffer destBuffer,
6662 VkDeviceSize destOffset,
6663 VkDeviceSize destStride,
6664 VkQueryResultFlags flags)
6665{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006666
6667
6668
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006669
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006670
6671
6672
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006673
6674 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006675}
6676
Jeremy Hayescf469132015-04-17 10:36:53 -06006677VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006678 VkCmdBuffer cmdBuffer,
6679 VkQueryPool queryPool,
6680 uint32_t startQuery,
6681 uint32_t queryCount,
6682 VkBuffer destBuffer,
6683 VkDeviceSize destOffset,
6684 VkDeviceSize destStride,
6685 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006686{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006687 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
6688
6689 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006690}
6691
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006692bool PreCmdPushConstants(
6693 VkCmdBuffer cmdBuffer,
6694 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006695{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006696 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006697 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006698 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006699
6700 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006701}
6702
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006703bool PostCmdPushConstants(
6704 VkCmdBuffer cmdBuffer,
6705 VkPipelineLayout layout,
6706 VkShaderStageFlags stageFlags,
6707 uint32_t start,
6708 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006709{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006710
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006711
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006712
6713
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006714
6715 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006716}
6717
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006718VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6719 VkCmdBuffer cmdBuffer,
6720 VkPipelineLayout layout,
6721 VkShaderStageFlags stageFlags,
6722 uint32_t start,
6723 uint32_t length,
6724 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006725{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006726 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006727
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006728 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006730 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006731}
6732
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006733bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006734 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006735 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006736{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006737 if(pRenderPassBegin != nullptr)
6738 {
6739 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006740 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006741 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006742 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006743 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006744 }
Cody Northropc332eef2015-08-04 11:51:03 -06006745 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006746 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006747 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006748 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006749
6750 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006751}
6752
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006753bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006754 VkCmdBuffer cmdBuffer,
6755 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006756{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006757
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006758 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6759 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6760 {
6761 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6762 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6763 return false;
6764 }
6765
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006766 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006767}
6768
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006769VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6770 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006771 const VkRenderPassBeginInfo* pRenderPassBegin,
6772 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006773{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006774 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6775
Chia-I Wuc278df82015-07-07 11:50:03 +08006776 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006777
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006778 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006779}
6780
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006781bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08006782 VkCmdBuffer cmdBuffer,
6783 VkRenderPassContents contents)
6784{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006785
6786 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006787 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006788 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006789 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006790 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6791 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006792 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006793
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006794 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006795}
6796
6797VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6798 VkCmdBuffer cmdBuffer,
6799 VkRenderPassContents contents)
6800{
Chia-I Wuc278df82015-07-07 11:50:03 +08006801 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6802
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006803 PostCmdNextSubpass(cmdBuffer, contents);
6804}
6805
6806bool PostCmdEndRenderPass(
6807 VkCmdBuffer cmdBuffer)
6808{
6809
6810 return true;
6811}
6812
6813VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6814 VkCmdBuffer cmdBuffer)
6815{
6816 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6817
6818 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006819}
6820
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006821bool PreCmdExecuteCommands(
6822 VkCmdBuffer cmdBuffer,
6823 const VkCmdBuffer* pCmdBuffers)
6824{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006825 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006826 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006827 }
6828
6829 return true;
6830}
6831
6832bool PostCmdExecuteCommands(
6833 VkCmdBuffer cmdBuffer,
6834 uint32_t cmdBuffersCount)
6835{
6836
6837
6838 return true;
6839}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006840
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006841VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006842 VkCmdBuffer cmdBuffer,
6843 uint32_t cmdBuffersCount,
6844 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006845{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006846 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6847
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006848 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6849
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006850 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006851}
6852
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006853VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006854{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006855 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006856 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006857 }
6858
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006859 /* loader uses this to force layer initialization; device object is wrapped */
6860 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006861 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006862 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006863 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006864
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006865 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006866 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006867 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006868 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006869 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006870 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006871 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006872 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006873 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006874 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006875 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006876 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006877 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006878 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006879 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006880 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006881 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006882 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006883 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006884 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006885 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006886 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006887 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006888 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006889 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006890 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006891 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006892 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006893 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006894 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006895 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006896 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006897 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006898 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006899 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006900 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006901 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006902 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006903 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006904 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006905 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006906 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006907 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006908 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006909 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006910 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006911 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006912 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006913 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006914 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006915 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006916 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006917 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006918 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006919 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006920 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006921 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006922 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine6715e522015-09-15 14:59:14 -05006923 if (!strcmp(funcName, "vkCreateShaderModule"))
6924 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006925 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006926 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006927 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006928 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006929 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006930 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006931 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006932 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006933 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006934 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006935 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006936 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006937 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006938 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006939 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006940 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006941 if (!strcmp(funcName, "vkCmdSetViewport"))
6942 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006943 if (!strcmp(funcName, "vkCmdSetScissor"))
6944 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006945 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6946 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6947 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6948 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6949 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6950 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6951 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6952 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6953 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6954 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6955 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6956 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6957 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6958 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006959 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006960 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006961 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006962 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006963 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006964 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006965 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006966 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006967 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006968 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006969 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006970 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006971 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006972 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006973 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006974 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006975 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006976 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006977 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006978 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006979 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006980 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006981 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006982 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006983 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006984 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006985 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006986 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006987 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006988 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006989 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006990 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006991 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006992 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006993 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006994 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006995 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006996 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006997 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006998 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006999 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007000 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007001 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007002 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007003 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007004 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007005 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007006 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007007 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007008 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007009 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007010 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007011 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007012 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007013 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007014 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007015 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007016 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007017 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007018 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007019 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007020 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007021 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007022 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007023 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007024 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007025 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007026 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007027 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007028 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08007029 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007030 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06007031
Jon Ashburn6f8cd632015-06-01 09:37:38 -06007032 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007033 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007034 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007035 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007036 }
7037}
7038
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007039VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007040{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007041 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007042 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007043 }
7044
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007045 /* loader uses this to force layer initialization; instance object is wrapped */
7046 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007047 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007048 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007049 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007050
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007051 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007052 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007053 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007054 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007055 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007056 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007057 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007058 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007059 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007060 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06007061 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007062 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06007063 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
7064 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
7065 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
7066 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
7067 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
7068 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
7069 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
7070 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06007071
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007072 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007073 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007074 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06007075 return fptr;
7076
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007077 {
7078 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
7079 return NULL;
7080 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
7081 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007082}