blob: 4595325c4af0d909b7cfefd4d1b03d50dc70a45a [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 |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600516 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
517 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
518 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
519 VK_MEMORY_PROPERTY_DEVICE_ONLY);
520 if(enumerator & (~allFlags))
521 {
522 return false;
523 }
524
525 return true;
526}
527
528static
529std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
530{
531 if(!ValidateEnumerator(enumerator))
532 {
533 return "unrecognized enumerator";
534 }
535
536 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600537 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
538 {
539 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
540 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600541 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
542 {
543 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
544 }
545 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
546 {
547 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
548 }
549 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
550 {
551 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
552 }
553 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
554 {
555 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
556 }
557
558 std::string enumeratorString;
559 for(auto const& string : strings)
560 {
561 enumeratorString += string;
562
563 if(string != strings.back())
564 {
565 enumeratorString += '|';
566 }
567 }
568
569 return enumeratorString;
570}
571
572static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600573bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600574{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600575 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600576 if(enumerator & (~allFlags))
577 {
578 return false;
579 }
580
581 return true;
582}
583
584static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600585std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600586{
587 if(!ValidateEnumerator(enumerator))
588 {
589 return "unrecognized enumerator";
590 }
591
592 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600593 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600594 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600595 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600596 }
597
598 std::string enumeratorString;
599 for(auto const& string : strings)
600 {
601 enumeratorString += string;
602
603 if(string != strings.back())
604 {
605 enumeratorString += '|';
606 }
607 }
608
609 return enumeratorString;
610}
611
612static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600613bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
614{
615 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
616 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
617 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
618 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600619 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600620 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600621 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600622
623 return true;
624}
625
626static
627std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
628{
629 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600630 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600631 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600632 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600633
634 std::vector<std::string> strings;
635 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600636 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600637 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600638 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600639 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600640 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600641 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600642 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600643 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600644 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600645 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600646 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600647
648 std::string enumeratorString;
649 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600650 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600651 enumeratorString += string;
652
653 if(string != strings.back())
654 {
655 enumeratorString += '|';
656 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600657 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600658
659 return enumeratorString;
660}
661
662static
663bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
664{
665 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
666 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600667 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600668 return false;
669 }
670
671 return true;
672}
673
674static
675std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
676{
677 if(!ValidateEnumerator(enumerator))
678 {
679 return "unrecognized enumerator";
680 }
681
682 std::vector<std::string> strings;
683 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
684 {
685 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
686 }
687
688 std::string enumeratorString;
689 for(auto const& string : strings)
690 {
691 enumeratorString += string;
692
693 if(string != strings.back())
694 {
695 enumeratorString += '|';
696 }
697 }
698
699 return enumeratorString;
700}
701
702static
703bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
704{
705 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
706 if(enumerator & (~allFlags))
707 {
708 return false;
709 }
710
711 return true;
712}
713
714static
715std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
716{
717 if(!ValidateEnumerator(enumerator))
718 {
719 return "unrecognized enumerator";
720 }
721
722 std::vector<std::string> strings;
723 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
724 {
725 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
726 }
727
728 std::string enumeratorString;
729 for(auto const& string : strings)
730 {
731 enumeratorString += string;
732
733 if(string != strings.back())
734 {
735 enumeratorString += '|';
736 }
737 }
738
739 return enumeratorString;
740}
741
742static
743bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
744{
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600745 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
749 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
751 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
752 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
753 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
754 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
755 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600756 if(enumerator & (~allFlags))
757 {
758 return false;
759 }
760
761 return true;
762}
763
764static
765std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
766{
767 if(!ValidateEnumerator(enumerator))
768 {
769 return "unrecognized enumerator";
770 }
771
772 std::vector<std::string> strings;
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600773 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600774 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600775 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600776 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600777 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600778 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600779 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600780 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600781 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600782 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600783 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600784 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600785 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600786 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600787 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600788 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600789 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600790 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600791 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600792 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600793 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600794 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600795 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600796 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600797 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600798 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600799 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600800 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600801 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600802 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600803 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600804 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600805 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600806 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600807 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600808 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600809 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600810 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600811 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600812 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600813 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600814 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600815 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600816 }
817
818 std::string enumeratorString;
819 for(auto const& string : strings)
820 {
821 enumeratorString += string;
822
823 if(string != strings.back())
824 {
825 enumeratorString += '|';
826 }
827 }
828
829 return enumeratorString;
830}
831
832static
833bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
834{
835 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
836 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
837 VK_QUERY_RESULT_WAIT_BIT |
838 VK_QUERY_RESULT_64_BIT |
839 VK_QUERY_RESULT_DEFAULT);
840 if(enumerator & (~allFlags))
841 {
842 return false;
843 }
844
845 return true;
846}
847
848static
849std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
850{
851 if(!ValidateEnumerator(enumerator))
852 {
853 return "unrecognized enumerator";
854 }
855
856 std::vector<std::string> strings;
857 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
858 {
859 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
860 }
861 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
862 {
863 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
864 }
865 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
866 {
867 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
868 }
869 if(enumerator & VK_QUERY_RESULT_64_BIT)
870 {
871 strings.push_back("VK_QUERY_RESULT_64_BIT");
872 }
873 if(enumerator & VK_QUERY_RESULT_DEFAULT)
874 {
875 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600876 }
877
878 std::string enumeratorString;
879 for(auto const& string : strings)
880 {
881 enumeratorString += string;
882
883 if(string != strings.back())
884 {
885 enumeratorString += '|';
886 }
887 }
888
889 return enumeratorString;
890}
891
892static
893bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
894{
895 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
896 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
897 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
898 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
899 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
900 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
901 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
902 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600903 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600904 if(enumerator & (~allFlags))
905 {
906 return false;
907 }
908
909 return true;
910}
911
912static
913std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
914{
915 if(!ValidateEnumerator(enumerator))
916 {
917 return "unrecognized enumerator";
918 }
919
920 std::vector<std::string> strings;
921 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
922 {
923 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
924 }
925 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
926 {
927 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
928 }
929 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
930 {
931 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
932 }
933 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
934 {
935 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
936 }
937 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
938 {
939 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
940 }
941 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
942 {
943 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
944 }
945 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
946 {
947 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
948 }
949 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
950 {
951 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
952 }
953 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
954 {
955 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
956 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600957
958 std::string enumeratorString;
959 for(auto const& string : strings)
960 {
961 enumeratorString += string;
962
963 if(string != strings.back())
964 {
965 enumeratorString += '|';
966 }
967 }
968
969 return enumeratorString;
970}
971
972static
973bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
974{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600975 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
976 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600977 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600978 if(enumerator & (~allFlags))
979 {
980 return false;
981 }
982
983 return true;
984}
985
986static
987std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
988{
989 if(!ValidateEnumerator(enumerator))
990 {
991 return "unrecognized enumerator";
992 }
993
994 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600995 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
996 {
997 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
998 }
999 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1000 {
1001 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1002 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001003 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001004 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001005 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001006 }
1007
1008 std::string enumeratorString;
1009 for(auto const& string : strings)
1010 {
1011 enumeratorString += string;
1012
1013 if(string != strings.back())
1014 {
1015 enumeratorString += '|';
1016 }
1017 }
1018
1019 return enumeratorString;
1020}
1021
1022static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001023bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1024{
1025 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001026 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1027 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001028 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001029 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001030 if(enumerator & (~allFlags))
1031 {
1032 return false;
1033 }
1034
1035 return true;
1036}
1037
1038static
1039std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1040{
1041 if(!ValidateEnumerator(enumerator))
1042 {
1043 return "unrecognized enumerator";
1044 }
1045
1046 std::vector<std::string> strings;
1047 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1048 {
1049 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1050 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001051 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1052 {
1053 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1054 }
1055 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1056 {
1057 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1058 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001059 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1060 {
1061 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1062 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001063 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001064 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001065 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001066 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001067
1068 std::string enumeratorString;
1069 for(auto const& string : strings)
1070 {
1071 enumeratorString += string;
1072
1073 if(string != strings.back())
1074 {
1075 enumeratorString += '|';
1076 }
1077 }
1078
1079 return enumeratorString;
1080}
1081
1082static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001083bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001084{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001085 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1086 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001087 if(enumerator & (~allFlags))
1088 {
1089 return false;
1090 }
1091
1092 return true;
1093}
1094
1095static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001096std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001097{
1098 if(!ValidateEnumerator(enumerator))
1099 {
1100 return "unrecognized enumerator";
1101 }
1102
1103 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001104 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001105 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001106 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001107 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001108 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001109 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001110 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001111 }
1112
1113 std::string enumeratorString;
1114 for(auto const& string : strings)
1115 {
1116 enumeratorString += string;
1117
1118 if(string != strings.back())
1119 {
1120 enumeratorString += '|';
1121 }
1122 }
1123
1124 return enumeratorString;
1125}
1126
1127static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001128bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1129{
1130 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1131 VK_CHANNEL_B_BIT |
1132 VK_CHANNEL_G_BIT |
1133 VK_CHANNEL_R_BIT);
1134 if(enumerator & (~allFlags))
1135 {
1136 return false;
1137 }
1138
1139 return true;
1140}
1141
1142static
1143std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1144{
1145 if(!ValidateEnumerator(enumerator))
1146 {
1147 return "unrecognized enumerator";
1148 }
1149
1150 std::vector<std::string> strings;
1151 if(enumerator & VK_CHANNEL_A_BIT)
1152 {
1153 strings.push_back("VK_CHANNEL_A_BIT");
1154 }
1155 if(enumerator & VK_CHANNEL_B_BIT)
1156 {
1157 strings.push_back("VK_CHANNEL_B_BIT");
1158 }
1159 if(enumerator & VK_CHANNEL_G_BIT)
1160 {
1161 strings.push_back("VK_CHANNEL_G_BIT");
1162 }
1163 if(enumerator & VK_CHANNEL_R_BIT)
1164 {
1165 strings.push_back("VK_CHANNEL_R_BIT");
1166 }
1167
1168 std::string enumeratorString;
1169 for(auto const& string : strings)
1170 {
1171 enumeratorString += string;
1172
1173 if(string != strings.back())
1174 {
1175 enumeratorString += '|';
1176 }
1177 }
1178
1179 return enumeratorString;
1180}
1181
1182static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001183bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001184{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001185 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1186 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1187 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001188 if(enumerator & (~allFlags))
1189 {
1190 return false;
1191 }
1192
1193 return true;
1194}
1195
1196static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001197std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001198{
1199 if(!ValidateEnumerator(enumerator))
1200 {
1201 return "unrecognized enumerator";
1202 }
1203
1204 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001205 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001206 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001207 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1208 }
1209 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1210 {
1211 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1212 }
1213 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1214 {
1215 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001216 }
1217
1218 std::string enumeratorString;
1219 for(auto const& string : strings)
1220 {
1221 enumeratorString += string;
1222
1223 if(string != strings.back())
1224 {
1225 enumeratorString += '|';
1226 }
1227 }
1228
1229 return enumeratorString;
1230}
1231
1232static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001233bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001234{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001235 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1236 VK_SHADER_STAGE_FRAGMENT_BIT |
1237 VK_SHADER_STAGE_GEOMETRY_BIT |
1238 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001239 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1240 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001241 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001242 if(enumerator & (~allFlags))
1243 {
1244 return false;
1245 }
1246
1247 return true;
1248}
1249
1250static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001251std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001252{
1253 if(!ValidateEnumerator(enumerator))
1254 {
1255 return "unrecognized enumerator";
1256 }
1257
1258 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001259 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001260 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001261 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001262 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001263 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001264 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001265 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001266 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001267 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001268 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001269 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1270 }
1271 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1272 {
1273 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1274 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001275 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001276 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001277 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001278 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001279 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001280 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001281 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001282 }
1283 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1284 {
1285 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001286 }
1287
1288 std::string enumeratorString;
1289 for(auto const& string : strings)
1290 {
1291 enumeratorString += string;
1292
1293 if(string != strings.back())
1294 {
1295 enumeratorString += '|';
1296 }
1297 }
1298
1299 return enumeratorString;
1300}
1301
1302static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001303bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001304{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001305 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1306 VK_PIPELINE_STAGE_HOST_BIT |
1307 VK_PIPELINE_STAGE_TRANSFER_BIT |
1308 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1309 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1310 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001311 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001312 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001313 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1314 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1315 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001316 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001317 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1318 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1319 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1320 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001321 if(enumerator & (~allFlags))
1322 {
1323 return false;
1324 }
1325
1326 return true;
1327}
1328
1329static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001330std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001331{
1332 if(!ValidateEnumerator(enumerator))
1333 {
1334 return "unrecognized enumerator";
1335 }
1336
1337 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001338 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001339 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001340 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001341 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001342 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001343 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001344 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001345 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001346 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001347 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001348 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001349 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001350 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001351 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001352 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001353 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001354 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001355 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001356 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001357 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001358 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001359 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001360 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001361 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001362 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001363 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001364 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001365 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001366 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001367 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001368 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001369 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001370 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001371 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001372 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001373 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001374 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001375 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001376 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1377 }
1378 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1379 {
1380 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1381 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001382 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001383 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001384 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001385 }
1386 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1387 {
1388 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1389 }
1390 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1391 {
1392 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1393 }
1394 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1395 {
1396 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1397 }
1398 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1399 {
1400 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001401 }
1402
1403 std::string enumeratorString;
1404 for(auto const& string : strings)
1405 {
1406 enumeratorString += string;
1407
1408 if(string != strings.back())
1409 {
1410 enumeratorString += '|';
1411 }
1412 }
1413
1414 return enumeratorString;
1415}
1416
1417static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001418bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001419{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001420 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1421 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1422 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1423 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1424 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001425 if(enumerator & (~allFlags))
1426 {
1427 return false;
1428 }
1429
1430 return true;
1431}
1432
1433static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001434std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001435{
1436 if(!ValidateEnumerator(enumerator))
1437 {
1438 return "unrecognized enumerator";
1439 }
1440
1441 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001442 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001443 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001444 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001445 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001446 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001447 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001448 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001449 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001450 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001451 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001452 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1453 }
1454 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1455 {
1456 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1457 }
1458 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1459 {
1460 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001461 }
1462
1463 std::string enumeratorString;
1464 for(auto const& string : strings)
1465 {
1466 enumeratorString += string;
1467
1468 if(string != strings.back())
1469 {
1470 enumeratorString += '|';
1471 }
1472 }
1473
1474 return enumeratorString;
1475}
1476
1477static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001478bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001479{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001480 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1481 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1482 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1483 VK_MEMORY_INPUT_SHADER_READ_BIT |
1484 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1485 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1486 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1487 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1488 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1489 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001490 if(enumerator & (~allFlags))
1491 {
1492 return false;
1493 }
1494
1495 return true;
1496}
1497
1498static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001499std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001500{
1501 if(!ValidateEnumerator(enumerator))
1502 {
1503 return "unrecognized enumerator";
1504 }
1505
1506 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001507 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001508 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001509 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1510 }
1511 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1512 {
1513 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1514 }
1515 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1516 {
1517 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1518 }
1519 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1520 {
1521 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1522 }
1523 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1524 {
1525 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1526 }
1527 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1528 {
1529 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1530 }
1531 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1532 {
1533 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1534 }
1535 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1536 {
1537 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1538 }
1539 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1540 {
1541 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1542 }
1543 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1544 {
1545 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001546 }
1547
1548 std::string enumeratorString;
1549 for(auto const& string : strings)
1550 {
1551 enumeratorString += string;
1552
1553 if(string != strings.back())
1554 {
1555 enumeratorString += '|';
1556 }
1557 }
1558
1559 return enumeratorString;
1560}
1561
1562static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001563bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001564{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001565 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1566 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001567 if(enumerator & (~allFlags))
1568 {
1569 return false;
1570 }
1571
1572 return true;
1573}
1574
1575static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001576std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001577{
1578 if(!ValidateEnumerator(enumerator))
1579 {
1580 return "unrecognized enumerator";
1581 }
1582
1583 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001584 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001585 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001586 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001587 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001588 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001589 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001590 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001591 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001592
1593 std::string enumeratorString;
1594 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001595 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001596 enumeratorString += string;
1597
1598 if(string != strings.back())
1599 {
1600 enumeratorString += '|';
1601 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001602 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001603
1604 return enumeratorString;
1605}
1606
1607static
1608bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1609{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001610 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001611 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001612 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001613 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001614 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001615
1616 return true;
1617}
1618
1619static
1620std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1621{
1622 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001623 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001624 return "unrecognized enumerator";
1625 }
1626
1627 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001628 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001629 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001630 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001631 }
1632
1633 std::string enumeratorString;
1634 for(auto const& string : strings)
1635 {
1636 enumeratorString += string;
1637
1638 if(string != strings.back())
1639 {
1640 enumeratorString += '|';
1641 }
1642 }
1643
1644 return enumeratorString;
1645}
1646
1647static
1648bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1649{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001650 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1651 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001652 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1653 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1654 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1655 if(enumerator & (~allFlags))
1656 {
1657 return false;
1658 }
1659
1660 return true;
1661}
1662
1663static
1664std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1665{
1666 if(!ValidateEnumerator(enumerator))
1667 {
1668 return "unrecognized enumerator";
1669 }
1670
1671 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001672 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1673 {
1674 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1675 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001676 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1677 {
1678 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1679 }
1680 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1681 {
1682 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1683 }
1684 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1685 {
1686 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1687 }
1688 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1689 {
1690 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1691 }
1692
1693 std::string enumeratorString;
1694 for(auto const& string : strings)
1695 {
1696 enumeratorString += string;
1697
1698 if(string != strings.back())
1699 {
1700 enumeratorString += '|';
1701 }
1702 }
1703
1704 return enumeratorString;
1705}
1706
1707static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001708bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001709{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001710 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001711 if(enumerator & (~allFlags))
1712 {
1713 return false;
1714 }
1715
1716 return true;
1717}
1718
1719static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001720std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001721{
1722 if(!ValidateEnumerator(enumerator))
1723 {
1724 return "unrecognized enumerator";
1725 }
1726
1727 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001728 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001729 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001730 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001731 }
1732
1733 std::string enumeratorString;
1734 for(auto const& string : strings)
1735 {
1736 enumeratorString += string;
1737
1738 if(string != strings.back())
1739 {
1740 enumeratorString += '|';
1741 }
1742 }
1743
1744 return enumeratorString;
1745}
1746
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001747static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001748bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001749{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001750 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1751 VK_IMAGE_ASPECT_STENCIL_BIT |
1752 VK_IMAGE_ASPECT_DEPTH_BIT |
1753 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001754 if(enumerator & (~allFlags))
1755 {
1756 return false;
1757 }
1758
1759 return true;
1760}
1761
1762static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001763std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001764{
1765 if(!ValidateEnumerator(enumerator))
1766 {
1767 return "unrecognized enumerator";
1768 }
1769
1770 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001771 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001772 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001773 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1774 }
1775 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1776 {
1777 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1778 }
1779 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1780 {
1781 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1782 }
1783 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1784 {
1785 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1786 }
1787
1788 std::string enumeratorString;
1789 for(auto const& string : strings)
1790 {
1791 enumeratorString += string;
1792
1793 if(string != strings.back())
1794 {
1795 enumeratorString += '|';
1796 }
1797 }
1798
1799 return enumeratorString;
1800}
1801
1802static
1803bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1804{
1805 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1806 if(enumerator & (~allFlags))
1807 {
1808 return false;
1809 }
1810
1811 return true;
1812}
1813
1814static
1815std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1816{
1817 if(!ValidateEnumerator(enumerator))
1818 {
1819 return "unrecognized enumerator";
1820 }
1821
1822 std::vector<std::string> strings;
1823 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1824 {
1825 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001826 }
1827
1828 std::string enumeratorString;
1829 for(auto const& string : strings)
1830 {
1831 enumeratorString += string;
1832
1833 if(string != strings.back())
1834 {
1835 enumeratorString += '|';
1836 }
1837 }
1838
1839 return enumeratorString;
1840}
1841
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001842VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1843 const VkInstanceCreateInfo* pCreateInfo,
1844 VkInstance* pInstance)
1845{
1846 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1847 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1848
1849 if (result == VK_SUCCESS) {
1850 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1851 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001852 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001853
1854 InitParamChecker(data);
1855 }
1856
1857 return result;
1858}
1859
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001860VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001861 VkInstance instance)
1862{
1863 // Grab the key before the instance is destroyed.
1864 dispatch_key key = get_dispatch_key(instance);
1865 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001866 pTable->DestroyInstance(instance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001867
1868 // Clean up logging callback, if any
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001869 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1870 while (my_data->logging_callback.size() > 0) {
1871 VkDbgMsgCallback callback = my_data->logging_callback.back();
1872 layer_destroy_msg_callback(my_data->report_data, callback);
1873 my_data->logging_callback.pop_back();
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001874 }
1875
1876 layer_debug_report_destroy_instance(mid(instance));
1877 layer_data_map.erase(pTable);
1878
1879 pc_instance_table_map.erase(key);
1880 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001881}
1882
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001883bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001884 VkInstance instance,
1885 uint32_t* pPhysicalDeviceCount,
1886 VkPhysicalDevice* pPhysicalDevices,
1887 VkResult result)
1888{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001889
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001890 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001891 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001892 }
1893
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001894 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001895 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001896 }
1897
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001898 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001899 {
1900 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001901 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1902 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001903 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001904
1905 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001906}
1907
1908VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1909 VkInstance instance,
1910 uint32_t* pPhysicalDeviceCount,
1911 VkPhysicalDevice* pPhysicalDevices)
1912{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001913 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1914
1915 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1916
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001917 return result;
1918}
1919
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001920bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001921 VkPhysicalDevice physicalDevice,
1922 VkPhysicalDeviceFeatures* pFeatures,
1923 VkResult result)
1924{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001925
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001926 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001927 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001928 }
1929
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001930 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001931 {
1932 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001933 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1934 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001935 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001936
1937 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001938}
1939
1940VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
1941 VkPhysicalDevice physicalDevice,
1942 VkPhysicalDeviceFeatures* pFeatures)
1943{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001944 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1945
1946 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
1947
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001948 return result;
1949}
1950
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001951bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001952 VkPhysicalDevice physicalDevice,
1953 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001954 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001955 VkResult result)
1956{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001957
1958 if(format < VK_FORMAT_BEGIN_RANGE ||
1959 format > VK_FORMAT_END_RANGE)
1960 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001961 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001962 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001963 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001964 }
1965
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001966 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001967 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001968 }
1969
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001970 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001971 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001972 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001973 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1974 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001975 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001976
1977 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001978}
1979
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001980VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001981 VkPhysicalDevice physicalDevice,
1982 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001983 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001984{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001985 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001986
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001987 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
1988
1989 return result;
1990}
1991
1992bool PostGetPhysicalDeviceImageFormatProperties(
1993 VkPhysicalDevice physicalDevice,
1994 VkFormat format,
1995 VkImageType type,
1996 VkImageTiling tiling,
1997 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001998 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001999 VkImageFormatProperties* pImageFormatProperties,
2000 VkResult result)
2001{
2002
2003 if(format < VK_FORMAT_BEGIN_RANGE ||
2004 format > VK_FORMAT_END_RANGE)
2005 {
2006 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2007 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2008 return false;
2009 }
2010
2011 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2012 type > VK_IMAGE_TYPE_END_RANGE)
2013 {
2014 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2015 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2016 return false;
2017 }
2018
2019 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2020 tiling > VK_IMAGE_TILING_END_RANGE)
2021 {
2022 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2023 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2024 return false;
2025 }
2026
2027
2028 if(pImageFormatProperties != nullptr)
2029 {
2030 }
2031
2032 if(result < VK_SUCCESS)
2033 {
2034 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2035 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2036 return false;
2037 }
2038
2039 return true;
2040}
2041
2042VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2043 VkPhysicalDevice physicalDevice,
2044 VkFormat format,
2045 VkImageType type,
2046 VkImageTiling tiling,
2047 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002048 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002049 VkImageFormatProperties* pImageFormatProperties)
2050{
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002051 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 -06002052
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002053 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002054
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002055 return result;
2056}
2057
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002058bool PostGetPhysicalDeviceProperties(
2059 VkPhysicalDevice physicalDevice,
2060 VkPhysicalDeviceProperties* pProperties,
2061 VkResult result)
2062{
2063
2064 if(pProperties != nullptr)
2065 {
2066 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2067 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2068 {
2069 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2070 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2071 return false;
2072 }
2073 }
2074
2075 if(result < VK_SUCCESS)
2076 {
2077 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2078 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2079 return false;
2080 }
2081
2082 return true;
2083}
2084
2085VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2086 VkPhysicalDevice physicalDevice,
2087 VkPhysicalDeviceProperties* pProperties)
2088{
2089 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2090
2091 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2092
2093 return result;
2094}
2095
Cody Northropef72e2a2015-08-03 17:04:53 -06002096bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002097 VkPhysicalDevice physicalDevice,
2098 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002099 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002100 VkResult result)
2101{
2102
Cody Northropef72e2a2015-08-03 17:04:53 -06002103 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002104 {
2105 }
2106
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002107 if(pQueueProperties != nullptr)
2108 {
2109 }
2110
2111 if(result < VK_SUCCESS)
2112 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002113 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002114 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2115 return false;
2116 }
2117
2118 return true;
2119}
2120
2121VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2122 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002123 uint32_t* pCount,
2124 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002125{
Cody Northropef72e2a2015-08-03 17:04:53 -06002126 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002127
Cody Northropef72e2a2015-08-03 17:04:53 -06002128 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002129
2130 return result;
2131}
2132
2133bool PostGetPhysicalDeviceMemoryProperties(
2134 VkPhysicalDevice physicalDevice,
2135 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2136 VkResult result)
2137{
2138
2139 if(pMemoryProperties != nullptr)
2140 {
2141 }
2142
2143 if(result < VK_SUCCESS)
2144 {
2145 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2146 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2147 return false;
2148 }
2149
2150 return true;
2151}
2152
2153VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2154 VkPhysicalDevice physicalDevice,
2155 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2156{
2157 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2158
2159 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2160
2161 return result;
2162}
2163
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002164VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2165 VkPhysicalDevice physicalDevice,
2166 const VkDeviceCreateInfo* pCreateInfo,
2167 VkDevice* pDevice)
2168{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002169 /*
2170 * NOTE: The loader fills in the ICD's device object in *pDevice.
2171 * Use that object to get the dispatch table.
2172 *
2173 * NOTE: We do not validate physicalDevice or any dispatchable
2174 * object as the first parameter. We couldn't get here if it was wrong!
2175 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002176 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002177 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2178 if(result == VK_SUCCESS)
2179 {
2180 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2181 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2182 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2183 }
2184
2185 return result;
2186}
2187
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002188VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002189 VkDevice device)
2190{
2191 layer_debug_report_destroy_device(device);
2192
2193 dispatch_key key = get_dispatch_key(device);
2194#if DISPATCH_MAP_DEBUG
2195 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2196#endif
2197
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002198 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002199 pc_device_table_map.erase(key);
2200 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002201}
2202
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002203bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002204 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002205 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002206 uint32_t queueIndex,
2207 VkQueue* pQueue,
2208 VkResult result)
2209{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002210
2211
2212
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002213 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002214 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002215 }
2216
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002217 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002218 {
2219 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002220 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2221 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002222 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002223
2224 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002225}
2226
2227VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2228 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002229 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002230 uint32_t queueIndex,
2231 VkQueue* pQueue)
2232{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002233 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002234
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002235 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002236
2237 return result;
2238}
2239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002240bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002241 VkQueue queue,
2242 const VkCmdBuffer* pCmdBuffers)
2243{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002244 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002245 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002246 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002247
2248 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002249}
2250
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002251bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002252 VkQueue queue,
2253 uint32_t cmdBufferCount,
2254 VkFence fence,
2255 VkResult result)
2256{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002257
2258
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002259
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002260 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002261 {
2262 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002263 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2264 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002265 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002266
2267 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002268}
2269
2270VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2271 VkQueue queue,
2272 uint32_t cmdBufferCount,
2273 const VkCmdBuffer* pCmdBuffers,
2274 VkFence fence)
2275{
2276 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002277
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002278 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2279
2280 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2281
2282 return result;
2283}
2284
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002285bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002286 VkQueue queue,
2287 VkResult result)
2288{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002289
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002290 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002291 {
2292 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002293 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2294 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002295 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002296
2297 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002298}
2299
2300VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2301 VkQueue queue)
2302{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002303 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2304
2305 PostQueueWaitIdle(queue, result);
2306
2307 return result;
2308}
2309
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002310bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002311 VkDevice device,
2312 VkResult result)
2313{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002314
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002315 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002316 {
2317 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002318 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2319 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002320 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002321
2322 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002323}
2324
2325VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2326 VkDevice device)
2327{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002328 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2329
2330 PostDeviceWaitIdle(device, result);
2331
2332 return result;
2333}
2334
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002335bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002336 VkDevice device,
2337 const VkMemoryAllocInfo* pAllocInfo)
2338{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002339 if(pAllocInfo != nullptr)
2340 {
2341 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002342 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002343 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002344 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002345 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002346 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002347 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002348
2349 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002350}
2351
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002352bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002353 VkDevice device,
2354 VkDeviceMemory* pMem,
2355 VkResult result)
2356{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002357
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002358 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002359 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002360 }
2361
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002362 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002363 {
2364 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002365 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2366 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002367 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002368
2369 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002370}
2371
2372VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2373 VkDevice device,
2374 const VkMemoryAllocInfo* pAllocInfo,
2375 VkDeviceMemory* pMem)
2376{
2377 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002378
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002379 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2380
2381 PostAllocMemory(device, pMem, result);
2382
2383 return result;
2384}
2385
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002386bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002387 VkDevice device,
2388 VkDeviceMemory mem,
2389 VkDeviceSize offset,
2390 VkDeviceSize size,
2391 VkMemoryMapFlags flags,
2392 void** ppData,
2393 VkResult result)
2394{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002395
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002396
2397
2398
2399
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002400 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002401 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002402 }
2403
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002404 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002405 {
2406 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002407 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2408 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002409 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002410
2411 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002412}
2413
2414VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2415 VkDevice device,
2416 VkDeviceMemory mem,
2417 VkDeviceSize offset,
2418 VkDeviceSize size,
2419 VkMemoryMapFlags flags,
2420 void** ppData)
2421{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002422 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2423
2424 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2425
2426 return result;
2427}
2428
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002429bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002430 VkDevice device,
2431 const VkMappedMemoryRange* pMemRanges)
2432{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002433 if(pMemRanges != nullptr)
2434 {
2435 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002436 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002437 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002438 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002439 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002440 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002441 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002442
2443 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002444}
2445
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002446bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002447 VkDevice device,
2448 uint32_t memRangeCount,
2449 VkResult result)
2450{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002451
2452
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002453 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002454 {
2455 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002456 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2457 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002458 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002459
2460 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002461}
2462
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002463VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002464 VkDevice device,
2465 uint32_t memRangeCount,
2466 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002467{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002468 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002469
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002470 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002471
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002472 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2473
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002474 return result;
2475}
2476
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002477bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002478 VkDevice device,
2479 const VkMappedMemoryRange* pMemRanges)
2480{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002481 if(pMemRanges != nullptr)
2482 {
2483 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002484 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002485 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002486 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002487 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002488 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002489 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002490
2491 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002492}
2493
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002494bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002495 VkDevice device,
2496 uint32_t memRangeCount,
2497 VkResult result)
2498{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002499
2500
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002501 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002502 {
2503 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002504 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2505 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002506 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002507
2508 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002509}
2510
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002511VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002512 VkDevice device,
2513 uint32_t memRangeCount,
2514 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002515{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002516 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002517
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002518 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002519
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002520 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2521
Tony Barbour859ceab2015-04-16 19:23:13 -06002522 return result;
2523}
2524
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002525bool PostGetDeviceMemoryCommitment(
2526 VkDevice device,
2527 VkDeviceMemory memory,
2528 VkDeviceSize* pCommittedMemoryInBytes,
2529 VkResult result)
2530{
2531
2532
2533 if(pCommittedMemoryInBytes != nullptr)
2534 {
2535 }
2536
2537 if(result < VK_SUCCESS)
2538 {
2539 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2540 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2541 return false;
2542 }
2543
2544 return true;
2545}
2546
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002547VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002548 VkDevice device,
2549 VkDeviceMemory memory,
2550 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002551{
2552 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2553
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002554 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2555
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002556 return result;
2557}
2558
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002559bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002560 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002561 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002562 VkDeviceMemory mem,
2563 VkDeviceSize memOffset,
2564 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002565{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002566
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002567
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002568
2569
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002570 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002571 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002572 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2574 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002575 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002576
2577 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002578}
2579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002581 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002582 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002583 VkDeviceMemory mem,
2584 VkDeviceSize memOffset)
2585{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002586 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002587
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002588 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002589
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002590 return result;
2591}
2592
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002593bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002594 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002595 VkImage image,
2596 VkDeviceMemory mem,
2597 VkDeviceSize memOffset,
2598 VkResult result)
2599{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002600
2601
2602
2603
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002604 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002605 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002606 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2607 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2608 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002609 }
2610
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002611 return true;
2612}
2613
2614VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2615 VkDevice device,
2616 VkImage image,
2617 VkDeviceMemory mem,
2618 VkDeviceSize memOffset)
2619{
2620 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2621
2622 PostBindImageMemory(device, image, mem, memOffset, result);
2623
2624 return result;
2625}
2626
2627bool PostGetBufferMemoryRequirements(
2628 VkDevice device,
2629 VkBuffer buffer,
2630 VkMemoryRequirements* pMemoryRequirements,
2631 VkResult result)
2632{
2633
2634
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002635 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002636 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002637 }
2638
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002639 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002640 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002641 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2642 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2643 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002644 }
2645
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002646 return true;
2647}
2648
2649VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2650 VkDevice device,
2651 VkBuffer buffer,
2652 VkMemoryRequirements* pMemoryRequirements)
2653{
2654 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2655
2656 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2657
2658 return result;
2659}
2660
2661bool PostGetImageMemoryRequirements(
2662 VkDevice device,
2663 VkImage image,
2664 VkMemoryRequirements* pMemoryRequirements,
2665 VkResult result)
2666{
2667
2668
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002669 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002670 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002671 }
2672
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002673 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002674 {
2675 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2676 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2677 return false;
2678 }
2679
2680 return true;
2681}
2682
2683VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2684 VkDevice device,
2685 VkImage image,
2686 VkMemoryRequirements* pMemoryRequirements)
2687{
2688 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2689
2690 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2691
2692 return result;
2693}
2694
2695bool PostGetImageSparseMemoryRequirements(
2696 VkDevice device,
2697 VkImage image,
2698 uint32_t* pNumRequirements,
2699 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2700 VkResult result)
2701{
2702
2703
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002704 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002705 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002706 }
2707
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002708 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002709 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002710 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2711 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2712 {
2713 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002714 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002715 return false;
2716 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002717 }
2718
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002719 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002720 {
2721 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2722 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2723 return false;
2724 }
2725
2726 return true;
2727}
2728
2729VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2730 VkDevice device,
2731 VkImage image,
2732 uint32_t* pNumRequirements,
2733 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2734{
2735 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2736
2737 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2738
2739 return result;
2740}
2741
2742bool PostGetPhysicalDeviceSparseImageFormatProperties(
2743 VkPhysicalDevice physicalDevice,
2744 VkFormat format,
2745 VkImageType type,
2746 uint32_t samples,
2747 VkImageUsageFlags usage,
2748 VkImageTiling tiling,
2749 uint32_t* pNumProperties,
2750 VkSparseImageFormatProperties* pProperties,
2751 VkResult result)
2752{
2753
2754 if(format < VK_FORMAT_BEGIN_RANGE ||
2755 format > VK_FORMAT_END_RANGE)
2756 {
2757 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002758 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002759 return false;
2760 }
2761
2762 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2763 type > VK_IMAGE_TYPE_END_RANGE)
2764 {
2765 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002766 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002767 return false;
2768 }
2769
2770
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002771
2772 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2773 tiling > VK_IMAGE_TILING_END_RANGE)
2774 {
2775 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002776 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002777 return false;
2778 }
2779
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002780 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002781 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002782 }
2783
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002784 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002785 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002786 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2787 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2788 {
2789 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002790 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002791 return false;
2792 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002793 }
2794
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002795 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002796 {
2797 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2798 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2799 return false;
2800 }
2801
2802 return true;
2803}
2804
2805VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2806 VkPhysicalDevice physicalDevice,
2807 VkFormat format,
2808 VkImageType type,
2809 uint32_t samples,
2810 VkImageUsageFlags usage,
2811 VkImageTiling tiling,
2812 uint32_t* pNumProperties,
2813 VkSparseImageFormatProperties* pProperties)
2814{
2815 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2816
2817 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2818
2819 return result;
2820}
2821
2822bool PreQueueBindSparseBufferMemory(
2823 VkQueue queue,
2824 const VkSparseMemoryBindInfo* pBindInfo)
2825{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002826 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002827 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002828 }
2829
2830 return true;
2831}
2832
2833bool PostQueueBindSparseBufferMemory(
2834 VkQueue queue,
2835 VkBuffer buffer,
2836 uint32_t numBindings,
2837 VkResult result)
2838{
2839
2840
2841
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002842 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002843 {
2844 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2845 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2846 return false;
2847 }
2848
2849 return true;
2850}
2851
2852VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2853 VkQueue queue,
2854 VkBuffer buffer,
2855 uint32_t numBindings,
2856 const VkSparseMemoryBindInfo* pBindInfo)
2857{
2858 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2859
2860 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2861
2862 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2863
2864 return result;
2865}
2866
2867bool PreQueueBindSparseImageOpaqueMemory(
2868 VkQueue queue,
2869 const VkSparseMemoryBindInfo* pBindInfo)
2870{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002871 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002872 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002873 }
2874
2875 return true;
2876}
2877
2878bool PostQueueBindSparseImageOpaqueMemory(
2879 VkQueue queue,
2880 VkImage image,
2881 uint32_t numBindings,
2882 VkResult result)
2883{
2884
2885
2886
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002887 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002888 {
2889 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2890 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2891 return false;
2892 }
2893
2894 return true;
2895}
2896
2897VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2898 VkQueue queue,
2899 VkImage image,
2900 uint32_t numBindings,
2901 const VkSparseMemoryBindInfo* pBindInfo)
2902{
2903 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2904
2905 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2906
2907 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2908
2909 return result;
2910}
2911
2912bool PreQueueBindSparseImageMemory(
2913 VkQueue queue,
2914 const VkSparseImageMemoryBindInfo* pBindInfo)
2915{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002916 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002917 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002918 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2919 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
2920 {
2921 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002922 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002923 return false;
2924 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002925 }
2926
2927 return true;
2928}
2929
2930bool PostQueueBindSparseImageMemory(
2931 VkQueue queue,
2932 VkImage image,
2933 uint32_t numBindings,
2934 VkResult result)
2935{
2936
2937
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002938
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002939 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002940 {
2941 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002942 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2943 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002944 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002945
2946 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002947}
2948
2949VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002950 VkQueue queue,
2951 VkImage image,
2952 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002953 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002954{
2955 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002956
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002957 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002958
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002959 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002960
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002961 return result;
2962}
2963
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002964bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002965 VkDevice device,
2966 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002967{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002968 if(pCreateInfo != nullptr)
2969 {
2970 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002971 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002972 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002973 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002974 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002975 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002976 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002977
2978 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002979}
2980
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002981bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002982 VkDevice device,
2983 VkFence* pFence,
2984 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002985{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002986
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002987 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002988 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002989 }
2990
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002991 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002992 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002993 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002994 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2995 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002996 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002997
2998 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002999}
3000
3001VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3002 VkDevice device,
3003 const VkFenceCreateInfo* pCreateInfo,
3004 VkFence* pFence)
3005{
3006 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003007
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003008 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3009
3010 PostCreateFence(device, pFence, result);
3011
3012 return result;
3013}
3014
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003015bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003016 VkDevice device,
3017 const VkFence* pFences)
3018{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003019 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003020 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003021 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003022
3023 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003024}
3025
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003026bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003027 VkDevice device,
3028 uint32_t fenceCount,
3029 VkResult result)
3030{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003031
3032
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003033 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003034 {
3035 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003036 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3037 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003038 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003039
3040 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003041}
3042
3043VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3044 VkDevice device,
3045 uint32_t fenceCount,
3046 const VkFence* pFences)
3047{
3048 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003049
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003050 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3051
3052 PostResetFences(device, fenceCount, result);
3053
3054 return result;
3055}
3056
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003057bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003058 VkDevice device,
3059 VkFence fence,
3060 VkResult result)
3061{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003062
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003063
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003064 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003065 {
3066 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003067 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3068 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003069 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003070
3071 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003072}
3073
3074VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3075 VkDevice device,
3076 VkFence fence)
3077{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003078 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3079
3080 PostGetFenceStatus(device, fence, result);
3081
3082 return result;
3083}
3084
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003085bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003086 VkDevice device,
3087 const VkFence* pFences)
3088{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003089 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003090 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003091 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003092
3093 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003094}
3095
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003096bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003097 VkDevice device,
3098 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003099 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003100 uint64_t timeout,
3101 VkResult result)
3102{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003103
3104
3105
3106
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003107 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003108 {
3109 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003110 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3111 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003112 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003113
3114 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003115}
3116
3117VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3118 VkDevice device,
3119 uint32_t fenceCount,
3120 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003121 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003122 uint64_t timeout)
3123{
3124 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003125
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003126 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3127
3128 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3129
3130 return result;
3131}
3132
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003133bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003134 VkDevice device,
3135 const VkSemaphoreCreateInfo* pCreateInfo)
3136{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003137 if(pCreateInfo != nullptr)
3138 {
3139 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003140 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003141 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003142 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003143 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003144 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003145 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003146
3147 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003148}
3149
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003150bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003151 VkDevice device,
3152 VkSemaphore* pSemaphore,
3153 VkResult result)
3154{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003155
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003156 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003157 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003158 }
3159
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003160 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003161 {
3162 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003163 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3164 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003165 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003166
3167 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003168}
3169
3170VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3171 VkDevice device,
3172 const VkSemaphoreCreateInfo* pCreateInfo,
3173 VkSemaphore* pSemaphore)
3174{
3175 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003176
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003177 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3178
3179 PostCreateSemaphore(device, pSemaphore, result);
3180
3181 return result;
3182}
3183
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003184bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003185 VkQueue queue,
3186 VkSemaphore semaphore,
3187 VkResult result)
3188{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003189
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003190
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003191 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003192 {
3193 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003194 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3195 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003196 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003197
3198 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003199}
3200
3201VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3202 VkQueue queue,
3203 VkSemaphore semaphore)
3204{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003205 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3206
3207 PostQueueSignalSemaphore(queue, semaphore, result);
3208
3209 return result;
3210}
3211
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003212bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003213 VkQueue queue,
3214 VkSemaphore semaphore,
3215 VkResult result)
3216{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003217
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003218
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003219 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003220 {
3221 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003222 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3223 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003224 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003225
3226 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003227}
3228
3229VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3230 VkQueue queue,
3231 VkSemaphore semaphore)
3232{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003233 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3234
3235 PostQueueWaitSemaphore(queue, semaphore, result);
3236
3237 return result;
3238}
3239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003240bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003241 VkDevice device,
3242 const VkEventCreateInfo* pCreateInfo)
3243{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003244 if(pCreateInfo != nullptr)
3245 {
3246 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003247 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003248 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003249 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003250 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003251 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003252 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003253
3254 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003255}
3256
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003257bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003258 VkDevice device,
3259 VkEvent* pEvent,
3260 VkResult result)
3261{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003262
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003263 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003264 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003265 }
3266
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003267 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003268 {
3269 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003270 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3271 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003272 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003273
3274 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003275}
3276
3277VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3278 VkDevice device,
3279 const VkEventCreateInfo* pCreateInfo,
3280 VkEvent* pEvent)
3281{
3282 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003283
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003284 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3285
3286 PostCreateEvent(device, pEvent, result);
3287
3288 return result;
3289}
3290
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003291bool PostGetEventStatus(
3292 VkDevice device,
3293 VkEvent event,
3294 VkResult result)
3295{
3296
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003297
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003298 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003299 {
3300 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003301 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3302 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003303 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003304
3305 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003306}
3307
3308VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3309 VkDevice device,
3310 VkEvent event)
3311{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003312 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3313
3314 PostGetEventStatus(device, event, result);
3315
3316 return result;
3317}
3318
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003319bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003320 VkDevice device,
3321 VkEvent event,
3322 VkResult result)
3323{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003324
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003325
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003326 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003327 {
3328 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003329 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3330 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003331 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003332
3333 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003334}
3335
3336VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3337 VkDevice device,
3338 VkEvent event)
3339{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003340 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3341
3342 PostSetEvent(device, event, result);
3343
3344 return result;
3345}
3346
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003347bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003348 VkDevice device,
3349 VkEvent event,
3350 VkResult result)
3351{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003352
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003353
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003354 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003355 {
3356 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003357 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3358 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003359 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003360
3361 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003362}
3363
3364VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3365 VkDevice device,
3366 VkEvent event)
3367{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003368 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3369
3370 PostResetEvent(device, event, result);
3371
3372 return result;
3373}
3374
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003375bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003376 VkDevice device,
3377 const VkQueryPoolCreateInfo* pCreateInfo)
3378{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003379 if(pCreateInfo != nullptr)
3380 {
3381 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003382 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003383 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003384 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003385 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003386 }
3387 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3388 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3389 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003390 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003391 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003392 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003393 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003394 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003395
3396 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003397}
3398
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003399bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003400 VkDevice device,
3401 VkQueryPool* pQueryPool,
3402 VkResult result)
3403{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003404
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003405 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003406 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003407 }
3408
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003409 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003410 {
3411 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003412 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3413 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003414 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003415
3416 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003417}
3418
3419VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3420 VkDevice device,
3421 const VkQueryPoolCreateInfo* pCreateInfo,
3422 VkQueryPool* pQueryPool)
3423{
3424 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003425
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003426 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3427
3428 PostCreateQueryPool(device, pQueryPool, result);
3429
3430 return result;
3431}
3432
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003433bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003434 VkDevice device,
3435 VkQueryPool queryPool,
3436 uint32_t startQuery,
3437 uint32_t queryCount,
3438 size_t* pDataSize,
3439 void* pData,
3440 VkQueryResultFlags flags,
3441 VkResult result)
3442{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003443
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003444
3445
3446
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003447 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003448 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003449 }
3450
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003451 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003453 }
3454
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003455
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003456 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003457 {
3458 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3460 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003461 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003462
3463 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003464}
3465
3466VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3467 VkDevice device,
3468 VkQueryPool queryPool,
3469 uint32_t startQuery,
3470 uint32_t queryCount,
3471 size_t* pDataSize,
3472 void* pData,
3473 VkQueryResultFlags flags)
3474{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003475 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3476
3477 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3478
3479 return result;
3480}
3481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003482bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003483 VkDevice device,
3484 const VkBufferCreateInfo* pCreateInfo)
3485{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003486 if(pCreateInfo != nullptr)
3487 {
3488 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003489 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003491 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003492 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003493 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003494 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3495 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003496 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003497 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003498 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003499 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003500 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003501 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003502 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003503 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003504 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003505
3506 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003507}
3508
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003509bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003510 VkDevice device,
3511 VkBuffer* pBuffer,
3512 VkResult result)
3513{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003514
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003515 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003516 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003517 }
3518
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003519 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003520 {
3521 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003522 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3523 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003524 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003525
3526 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527}
3528
3529VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3530 VkDevice device,
3531 const VkBufferCreateInfo* pCreateInfo,
3532 VkBuffer* pBuffer)
3533{
3534 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003535
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003536 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3537
3538 PostCreateBuffer(device, pBuffer, result);
3539
3540 return result;
3541}
3542
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003543bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003544 VkDevice device,
3545 const VkBufferViewCreateInfo* pCreateInfo)
3546{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003547 if(pCreateInfo != nullptr)
3548 {
3549 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003550 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003551 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003552 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003553 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003554 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003555 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3556 pCreateInfo->format > VK_FORMAT_END_RANGE)
3557 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003558 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003559 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003560 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003561 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003562 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003563
3564 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003565}
3566
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003567bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003568 VkDevice device,
3569 VkBufferView* pView,
3570 VkResult result)
3571{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003573 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003574 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003575 }
3576
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003577 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003578 {
3579 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003580 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3581 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003582 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003583
3584 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003585}
3586
3587VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3588 VkDevice device,
3589 const VkBufferViewCreateInfo* pCreateInfo,
3590 VkBufferView* pView)
3591{
3592 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003593
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003594 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3595
3596 PostCreateBufferView(device, pView, result);
3597
3598 return result;
3599}
3600
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003601bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003602 VkDevice device,
3603 const VkImageCreateInfo* pCreateInfo)
3604{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003605 if(pCreateInfo != nullptr)
3606 {
3607 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003608 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003609 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003610 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003611 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003612 }
3613 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3614 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3615 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003616 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003617 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003618 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003619 }
3620 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3621 pCreateInfo->format > VK_FORMAT_END_RANGE)
3622 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003623 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003624 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003625 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003626 }
3627 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3628 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3629 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003631 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003632 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003633 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003634 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3635 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003636 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003637 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3638 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003639 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003640 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003641 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003642 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003643 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003644 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003645
3646 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003647}
3648
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003649bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003650 VkDevice device,
3651 VkImage* pImage,
3652 VkResult result)
3653{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003654
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003655 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003656 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003657 }
3658
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003659 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003660 {
3661 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003662 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3663 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003664 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003665
3666 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003667}
3668
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003669VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3670 VkDevice device,
3671 const VkImageCreateInfo* pCreateInfo,
3672 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003673{
3674 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003675
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003676 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3677
3678 PostCreateImage(device, pImage, result);
3679
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003680 return result;
3681}
3682
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003683bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003684 VkDevice device,
3685 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003686{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003687 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003688 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003689 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3690 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
3691 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003692 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003693 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003694 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003695 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003696 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003697
3698 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003699}
3700
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003701bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003702 VkDevice device,
3703 VkImage image,
3704 VkSubresourceLayout* pLayout,
3705 VkResult result)
3706{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003707
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003708
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003709 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003710 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003711 }
3712
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003713 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003714 {
3715 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003716 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3717 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003718 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003719
3720 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003721}
3722
3723VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
3724 VkDevice device,
3725 VkImage image,
3726 const VkImageSubresource* pSubresource,
3727 VkSubresourceLayout* pLayout)
3728{
3729 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003730
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003731 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
3732
3733 PostGetImageSubresourceLayout(device, image, pLayout, result);
3734
3735 return result;
3736}
3737
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003738bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003739 VkDevice device,
3740 const VkImageViewCreateInfo* pCreateInfo)
3741{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003742 if(pCreateInfo != nullptr)
3743 {
3744 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003745 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003746 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003747 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003748 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003749 }
3750 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3751 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3752 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003753 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003754 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003755 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003756 }
3757 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3758 pCreateInfo->format > VK_FORMAT_END_RANGE)
3759 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003760 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003761 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003762 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003763 }
3764 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3765 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3766 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003768 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003769 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003770 }
3771 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3772 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3773 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003775 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003776 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003777 }
3778 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3779 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3780 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003781 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003782 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003783 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003784 }
3785 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3786 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3787 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003788 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003789 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003790 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003791 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003792 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003793
3794 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003795}
3796
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003797bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003798 VkDevice device,
3799 VkImageView* pView,
3800 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003801{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003802
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003803 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003804 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003805 }
3806
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003807 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003808 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003809 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003810 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3811 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003812 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003813
3814 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003815}
3816
3817VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3818 VkDevice device,
3819 const VkImageViewCreateInfo* pCreateInfo,
3820 VkImageView* pView)
3821{
3822 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003823
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003824 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3825
3826 PostCreateImageView(device, pView, result);
3827
3828 return result;
3829}
3830
Michael Lentine6715e522015-09-15 14:59:14 -05003831bool PreCreateShaderModule(
3832 VkDevice device,
3833 const VkShaderModuleCreateInfo* pCreateInfo)
3834{
3835 if(pCreateInfo) {
3836 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3837 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3838 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3839 return false;
3840 }
3841 if(!pCreateInfo->pCode) {
3842 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3843 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3844 return false;
3845 }
3846 } else {
3847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3848 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3849 return false;
3850 }
3851
3852 return true;
3853}
3854
3855bool PostCreateShaderModule(
3856 VkDevice device,
3857 VkShaderModule* pShaderModule,
3858 VkResult result)
3859{
3860 if(result < VK_SUCCESS) {
3861 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3862 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3863 return false;
3864 }
3865
3866 return true;
3867}
3868
3869VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3870 VkDevice device,
3871 const VkShaderModuleCreateInfo* pCreateInfo,
3872 VkShaderModule* pShaderModule)
3873{
3874 PreCreateShaderModule(device, pCreateInfo);
3875 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3876 PostCreateShaderModule(device, pShaderModule, result);
3877 return result;
3878}
3879
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003880bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003881 VkDevice device,
3882 const VkShaderCreateInfo* pCreateInfo)
3883{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003884 if(pCreateInfo != nullptr)
3885 {
3886 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003887 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003888 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003889 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003890 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003891 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003892 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003893 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003894 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003895 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003896
3897 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003898}
3899
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003900bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003901 VkDevice device,
3902 VkShader* pShader,
3903 VkResult result)
3904{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003905
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003906 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003907 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003908 }
3909
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003910 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003911 {
3912 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3914 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003915 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003916
3917 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003918}
3919
3920VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3921 VkDevice device,
3922 const VkShaderCreateInfo* pCreateInfo,
3923 VkShader* pShader)
3924{
3925 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003926
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003927 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3928
3929 PostCreateShader(device, pShader, result);
3930
3931 return result;
3932}
3933
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003934bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003935 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003936 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003937{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003938 if(pCreateInfo != nullptr)
3939 {
3940 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003941 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003943 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003944 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003945 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003946 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003947 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003948 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003949 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003950
3951 return true;
3952}
3953
3954bool PostCreatePipelineCache(
3955 VkDevice device,
3956 VkPipelineCache* pPipelineCache,
3957 VkResult result)
3958{
3959
3960 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003961 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003962 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003963
3964 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003965 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003966 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06003967 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3968 return false;
3969 }
3970
3971 return true;
3972}
3973
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003974VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003975 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003976 const VkPipelineCacheCreateInfo* pCreateInfo,
3977 VkPipelineCache* pPipelineCache)
3978{
3979 PreCreatePipelineCache(device, pCreateInfo);
3980
3981 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3982
3983 PostCreatePipelineCache(device, pPipelineCache, result);
3984
3985 return result;
3986}
3987
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003988bool PostGetPipelineCacheSize(
3989 VkDevice device,
3990 VkPipelineCache pipelineCache)
3991{
3992
3993
3994 return true;
3995}
3996
3997VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
3998 VkDevice device,
3999 VkPipelineCache pipelineCache)
4000{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004001 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004002
4003 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004004
4005 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004006}
4007
4008bool PostGetPipelineCacheData(
4009 VkDevice device,
4010 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06004011 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004012 void* pData,
4013 VkResult result)
4014{
4015
4016
4017 if(pData != nullptr)
4018 {
4019 }
4020
4021 if(result < VK_SUCCESS)
4022 {
4023 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4024 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4025 return false;
4026 }
4027
4028 return true;
4029}
4030
4031VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4032 VkDevice device,
4033 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06004034 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004035 void* pData)
4036{
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06004037 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, dataSize, pData);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004038
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06004039 PostGetPipelineCacheData(device, pipelineCache, dataSize, pData, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004040
4041 return result;
4042}
4043
4044bool PreMergePipelineCaches(
4045 VkDevice device,
4046 const VkPipelineCache* pSrcCaches)
4047{
4048 if(pSrcCaches != nullptr)
4049 {
4050 }
4051
4052 return true;
4053}
4054
4055bool PostMergePipelineCaches(
4056 VkDevice device,
4057 VkPipelineCache destCache,
4058 uint32_t srcCacheCount,
4059 VkResult result)
4060{
4061
4062
4063
4064 if(result < VK_SUCCESS)
4065 {
4066 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4067 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4068 return false;
4069 }
4070
4071 return true;
4072}
4073
4074VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4075 VkDevice device,
4076 VkPipelineCache destCache,
4077 uint32_t srcCacheCount,
4078 const VkPipelineCache* pSrcCaches)
4079{
4080 PreMergePipelineCaches(device, pSrcCaches);
4081
4082 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4083
4084 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4085
4086 return result;
4087}
4088
4089bool PreCreateGraphicsPipelines(
4090 VkDevice device,
4091 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4092{
4093 if(pCreateInfos != nullptr)
4094 {
4095 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4096 {
4097 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4098 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4099 return false;
4100 }
4101 if(pCreateInfos->pStages != nullptr)
4102 {
4103 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4104 {
4105 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4106 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4107 return false;
4108 }
4109 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4110 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4111 {
4112 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4113 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4114 return false;
4115 }
4116 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4117 {
4118 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4119 {
4120 }
4121 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4122 {
4123 }
4124 }
4125 }
4126 if(pCreateInfos->pVertexInputState != nullptr)
4127 {
4128 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4129 {
4130 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4131 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4132 return false;
4133 }
4134 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4135 {
4136 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4137 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4138 {
4139 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4140 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4141 return false;
4142 }
4143 }
4144 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4145 {
4146 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4147 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4148 {
4149 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4150 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4151 return false;
4152 }
4153 }
4154 }
4155 if(pCreateInfos->pInputAssemblyState != nullptr)
4156 {
4157 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4158 {
4159 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4160 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4161 return false;
4162 }
4163 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4164 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4165 {
4166 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4167 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4168 return false;
4169 }
4170 }
4171 if(pCreateInfos->pTessellationState != nullptr)
4172 {
4173 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4174 {
4175 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4176 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4177 return false;
4178 }
4179 }
4180 if(pCreateInfos->pViewportState != nullptr)
4181 {
4182 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4183 {
4184 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4185 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4186 return false;
4187 }
4188 }
4189 if(pCreateInfos->pRasterState != nullptr)
4190 {
4191 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4192 {
4193 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4194 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4195 return false;
4196 }
4197 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4198 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4199 {
4200 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4201 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4202 return false;
4203 }
4204 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4205 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4206 {
4207 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4208 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4209 return false;
4210 }
4211 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4212 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4213 {
4214 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4215 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4216 return false;
4217 }
4218 }
4219 if(pCreateInfos->pMultisampleState != nullptr)
4220 {
4221 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4222 {
4223 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4224 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4225 return false;
4226 }
4227 }
4228 if(pCreateInfos->pDepthStencilState != nullptr)
4229 {
4230 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4231 {
4232 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4233 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4234 return false;
4235 }
4236 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4237 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4238 {
4239 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4240 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4241 return false;
4242 }
4243 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4244 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4245 {
4246 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4247 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4248 return false;
4249 }
4250 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4251 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4252 {
4253 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4254 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4255 return false;
4256 }
4257 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4258 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4259 {
4260 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4261 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4262 return false;
4263 }
4264 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4265 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4266 {
4267 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4268 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4269 return false;
4270 }
4271 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4272 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4273 {
4274 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4275 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4276 return false;
4277 }
4278 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4279 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4280 {
4281 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4282 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4283 return false;
4284 }
4285 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4286 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4287 {
4288 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4289 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4290 return false;
4291 }
4292 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4293 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4294 {
4295 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4296 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4297 return false;
4298 }
4299 }
4300 if(pCreateInfos->pColorBlendState != nullptr)
4301 {
4302 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4303 {
4304 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4305 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4306 return false;
4307 }
Michael Lentine6d033602015-10-06 14:55:54 -07004308 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4309 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004310 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4311 {
4312 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4313 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4314 return false;
4315 }
Michael Lentined833b882015-09-15 14:59:56 -05004316 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004317 {
4318 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4319 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4320 {
4321 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4322 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4323 return false;
4324 }
4325 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4326 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4327 {
4328 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4329 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4330 return false;
4331 }
4332 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4333 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4334 {
4335 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4336 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4337 return false;
4338 }
4339 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4340 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4341 {
4342 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4343 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4344 return false;
4345 }
4346 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4347 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4348 {
4349 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4350 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4351 return false;
4352 }
4353 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4354 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4355 {
4356 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4357 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4358 return false;
4359 }
4360 }
4361 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004362 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4363 {
4364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4365 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4366 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004367 }
4368
4369 return true;
4370}
4371
4372bool PostCreateGraphicsPipelines(
4373 VkDevice device,
4374 VkPipelineCache pipelineCache,
4375 uint32_t count,
4376 VkPipeline* pPipelines,
4377 VkResult result)
4378{
4379
4380
4381
4382 if(pPipelines != nullptr)
4383 {
4384 }
4385
4386 if(result < VK_SUCCESS)
4387 {
4388 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4389 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4390 return false;
4391 }
4392
4393 return true;
4394}
4395
4396VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4397 VkDevice device,
4398 VkPipelineCache pipelineCache,
4399 uint32_t count,
4400 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4401 VkPipeline* pPipelines)
4402{
4403 PreCreateGraphicsPipelines(device, pCreateInfos);
4404
4405 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4406
4407 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4408
4409 return result;
4410}
4411
4412bool PreCreateComputePipelines(
4413 VkDevice device,
4414 const VkComputePipelineCreateInfo* pCreateInfos)
4415{
4416 if(pCreateInfos != nullptr)
4417 {
4418 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4419 {
4420 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4421 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4422 return false;
4423 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004424 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004425 {
4426 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4427 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4428 return false;
4429 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004430 if(pCreateInfos->stage.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4431 pCreateInfos->stage.stage > VK_SHADER_STAGE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004432 {
4433 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4434 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4435 return false;
4436 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004437 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004438 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004439 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004440 {
4441 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004442 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004443 {
4444 }
4445 }
4446 }
4447
4448 return true;
4449}
4450
4451bool PostCreateComputePipelines(
4452 VkDevice device,
4453 VkPipelineCache pipelineCache,
4454 uint32_t count,
4455 VkPipeline* pPipelines,
4456 VkResult result)
4457{
4458
4459
4460
4461 if(pPipelines != nullptr)
4462 {
4463 }
4464
4465 if(result < VK_SUCCESS)
4466 {
4467 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4468 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4469 return false;
4470 }
4471
4472 return true;
4473}
4474
4475VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4476 VkDevice device,
4477 VkPipelineCache pipelineCache,
4478 uint32_t count,
4479 const VkComputePipelineCreateInfo* pCreateInfos,
4480 VkPipeline* pPipelines)
4481{
4482 PreCreateComputePipelines(device, pCreateInfos);
4483
4484 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4485
4486 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4487
4488 return result;
4489}
4490
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004491bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004492 VkDevice device,
4493 const VkPipelineLayoutCreateInfo* pCreateInfo)
4494{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004495 if(pCreateInfo != nullptr)
4496 {
4497 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004498 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004499 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004500 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4501 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004502 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004503 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004504 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004505 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004506 if(pCreateInfo->pPushConstantRanges != 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 }
4510
4511 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004512}
4513
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004514bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004515 VkDevice device,
4516 VkPipelineLayout* pPipelineLayout,
4517 VkResult result)
4518{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004519
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004520 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004521 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004522 }
4523
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004524 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004525 {
4526 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004527 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4528 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004529 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004530
4531 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004532}
4533
4534VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4535 VkDevice device,
4536 const VkPipelineLayoutCreateInfo* pCreateInfo,
4537 VkPipelineLayout* pPipelineLayout)
4538{
4539 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004540
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004541 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4542
4543 PostCreatePipelineLayout(device, pPipelineLayout, result);
4544
4545 return result;
4546}
4547
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004548bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004549 VkDevice device,
4550 const VkSamplerCreateInfo* pCreateInfo)
4551{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004552 if(pCreateInfo != nullptr)
4553 {
4554 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004555 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004556 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004557 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004558 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004559 }
4560 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4561 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4562 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004563 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004564 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004565 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004566 }
4567 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4568 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4569 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004570 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004571 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004572 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004573 }
4574 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4575 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4576 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004577 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004578 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004579 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004580 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004581 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4582 pCreateInfo->addressModeU > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004583 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004584 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004585 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004586 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004587 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004588 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4589 pCreateInfo->addressModeV > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004590 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004591 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004592 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004593 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004594 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004595 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4596 pCreateInfo->addressModeW > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004597 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004598 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004599 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004600 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004601 }
4602 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4603 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4604 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004605 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004606 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004607 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004608 }
4609 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4610 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4611 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004612 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004613 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004614 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004615 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004616 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004617
4618 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004619}
4620
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004621bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004622 VkDevice device,
4623 VkSampler* pSampler,
4624 VkResult result)
4625{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004626
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004627 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004628 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004629 }
4630
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004631 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004632 {
4633 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004634 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4635 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004636 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004637
4638 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004639}
4640
4641VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4642 VkDevice device,
4643 const VkSamplerCreateInfo* pCreateInfo,
4644 VkSampler* pSampler)
4645{
4646 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004647
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004648 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4649
4650 PostCreateSampler(device, pSampler, result);
4651
4652 return result;
4653}
4654
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004655bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004656 VkDevice device,
4657 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4658{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004659 if(pCreateInfo != nullptr)
4660 {
4661 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004662 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004663 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004664 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004665 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004666 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004667 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004668 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004669 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4670 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4671 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004672 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004673 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004674 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004675 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004676 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004677 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004678 }
4679 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004680 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004681
4682 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004683}
4684
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004685bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004686 VkDevice device,
4687 VkDescriptorSetLayout* pSetLayout,
4688 VkResult result)
4689{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004690
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004691 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004692 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004693 }
4694
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004695 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004696 {
4697 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004698 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4699 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004700 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004701
4702 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004703}
4704
4705VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4706 VkDevice device,
4707 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4708 VkDescriptorSetLayout* pSetLayout)
4709{
4710 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004711
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004712 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4713
4714 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4715
4716 return result;
4717}
4718
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004719bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004720 VkDevice device,
4721 const VkDescriptorPoolCreateInfo* pCreateInfo)
4722{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004723 if(pCreateInfo != nullptr)
4724 {
4725 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004726 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004727 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004728 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004729 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004730 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004731 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004732 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004733 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4734 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4735 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004736 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004737 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004738 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004739 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004740 }
4741 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004742
4743 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004744}
4745
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004746bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004747 VkDevice device,
4748 VkDescriptorPoolUsage poolUsage,
4749 uint32_t maxSets,
4750 VkDescriptorPool* pDescriptorPool,
4751 VkResult result)
4752{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004753
4754 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
4755 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
4756 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004757 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004758 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004759 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004760 }
4761
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004762 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004763
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004764 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004765 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004766 }
4767
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004768 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004769 {
4770 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004771 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4772 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004773 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004774
4775 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004776}
4777
4778VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4779 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004780 const VkDescriptorPoolCreateInfo* pCreateInfo,
4781 VkDescriptorPool* pDescriptorPool)
4782{
4783 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004784
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004785 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004786
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004787 PostCreateDescriptorPool(device, pCreateInfo->poolUsage, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004788
4789 return result;
4790}
4791
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004792bool PostResetDescriptorPool(
4793 VkDevice device,
4794 VkDescriptorPool descriptorPool,
4795 VkResult result)
4796{
4797
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004798
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004799 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004800 {
4801 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004802 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4803 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004804 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004805
4806 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004807}
4808
4809VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4810 VkDevice device,
4811 VkDescriptorPool descriptorPool)
4812{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004813 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
4814
4815 PostResetDescriptorPool(device, descriptorPool, result);
4816
4817 return result;
4818}
4819
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004820bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004821 VkDevice device,
4822 const VkDescriptorSetLayout* pSetLayouts)
4823{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004824 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004825 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004826 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004827
4828 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004829}
4830
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004831bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004832 VkDevice device,
4833 VkDescriptorPool descriptorPool,
4834 VkDescriptorSetUsage setUsage,
4835 uint32_t count,
4836 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004837 VkResult result)
4838{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004839
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004840
4841 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
4842 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
4843 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004844 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004845 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004846 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004847 }
4848
4849
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004850 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004851 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004852 }
4853
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004854 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004855 {
4856 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004857 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4858 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004859 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004860
4861 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004862}
4863
4864VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4865 VkDevice device,
4866 VkDescriptorPool descriptorPool,
4867 VkDescriptorSetUsage setUsage,
4868 uint32_t count,
4869 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004870 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004871{
4872 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004873
Cody Northropc8aa4a52015-08-03 12:47:29 -06004874 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004875
Cody Northropc8aa4a52015-08-03 12:47:29 -06004876 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004877
4878 return result;
4879}
4880
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004881bool PreFreeDescriptorSets(
4882 VkDevice device,
4883 const VkDescriptorSet* pDescriptorSets)
4884{
4885 if(pDescriptorSets != nullptr)
4886 {
4887 }
4888
4889 return true;
4890}
4891
4892bool PostFreeDescriptorSets(
4893 VkDevice device,
4894 VkDescriptorPool descriptorPool,
4895 uint32_t count,
4896 VkResult result)
4897{
4898
4899
4900
4901 if(result < VK_SUCCESS)
4902 {
4903 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4904 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4905 return false;
4906 }
4907
4908 return true;
4909}
4910
4911VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4912 VkDevice device,
4913 VkDescriptorPool descriptorPool,
4914 uint32_t count,
4915 const VkDescriptorSet* pDescriptorSets)
4916{
4917 PreFreeDescriptorSets(device, pDescriptorSets);
4918
4919 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4920
4921 PostFreeDescriptorSets(device, descriptorPool, count, result);
4922
4923 return result;
4924}
4925
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004926bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004927 VkDevice device,
4928 const VkWriteDescriptorSet* pDescriptorWrites,
4929 const VkCopyDescriptorSet* pDescriptorCopies)
4930{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004931 if(pDescriptorWrites != nullptr)
4932 {
4933 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004934 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004936 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004937 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004938 }
4939 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4940 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4941 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004943 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004944 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004945 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004946 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004947 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004948 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4949 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
4950 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004951 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004952 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004953 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004954 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004955 }
4956 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004957
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004958 if(pDescriptorCopies != nullptr)
4959 {
4960 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004961 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004962 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004963 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004964 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004965 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004966 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004967
4968 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004969}
4970
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004971VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004972 VkDevice device,
4973 uint32_t writeCount,
4974 const VkWriteDescriptorSet* pDescriptorWrites,
4975 uint32_t copyCount,
4976 const VkCopyDescriptorSet* pDescriptorCopies)
4977{
4978 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004979
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004980 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004981}
4982
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004983bool PreCreateFramebuffer(
4984 VkDevice device,
4985 const VkFramebufferCreateInfo* pCreateInfo)
4986{
4987 if(pCreateInfo != nullptr)
4988 {
4989 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4990 {
4991 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4992 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4993 return false;
4994 }
4995 if(pCreateInfo->pAttachments != nullptr)
4996 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004997 }
4998 }
4999
5000 return true;
5001}
5002
5003bool PostCreateFramebuffer(
5004 VkDevice device,
5005 VkFramebuffer* pFramebuffer,
5006 VkResult result)
5007{
5008
5009 if(pFramebuffer != nullptr)
5010 {
5011 }
5012
5013 if(result < VK_SUCCESS)
5014 {
5015 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
5016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5017 return false;
5018 }
5019
5020 return true;
5021}
5022
5023VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
5024 VkDevice device,
5025 const VkFramebufferCreateInfo* pCreateInfo,
5026 VkFramebuffer* pFramebuffer)
5027{
5028 PreCreateFramebuffer(device, pCreateInfo);
5029
5030 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
5031
5032 PostCreateFramebuffer(device, pFramebuffer, result);
5033
5034 return result;
5035}
5036
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005037bool PreCreateRenderPass(
5038 VkDevice device,
5039 const VkRenderPassCreateInfo* pCreateInfo)
5040{
5041 if(pCreateInfo != nullptr)
5042 {
5043 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
5044 {
5045 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5046 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5047 return false;
5048 }
5049 if(pCreateInfo->pAttachments != nullptr)
5050 {
5051 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
5052 {
5053 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5054 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
5055 return false;
5056 }
5057 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5058 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
5059 {
5060 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5061 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
5062 return false;
5063 }
5064 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5065 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5066 {
5067 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5068 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
5069 return false;
5070 }
5071 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5072 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5073 {
5074 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5075 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
5076 return false;
5077 }
5078 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5079 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5080 {
5081 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5082 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
5083 return false;
5084 }
5085 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5086 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5087 {
5088 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5089 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
5090 return false;
5091 }
5092 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5093 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
5094 {
5095 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5096 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
5097 return false;
5098 }
5099 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5100 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
5101 {
5102 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5103 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
5104 return false;
5105 }
5106 }
5107 if(pCreateInfo->pSubpasses != nullptr)
5108 {
5109 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
5110 {
5111 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5112 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
5113 return false;
5114 }
5115 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5116 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5117 {
5118 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5119 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
5120 return false;
5121 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005122 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005123 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005124 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5125 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005126 {
5127 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005128 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005129 return false;
5130 }
5131 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005132 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005133 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005134 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5135 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005136 {
5137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005138 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005139 return false;
5140 }
5141 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005142 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005143 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005144 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5145 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005146 {
5147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005148 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005149 return false;
5150 }
5151 }
5152 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5153 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
5154 {
5155 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5156 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
5157 return false;
5158 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005159 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005160 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005161 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5162 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005163 {
5164 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005165 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005166 return false;
5167 }
5168 }
5169 }
5170 if(pCreateInfo->pDependencies != nullptr)
5171 {
5172 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5173 {
5174 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5175 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5176 return false;
5177 }
5178 }
5179 }
5180
5181 return true;
5182}
5183
5184bool PostCreateRenderPass(
5185 VkDevice device,
5186 VkRenderPass* pRenderPass,
5187 VkResult result)
5188{
5189
5190 if(pRenderPass != nullptr)
5191 {
5192 }
5193
5194 if(result < VK_SUCCESS)
5195 {
5196 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5197 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5198 return false;
5199 }
5200
5201 return true;
5202}
5203
5204VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5205 VkDevice device,
5206 const VkRenderPassCreateInfo* pCreateInfo,
5207 VkRenderPass* pRenderPass)
5208{
5209 PreCreateRenderPass(device, pCreateInfo);
5210
5211 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5212
5213 PostCreateRenderPass(device, pRenderPass, result);
5214
5215 return result;
5216}
5217
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005218bool PostGetRenderAreaGranularity(
5219 VkDevice device,
5220 VkRenderPass renderPass,
5221 VkExtent2D* pGranularity,
5222 VkResult result)
5223{
5224
5225
5226 if(pGranularity != nullptr)
5227 {
5228 }
5229
5230 if(result < VK_SUCCESS)
5231 {
5232 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
5233 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5234 return false;
5235 }
5236
5237 return true;
5238}
5239
5240VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
5241 VkDevice device,
5242 VkRenderPass renderPass,
5243 VkExtent2D* pGranularity)
5244{
5245 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
5246
5247 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
5248
5249 return result;
5250}
5251
5252bool PreCreateCommandPool(
5253 VkDevice device,
5254 const VkCmdPoolCreateInfo* pCreateInfo)
5255{
5256 if(pCreateInfo != nullptr)
5257 {
5258 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5259 {
5260 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5261 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5262 return false;
5263 }
5264 }
5265
5266 return true;
5267}
5268
5269bool PostCreateCommandPool(
5270 VkDevice device,
5271 VkCmdPool* pCmdPool,
5272 VkResult result)
5273{
5274
5275 if(pCmdPool != nullptr)
5276 {
5277 }
5278
5279 if(result < VK_SUCCESS)
5280 {
5281 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5283 return false;
5284 }
5285
5286 return true;
5287}
5288
5289VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5290 VkDevice device,
5291 const VkCmdPoolCreateInfo* pCreateInfo,
5292 VkCmdPool* pCmdPool)
5293{
5294 PreCreateCommandPool(device, pCreateInfo);
5295
5296 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5297
5298 PostCreateCommandPool(device, pCmdPool, result);
5299
5300 return result;
5301}
5302
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005303bool PostResetCommandPool(
5304 VkDevice device,
5305 VkCmdPool cmdPool,
5306 VkCmdPoolResetFlags flags,
5307 VkResult result)
5308{
5309
5310
5311
5312 if(result < VK_SUCCESS)
5313 {
5314 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5315 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5316 return false;
5317 }
5318
5319 return true;
5320}
5321
5322VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5323 VkDevice device,
5324 VkCmdPool cmdPool,
5325 VkCmdPoolResetFlags flags)
5326{
5327 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5328
5329 PostResetCommandPool(device, cmdPool, flags, result);
5330
5331 return result;
5332}
5333
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005334bool PreCreateCommandBuffer(
5335 VkDevice device,
5336 const VkCmdBufferCreateInfo* pCreateInfo)
5337{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005338 if(pCreateInfo != nullptr)
5339 {
5340 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005341 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005342 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005343 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005344 return false;
5345 }
5346 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5347 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5348 {
5349 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005350 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005351 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005352 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005353 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005354
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005355 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005356}
5357
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005358bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005359 VkDevice device,
5360 VkCmdBuffer* pCmdBuffer,
5361 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005362{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005363
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005364 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005365 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005366 }
5367
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005368 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005369 {
5370 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005371 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5372 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005373 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005374
5375 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005376}
5377
5378VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
5379 VkDevice device,
5380 const VkCmdBufferCreateInfo* pCreateInfo,
5381 VkCmdBuffer* pCmdBuffer)
5382{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005383 PreCreateCommandBuffer(device, pCreateInfo);
5384
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005385 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
5386
5387 PostCreateCommandBuffer(device, pCmdBuffer, result);
5388
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005389 return result;
5390}
5391
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005392bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005393 VkCmdBuffer cmdBuffer,
5394 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005395{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005396 if(pBeginInfo != nullptr)
5397 {
5398 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005399 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005400 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005401 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005402 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005403 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005404 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005405
5406 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005407}
5408
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005409bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005410 VkCmdBuffer cmdBuffer,
5411 VkResult result)
5412{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005413
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005414 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005415 {
5416 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005417 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5418 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005419 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005420
5421 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005422}
5423
5424VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5425 VkCmdBuffer cmdBuffer,
5426 const VkCmdBufferBeginInfo* pBeginInfo)
5427{
5428 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005429
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005430 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5431
5432 PostBeginCommandBuffer(cmdBuffer, result);
5433
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005434 return result;
5435}
5436
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005437bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005438 VkCmdBuffer cmdBuffer,
5439 VkResult result)
5440{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005441
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005442 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005443 {
5444 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005445 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5446 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005447 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005448
5449 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005450}
5451
5452VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5453 VkCmdBuffer cmdBuffer)
5454{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005455 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5456
5457 PostEndCommandBuffer(cmdBuffer, result);
5458
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005459 return result;
5460}
5461
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005462bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005463 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005464 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005465 VkResult result)
5466{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005467
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005468
5469 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005470 {
5471 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005472 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5473 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005474 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005475
5476 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005477}
5478
5479VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005480 VkCmdBuffer cmdBuffer,
5481 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005482{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005483 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005484
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005485 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005486
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005487 return result;
5488}
5489
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005490bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005491 VkCmdBuffer cmdBuffer,
5492 VkPipelineBindPoint pipelineBindPoint,
5493 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005494{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005495
5496 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5497 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5498 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005499 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005500 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005501 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005502 }
5503
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005504
5505 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005506}
5507
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005508VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5509 VkCmdBuffer cmdBuffer,
5510 VkPipelineBindPoint pipelineBindPoint,
5511 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005512{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005513 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5514
5515 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5516}
5517
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005518VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519{
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005520 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5521}
5522
5523VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5524{
5525 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005526}
5527
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005528VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005530 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005531}
5532
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005533VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005534{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005535 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005536}
5537
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005538VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005539{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005540 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northropf5bd2252015-08-17 11:10:49 -06005541}
5542
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005543VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005544{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005545 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005546}
5547
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005548VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005549{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005550 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005551}
5552
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005553VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005554{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005555 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005556}
5557
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005558VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005559{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005560 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005561}
5562
5563bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005564 VkCmdBuffer cmdBuffer,
5565 const VkDescriptorSet* pDescriptorSets,
5566 const uint32_t* pDynamicOffsets)
5567{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005568 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005569 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005570 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005571
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005572 if(pDynamicOffsets != nullptr)
5573 {
5574 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005575
5576 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005577}
5578
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005579bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005580 VkCmdBuffer cmdBuffer,
5581 VkPipelineBindPoint pipelineBindPoint,
5582 VkPipelineLayout layout,
5583 uint32_t firstSet,
5584 uint32_t setCount,
5585 uint32_t dynamicOffsetCount)
5586{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005587
5588 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5589 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5590 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005591 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005592 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005593 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005594 }
5595
5596
5597
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005598
5599
5600 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005601}
5602
5603VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5604 VkCmdBuffer cmdBuffer,
5605 VkPipelineBindPoint pipelineBindPoint,
5606 VkPipelineLayout layout,
5607 uint32_t firstSet,
5608 uint32_t setCount,
5609 const VkDescriptorSet* pDescriptorSets,
5610 uint32_t dynamicOffsetCount,
5611 const uint32_t* pDynamicOffsets)
5612{
5613 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005614
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005615 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5616
5617 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5618}
5619
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005620bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005621 VkCmdBuffer cmdBuffer,
5622 VkBuffer buffer,
5623 VkDeviceSize offset,
5624 VkIndexType indexType)
5625{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005626
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005627
5628
5629 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5630 indexType > VK_INDEX_TYPE_END_RANGE)
5631 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005632 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005633 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005634 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005635 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005636
5637 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005638}
5639
5640VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5641 VkCmdBuffer cmdBuffer,
5642 VkBuffer buffer,
5643 VkDeviceSize offset,
5644 VkIndexType indexType)
5645{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005646 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5647
5648 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5649}
5650
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005651bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005652 VkCmdBuffer cmdBuffer,
5653 const VkBuffer* pBuffers,
5654 const VkDeviceSize* pOffsets)
5655{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005656 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005657 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005658 }
5659
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005660 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005661 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005662 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005663
5664 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005665}
5666
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005667bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005668 VkCmdBuffer cmdBuffer,
5669 uint32_t startBinding,
5670 uint32_t bindingCount)
5671{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005672
5673
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005674
5675 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005676}
5677
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06005678VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005679 VkCmdBuffer cmdBuffer,
5680 uint32_t startBinding,
5681 uint32_t bindingCount,
5682 const VkBuffer* pBuffers,
5683 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005684{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005685 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005686
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005687 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5688
5689 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005690}
5691
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005692bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005693 VkCmdBuffer cmdBuffer,
5694 uint32_t firstVertex,
5695 uint32_t vertexCount,
5696 uint32_t firstInstance,
5697 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005698{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005699
5700
5701
5702
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005703
5704 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005705}
5706
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005707VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5708 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005709 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005710 uint32_t instanceCount,
5711 uint32_t firstVertex,
5712 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005713{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005714 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005715
5716 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005717}
5718
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005719bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005720 VkCmdBuffer cmdBuffer,
5721 uint32_t firstIndex,
5722 uint32_t indexCount,
5723 int32_t vertexOffset,
5724 uint32_t firstInstance,
5725 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005726{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005727
5728
5729
5730
5731
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005732
5733 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005734}
5735
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005736VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5737 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005738 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005739 uint32_t instanceCount,
5740 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005741 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005742 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005743{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005744 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005745
5746 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5747}
5748
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005749bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005750 VkCmdBuffer cmdBuffer,
5751 VkBuffer buffer,
5752 VkDeviceSize offset,
5753 uint32_t count,
5754 uint32_t stride)
5755{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005756
5757
5758
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005759
5760
5761 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005762}
5763
5764VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5765 VkCmdBuffer cmdBuffer,
5766 VkBuffer buffer,
5767 VkDeviceSize offset,
5768 uint32_t count,
5769 uint32_t stride)
5770{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005771 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5772
5773 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5774}
5775
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005776bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005777 VkCmdBuffer cmdBuffer,
5778 VkBuffer buffer,
5779 VkDeviceSize offset,
5780 uint32_t count,
5781 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005782{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005783
5784
5785
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005786
5787
5788 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005789}
5790
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005791VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5792 VkCmdBuffer cmdBuffer,
5793 VkBuffer buffer,
5794 VkDeviceSize offset,
5795 uint32_t count,
5796 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005797{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005798 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5799
5800 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5801}
5802
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005803bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005804 VkCmdBuffer cmdBuffer,
5805 uint32_t x,
5806 uint32_t y,
5807 uint32_t z)
5808{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005809
5810
5811
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005812
5813 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005814}
5815
5816VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5817 VkCmdBuffer cmdBuffer,
5818 uint32_t x,
5819 uint32_t y,
5820 uint32_t z)
5821{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005822 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5823
5824 PostCmdDispatch(cmdBuffer, x, y, z);
5825}
5826
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005827bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005828 VkCmdBuffer cmdBuffer,
5829 VkBuffer buffer,
5830 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005831{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005832
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005833
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005834
5835 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005836}
5837
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005838VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5839 VkCmdBuffer cmdBuffer,
5840 VkBuffer buffer,
5841 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005842{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005843 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5844
5845 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005846}
5847
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005848bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005849 VkCmdBuffer cmdBuffer,
5850 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005851{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005852 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005853 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005854 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005855
5856 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005857}
5858
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005859bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005860 VkCmdBuffer cmdBuffer,
5861 VkBuffer srcBuffer,
5862 VkBuffer destBuffer,
5863 uint32_t regionCount)
5864{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005865
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005866
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005867
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005868
5869 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005870}
5871
5872VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5873 VkCmdBuffer cmdBuffer,
5874 VkBuffer srcBuffer,
5875 VkBuffer destBuffer,
5876 uint32_t regionCount,
5877 const VkBufferCopy* pRegions)
5878{
5879 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005880
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005881 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5882
5883 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5884}
5885
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005886bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005887 VkCmdBuffer cmdBuffer,
5888 const VkImageCopy* pRegions)
5889{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005890 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005891 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005892 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5893 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5894 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005895 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005896 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005897 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005898 }
5899 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5900 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5901 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005902 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005903 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005904 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005905 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005906 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005907
5908 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005909}
5910
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005911bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005912 VkCmdBuffer cmdBuffer,
5913 VkImage srcImage,
5914 VkImageLayout srcImageLayout,
5915 VkImage destImage,
5916 VkImageLayout destImageLayout,
5917 uint32_t regionCount)
5918{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005919
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005920
5921 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5922 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5923 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005924 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005925 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005926 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005927 }
5928
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005929
5930 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5931 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5932 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005933 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005934 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005935 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005936 }
5937
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005938
5939 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005940}
5941
5942VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5943 VkCmdBuffer cmdBuffer,
5944 VkImage srcImage,
5945 VkImageLayout srcImageLayout,
5946 VkImage destImage,
5947 VkImageLayout destImageLayout,
5948 uint32_t regionCount,
5949 const VkImageCopy* pRegions)
5950{
5951 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005952
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005953 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5954
5955 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5956}
5957
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005958bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005959 VkCmdBuffer cmdBuffer,
5960 const VkImageBlit* pRegions)
5961{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005962 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005963 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005964 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5965 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5966 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005967 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005968 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005969 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005970 }
5971 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5972 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5973 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005974 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005975 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005976 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005977 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005978 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005979
5980 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005981}
5982
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005983bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005984 VkCmdBuffer cmdBuffer,
5985 VkImage srcImage,
5986 VkImageLayout srcImageLayout,
5987 VkImage destImage,
5988 VkImageLayout destImageLayout,
5989 uint32_t regionCount,
5990 VkTexFilter filter)
5991{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005992
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005993
5994 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5995 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5996 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005997 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005998 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005999 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006000 }
6001
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006002
6003 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6004 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6005 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006006 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006007 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006008 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006009 }
6010
6011
6012 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
6013 filter > VK_TEX_FILTER_END_RANGE)
6014 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006015 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006016 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006017 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006018 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006019
6020 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006021}
6022
6023VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
6024 VkCmdBuffer cmdBuffer,
6025 VkImage srcImage,
6026 VkImageLayout srcImageLayout,
6027 VkImage destImage,
6028 VkImageLayout destImageLayout,
6029 uint32_t regionCount,
6030 const VkImageBlit* pRegions,
6031 VkTexFilter filter)
6032{
6033 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006034
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006035 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
6036
6037 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
6038}
6039
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006040bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006041 VkCmdBuffer cmdBuffer,
6042 const VkBufferImageCopy* pRegions)
6043{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006044 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006045 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6047 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6048 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006049 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006050 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006051 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006052 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006053 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006054
6055 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006056}
6057
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006058bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006059 VkCmdBuffer cmdBuffer,
6060 VkBuffer srcBuffer,
6061 VkImage destImage,
6062 VkImageLayout destImageLayout,
6063 uint32_t regionCount)
6064{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006065
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006066
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006067
6068 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6069 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6070 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006071 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006072 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006073 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006074 }
6075
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006076
6077 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006078}
6079
6080VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
6081 VkCmdBuffer cmdBuffer,
6082 VkBuffer srcBuffer,
6083 VkImage destImage,
6084 VkImageLayout destImageLayout,
6085 uint32_t regionCount,
6086 const VkBufferImageCopy* pRegions)
6087{
6088 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006089
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006090 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
6091
6092 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
6093}
6094
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006095bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006096 VkCmdBuffer cmdBuffer,
6097 const VkBufferImageCopy* pRegions)
6098{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006099 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006100 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006101 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6102 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6103 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006104 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006105 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006106 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006107 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006108 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006109
6110 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006111}
6112
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006113bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006114 VkCmdBuffer cmdBuffer,
6115 VkImage srcImage,
6116 VkImageLayout srcImageLayout,
6117 VkBuffer destBuffer,
6118 uint32_t regionCount)
6119{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006120
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006121
6122 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6123 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6124 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006125 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006126 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006127 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006128 }
6129
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006130
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006131
6132 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006133}
6134
6135VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
6136 VkCmdBuffer cmdBuffer,
6137 VkImage srcImage,
6138 VkImageLayout srcImageLayout,
6139 VkBuffer destBuffer,
6140 uint32_t regionCount,
6141 const VkBufferImageCopy* pRegions)
6142{
6143 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006144
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006145 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
6146
6147 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
6148}
6149
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006150bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006151 VkCmdBuffer cmdBuffer,
6152 const uint32_t* pData)
6153{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006154 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006155 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006156 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006157
6158 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006159}
6160
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006161bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006162 VkCmdBuffer cmdBuffer,
6163 VkBuffer destBuffer,
6164 VkDeviceSize destOffset,
6165 VkDeviceSize dataSize)
6166{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006167
6168
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006169
6170
6171 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006172}
6173
6174VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6175 VkCmdBuffer cmdBuffer,
6176 VkBuffer destBuffer,
6177 VkDeviceSize destOffset,
6178 VkDeviceSize dataSize,
6179 const uint32_t* pData)
6180{
6181 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006182
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006183 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6184
6185 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6186}
6187
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006188bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006189 VkCmdBuffer cmdBuffer,
6190 VkBuffer destBuffer,
6191 VkDeviceSize destOffset,
6192 VkDeviceSize fillSize,
6193 uint32_t data)
6194{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006195
6196
6197
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006198
6199
6200 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006201}
6202
6203VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6204 VkCmdBuffer cmdBuffer,
6205 VkBuffer destBuffer,
6206 VkDeviceSize destOffset,
6207 VkDeviceSize fillSize,
6208 uint32_t data)
6209{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006210 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6211
6212 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6213}
6214
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006215bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006216 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12006217 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006218 const VkImageSubresourceRange* pRanges)
6219{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006220 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006221 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006222 }
6223
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006224 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006225 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006226 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006227 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006228
6229 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006230}
6231
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006232bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006233 VkCmdBuffer cmdBuffer,
6234 VkImage image,
6235 VkImageLayout imageLayout,
6236 uint32_t rangeCount)
6237{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006238
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006239
6240 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6241 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6242 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006243 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006244 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006245 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006246 }
6247
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006248
6249 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006250}
6251
6252VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6253 VkCmdBuffer cmdBuffer,
6254 VkImage image,
6255 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12006256 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006257 uint32_t rangeCount,
6258 const VkImageSubresourceRange* pRanges)
6259{
6260 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006261
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006262 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6263
6264 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6265}
6266
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006267bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006268 VkCmdBuffer cmdBuffer,
6269 const VkImageSubresourceRange* pRanges)
6270{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006271 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006272 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006273 /*
6274 * TODO: How do we validation pRanges->aspectMask?
6275 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6276 * VK_IMAGE_ASPECT_STENCIL_BIT.
6277 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006278 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006279
6280 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006281}
6282
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006283bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006284 VkCmdBuffer cmdBuffer,
6285 VkImage image,
6286 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006287 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006288 uint32_t rangeCount)
6289{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006290
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006291
6292 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6293 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6294 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006295 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006296 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006297 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006298 }
6299
6300
6301
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006302
6303 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006304}
6305
Chris Forbes2951d7d2015-06-22 17:21:59 +12006306VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006307 VkCmdBuffer cmdBuffer,
6308 VkImage image,
6309 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006310 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006311 uint32_t rangeCount,
6312 const VkImageSubresourceRange* pRanges)
6313{
Chris Forbes2951d7d2015-06-22 17:21:59 +12006314 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006315
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006316 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006317
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006318 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006319}
6320
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006321bool PreCmdClearAttachments(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006322 VkCmdBuffer cmdBuffer,
6323 const VkClearColorValue* pColor,
6324 const VkRect3D* pRects)
6325{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006326 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006327 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006328 }
6329
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006330 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006331 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006332 }
6333
6334 return true;
6335}
6336
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006337VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6338 VkCmdBuffer cmdBuffer,
6339 uint32_t attachmentCount,
6340 const VkClearAttachment* pAttachments,
6341 uint32_t rectCount,
6342 const VkRect3D* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006343{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006344 for (uint32_t i = 0; i < attachmentCount; i++) {
6345 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006346 }
6347
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006348 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006349}
6350
6351bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006352 VkCmdBuffer cmdBuffer,
6353 const VkImageResolve* pRegions)
6354{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006355 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006356 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006357 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6358 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6359 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006360 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006361 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006362 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006363 }
6364 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6365 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6366 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006367 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006368 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006369 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006370 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006371 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006372
6373 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006374}
6375
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006376bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006377 VkCmdBuffer cmdBuffer,
6378 VkImage srcImage,
6379 VkImageLayout srcImageLayout,
6380 VkImage destImage,
6381 VkImageLayout destImageLayout,
6382 uint32_t regionCount)
6383{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006384
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006385
6386 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6387 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6388 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006389 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006390 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006391 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006392 }
6393
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006394
6395 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6396 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6397 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006398 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006399 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006400 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006401 }
6402
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006403
6404 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006405}
6406
6407VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6408 VkCmdBuffer cmdBuffer,
6409 VkImage srcImage,
6410 VkImageLayout srcImageLayout,
6411 VkImage destImage,
6412 VkImageLayout destImageLayout,
6413 uint32_t regionCount,
6414 const VkImageResolve* pRegions)
6415{
6416 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006417
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006418 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6419
6420 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6421}
6422
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006423bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006424 VkCmdBuffer cmdBuffer,
6425 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006426 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006427{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006428
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006429
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006430
6431 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006432}
6433
6434VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6435 VkCmdBuffer cmdBuffer,
6436 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006437 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006438{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006439 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006440
Tony Barbourc2e987e2015-06-29 16:20:35 -06006441 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006442}
6443
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006444bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006445 VkCmdBuffer cmdBuffer,
6446 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006447 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006448{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006449
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006450
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006451
6452 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006453}
6454
6455VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6456 VkCmdBuffer cmdBuffer,
6457 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006458 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006459{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006460 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006461
Tony Barbourc2e987e2015-06-29 16:20:35 -06006462 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006463}
6464
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006465bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006466 VkCmdBuffer cmdBuffer,
6467 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006468 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006469{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006470 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006471 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006472 }
6473
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006474 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006475 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006476 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006477
6478 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006479}
6480
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006481bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006482 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006483 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006484 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006485 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006486 uint32_t memBarrierCount)
6487{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006488
Tony Barbourc2e987e2015-06-29 16:20:35 -06006489
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006490
6491
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006492
6493 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006494}
6495
6496VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6497 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006498 uint32_t eventCount,
6499 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006500 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006501 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006502 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006503 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006504{
6505 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006506
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006507 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006508
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006509 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006510}
6511
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006512bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006513 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006514 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006515{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006516 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006517 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006518 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006519
6520 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006521}
6522
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006523bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006524 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006525 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006526 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006527 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006528 uint32_t memBarrierCount)
6529{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006530
Tony Barbourc2e987e2015-06-29 16:20:35 -06006531
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006532
6533
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006534
6535 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006536}
6537
6538VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6539 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006540 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006541 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006542 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006543 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006544 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006545{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006546 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006547
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006548 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006549
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006550 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006551}
6552
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006553bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006554 VkCmdBuffer cmdBuffer,
6555 VkQueryPool queryPool,
6556 uint32_t slot,
6557 VkQueryControlFlags flags)
6558{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006559
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006560
6561
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006562
6563 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006564}
6565
6566VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6567 VkCmdBuffer cmdBuffer,
6568 VkQueryPool queryPool,
6569 uint32_t slot,
6570 VkQueryControlFlags flags)
6571{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006572 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6573
6574 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6575}
6576
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006577bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006578 VkCmdBuffer cmdBuffer,
6579 VkQueryPool queryPool,
6580 uint32_t slot)
6581{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006582
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006583
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006584
6585 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006586}
6587
6588VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6589 VkCmdBuffer cmdBuffer,
6590 VkQueryPool queryPool,
6591 uint32_t slot)
6592{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006593 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6594
6595 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6596}
6597
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006598bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006599 VkCmdBuffer cmdBuffer,
6600 VkQueryPool queryPool,
6601 uint32_t startQuery,
6602 uint32_t queryCount)
6603{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006605
6606
6607
6608 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006609}
6610
6611VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6612 VkCmdBuffer cmdBuffer,
6613 VkQueryPool queryPool,
6614 uint32_t startQuery,
6615 uint32_t queryCount)
6616{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006617 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6618
6619 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6620}
6621
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006622bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006623 VkCmdBuffer cmdBuffer,
6624 VkTimestampType timestampType,
6625 VkBuffer destBuffer,
6626 VkDeviceSize destOffset)
6627{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006628
6629 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6630 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6631 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006632 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006633 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006634 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006635 }
6636
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006637
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006638
6639 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006640}
6641
6642VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6643 VkCmdBuffer cmdBuffer,
6644 VkTimestampType timestampType,
6645 VkBuffer destBuffer,
6646 VkDeviceSize destOffset)
6647{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006648 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6649
6650 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6651}
6652
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006653bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006654 VkCmdBuffer cmdBuffer,
6655 VkQueryPool queryPool,
6656 uint32_t startQuery,
6657 uint32_t queryCount,
6658 VkBuffer destBuffer,
6659 VkDeviceSize destOffset,
6660 VkDeviceSize destStride,
6661 VkQueryResultFlags flags)
6662{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006663
6664
6665
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006666
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006667
6668
6669
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006670
6671 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006672}
6673
Jeremy Hayescf469132015-04-17 10:36:53 -06006674VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006675 VkCmdBuffer cmdBuffer,
6676 VkQueryPool queryPool,
6677 uint32_t startQuery,
6678 uint32_t queryCount,
6679 VkBuffer destBuffer,
6680 VkDeviceSize destOffset,
6681 VkDeviceSize destStride,
6682 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006683{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006684 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
6685
6686 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006687}
6688
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006689bool PreCmdPushConstants(
6690 VkCmdBuffer cmdBuffer,
6691 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006692{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006693 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006694 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006695 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006696
6697 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006698}
6699
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006700bool PostCmdPushConstants(
6701 VkCmdBuffer cmdBuffer,
6702 VkPipelineLayout layout,
6703 VkShaderStageFlags stageFlags,
6704 uint32_t start,
6705 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006706{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006707
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006708
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006709
6710
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006711
6712 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006713}
6714
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006715VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6716 VkCmdBuffer cmdBuffer,
6717 VkPipelineLayout layout,
6718 VkShaderStageFlags stageFlags,
6719 uint32_t start,
6720 uint32_t length,
6721 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006722{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006723 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006724
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006725 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006726
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006727 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006728}
6729
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006730bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006731 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006732 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006733{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006734 if(pRenderPassBegin != nullptr)
6735 {
6736 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006737 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006738 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006739 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006740 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006741 }
Cody Northropc332eef2015-08-04 11:51:03 -06006742 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006743 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006744 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006745 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006746
6747 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006748}
6749
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006750bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006751 VkCmdBuffer cmdBuffer,
6752 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006753{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006754
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006755 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6756 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6757 {
6758 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6759 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6760 return false;
6761 }
6762
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006763 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006764}
6765
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006766VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6767 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006768 const VkRenderPassBeginInfo* pRenderPassBegin,
6769 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006770{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006771 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6772
Chia-I Wuc278df82015-07-07 11:50:03 +08006773 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006774
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006775 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006776}
6777
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006778bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08006779 VkCmdBuffer cmdBuffer,
6780 VkRenderPassContents contents)
6781{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006782
6783 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006784 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006785 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006786 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006787 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6788 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006789 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006790
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006791 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006792}
6793
6794VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6795 VkCmdBuffer cmdBuffer,
6796 VkRenderPassContents contents)
6797{
Chia-I Wuc278df82015-07-07 11:50:03 +08006798 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6799
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006800 PostCmdNextSubpass(cmdBuffer, contents);
6801}
6802
6803bool PostCmdEndRenderPass(
6804 VkCmdBuffer cmdBuffer)
6805{
6806
6807 return true;
6808}
6809
6810VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6811 VkCmdBuffer cmdBuffer)
6812{
6813 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6814
6815 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006816}
6817
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006818bool PreCmdExecuteCommands(
6819 VkCmdBuffer cmdBuffer,
6820 const VkCmdBuffer* pCmdBuffers)
6821{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006822 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006823 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006824 }
6825
6826 return true;
6827}
6828
6829bool PostCmdExecuteCommands(
6830 VkCmdBuffer cmdBuffer,
6831 uint32_t cmdBuffersCount)
6832{
6833
6834
6835 return true;
6836}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006837
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006838VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006839 VkCmdBuffer cmdBuffer,
6840 uint32_t cmdBuffersCount,
6841 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006842{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006843 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6844
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006845 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6846
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006847 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006848}
6849
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006850VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006851{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006852 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006853 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006854 }
6855
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006856 /* loader uses this to force layer initialization; device object is wrapped */
6857 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006858 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006859 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006860 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006861
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006862 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006863 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006864 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006865 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006866 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006867 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006868 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006869 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006870 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006871 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006872 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006873 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006874 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006875 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006876 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006877 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006878 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006879 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006880 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006881 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006882 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006883 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006884 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006885 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006886 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006887 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006888 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006889 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006890 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006891 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006892 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006893 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006894 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006895 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006896 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006897 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006898 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006899 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006900 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006901 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006902 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006903 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006904 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006905 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006906 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006907 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006908 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006909 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006910 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006911 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006912 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006913 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006914 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006915 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006916 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006917 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006918 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006919 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine6715e522015-09-15 14:59:14 -05006920 if (!strcmp(funcName, "vkCreateShaderModule"))
6921 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006922 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006923 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006924 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006925 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006926 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006927 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006928 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006929 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006930 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006931 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006932 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006933 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006934 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006935 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006936 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006937 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006938 if (!strcmp(funcName, "vkCmdSetViewport"))
6939 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006940 if (!strcmp(funcName, "vkCmdSetScissor"))
6941 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006942 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6943 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6944 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6945 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6946 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6947 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6948 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6949 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6950 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6951 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6952 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6953 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6954 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6955 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006956 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006957 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006958 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006959 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006960 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006961 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006962 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006963 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006964 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006965 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006966 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006967 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006968 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006969 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006970 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006971 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006972 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006973 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006974 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006975 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006976 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006977 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006978 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006979 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006980 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006981 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006982 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006983 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006984 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006985 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006986 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006987 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006988 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006989 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006990 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006991 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006992 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006993 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006994 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006995 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006996 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006997 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006998 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006999 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007000 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007001 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007002 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007003 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007004 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007005 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007006 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007007 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007008 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007009 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007010 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007011 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007012 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007013 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007014 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007015 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007016 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007017 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007018 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007019 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007020 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007021 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007022 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007023 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007024 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007025 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08007026 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007027 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06007028
Jon Ashburn6f8cd632015-06-01 09:37:38 -06007029 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007030 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007031 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007032 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007033 }
7034}
7035
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007036VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007037{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007038 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007039 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007040 }
7041
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007042 /* loader uses this to force layer initialization; instance object is wrapped */
7043 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007044 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007045 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007046 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007047
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007048 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007049 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007050 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007051 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007052 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007053 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007054 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007055 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007056 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007057 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06007058 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007059 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06007060 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
7061 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
7062 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
7063 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
7064 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
7065 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
7066 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
7067 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06007068
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007069 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007070 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007071 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06007072 return fptr;
7073
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007074 {
7075 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
7076 return NULL;
7077 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
7078 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007079}