blob: e52f7de8a7e9342efab1075d55ffc1b714a3ca6c [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_SUCCESS:
254 {
255 return "VK_SUCCESS";
256 break;
257 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600258 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600259 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600260 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600261 break;
262 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600263 case VK_ERROR_DEVICE_LOST:
264 {
265 return "VK_ERROR_DEVICE_LOST";
266 break;
267 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600268 default:
269 {
270 return "unrecognized enumerator";
271 break;
272 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600273 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600274}
275
276static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600277bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
278{
Courtney Goeltzenleuchter75295792015-09-10 16:25:49 -0600279 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600280 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
281 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
282 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
283 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
284 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
285 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
286 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
287 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
288 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600289 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
290 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
291 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600292 if(enumerator & (~allFlags))
293 {
294 return false;
295 }
296
297 return true;
298}
299
300static
301std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
302{
303 if(!ValidateEnumerator(enumerator))
304 {
305 return "unrecognized enumerator";
306 }
307
308 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600309 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
310 {
311 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
312 }
313 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
314 {
315 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
316 }
317 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
318 {
319 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
320 }
321 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
322 {
323 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
324 }
325 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
326 {
327 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
328 }
329 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
330 {
331 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
332 }
333 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
334 {
335 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
336 }
337 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
338 {
339 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
340 }
341 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
342 {
343 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
344 }
345 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
346 {
347 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
348 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600349 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
350 {
351 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
352 }
353 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
354 {
355 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
356 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600357
358 std::string enumeratorString;
359 for(auto const& string : strings)
360 {
361 enumeratorString += string;
362
363 if(string != strings.back())
364 {
365 enumeratorString += '|';
366 }
367 }
368
369 return enumeratorString;
370}
371
372static
373bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
374{
375 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600376 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600377 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
378 VK_IMAGE_USAGE_STORAGE_BIT |
379 VK_IMAGE_USAGE_SAMPLED_BIT |
380 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
381 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600382 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600383 if(enumerator & (~allFlags))
384 {
385 return false;
386 }
387
388 return true;
389}
390
391static
392std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
393{
394 if(!ValidateEnumerator(enumerator))
395 {
396 return "unrecognized enumerator";
397 }
398
399 std::vector<std::string> strings;
400 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
401 {
402 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
403 }
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600404 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600405 {
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600406 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600407 }
408 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
409 {
410 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
411 }
412 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
413 {
414 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
415 }
416 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
417 {
418 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
419 }
420 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
421 {
422 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
423 }
424 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
425 {
426 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
427 }
428 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
429 {
430 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
431 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600432
433 std::string enumeratorString;
434 for(auto const& string : strings)
435 {
436 enumeratorString += string;
437
438 if(string != strings.back())
439 {
440 enumeratorString += '|';
441 }
442 }
443
444 return enumeratorString;
445}
446
447static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600448bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
449{
450 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
451 VK_QUEUE_DMA_BIT |
452 VK_QUEUE_COMPUTE_BIT |
453 VK_QUEUE_SPARSE_MEMMGR_BIT |
454 VK_QUEUE_GRAPHICS_BIT);
455 if(enumerator & (~allFlags))
456 {
457 return false;
458 }
459
460 return true;
461}
462
463static
464std::string EnumeratorString(VkQueueFlagBits const& enumerator)
465{
466 if(!ValidateEnumerator(enumerator))
467 {
468 return "unrecognized enumerator";
469 }
470
471 std::vector<std::string> strings;
472 if(enumerator & VK_QUEUE_EXTENDED_BIT)
473 {
474 strings.push_back("VK_QUEUE_EXTENDED_BIT");
475 }
476 if(enumerator & VK_QUEUE_DMA_BIT)
477 {
478 strings.push_back("VK_QUEUE_DMA_BIT");
479 }
480 if(enumerator & VK_QUEUE_COMPUTE_BIT)
481 {
482 strings.push_back("VK_QUEUE_COMPUTE_BIT");
483 }
484 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
485 {
486 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
487 }
488 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
489 {
490 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
491 }
492
493 std::string enumeratorString;
494 for(auto const& string : strings)
495 {
496 enumeratorString += string;
497
498 if(string != strings.back())
499 {
500 enumeratorString += '|';
501 }
502 }
503
504 return enumeratorString;
505}
506
507static
508bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
509{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600510 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600511 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
512 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
513 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
514 VK_MEMORY_PROPERTY_DEVICE_ONLY);
515 if(enumerator & (~allFlags))
516 {
517 return false;
518 }
519
520 return true;
521}
522
523static
524std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
525{
526 if(!ValidateEnumerator(enumerator))
527 {
528 return "unrecognized enumerator";
529 }
530
531 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600532 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
533 {
534 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
535 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600536 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
537 {
538 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
539 }
540 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
541 {
542 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
543 }
544 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
545 {
546 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
547 }
548 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
549 {
550 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
551 }
552
553 std::string enumeratorString;
554 for(auto const& string : strings)
555 {
556 enumeratorString += string;
557
558 if(string != strings.back())
559 {
560 enumeratorString += '|';
561 }
562 }
563
564 return enumeratorString;
565}
566
567static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600568bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600569{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600570 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600571 if(enumerator & (~allFlags))
572 {
573 return false;
574 }
575
576 return true;
577}
578
579static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600580std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600581{
582 if(!ValidateEnumerator(enumerator))
583 {
584 return "unrecognized enumerator";
585 }
586
587 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600588 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600589 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600590 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600591 }
592
593 std::string enumeratorString;
594 for(auto const& string : strings)
595 {
596 enumeratorString += string;
597
598 if(string != strings.back())
599 {
600 enumeratorString += '|';
601 }
602 }
603
604 return enumeratorString;
605}
606
607static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600608bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
609{
610 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
611 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
612 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
613 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600614 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600615 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600616 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600617
618 return true;
619}
620
621static
622std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
623{
624 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600625 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600626 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600627 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600628
629 std::vector<std::string> strings;
630 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600631 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600632 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600633 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600634 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600635 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600636 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600637 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600638 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600639 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600640 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600641 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600642
643 std::string enumeratorString;
644 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600645 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600646 enumeratorString += string;
647
648 if(string != strings.back())
649 {
650 enumeratorString += '|';
651 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600652 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600653
654 return enumeratorString;
655}
656
657static
658bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
659{
660 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
661 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600662 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600663 return false;
664 }
665
666 return true;
667}
668
669static
670std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
671{
672 if(!ValidateEnumerator(enumerator))
673 {
674 return "unrecognized enumerator";
675 }
676
677 std::vector<std::string> strings;
678 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
679 {
680 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
681 }
682
683 std::string enumeratorString;
684 for(auto const& string : strings)
685 {
686 enumeratorString += string;
687
688 if(string != strings.back())
689 {
690 enumeratorString += '|';
691 }
692 }
693
694 return enumeratorString;
695}
696
697static
698bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
699{
700 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
701 if(enumerator & (~allFlags))
702 {
703 return false;
704 }
705
706 return true;
707}
708
709static
710std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
711{
712 if(!ValidateEnumerator(enumerator))
713 {
714 return "unrecognized enumerator";
715 }
716
717 std::vector<std::string> strings;
718 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
719 {
720 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
721 }
722
723 std::string enumeratorString;
724 for(auto const& string : strings)
725 {
726 enumeratorString += string;
727
728 if(string != strings.back())
729 {
730 enumeratorString += '|';
731 }
732 }
733
734 return enumeratorString;
735}
736
737static
738bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
739{
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600740 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
741 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
742 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
743 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
749 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600751 if(enumerator & (~allFlags))
752 {
753 return false;
754 }
755
756 return true;
757}
758
759static
760std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
761{
762 if(!ValidateEnumerator(enumerator))
763 {
764 return "unrecognized enumerator";
765 }
766
767 std::vector<std::string> strings;
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600768 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600769 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600770 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600771 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600772 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600773 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600774 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600775 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600776 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600777 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600778 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600779 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600780 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600781 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600782 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600783 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600784 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600785 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600786 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600787 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600788 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600789 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600790 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600791 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600792 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600793 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600794 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600795 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600797 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600799 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600801 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600803 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600805 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600806 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600807 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600808 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600809 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600810 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600811 }
812
813 std::string enumeratorString;
814 for(auto const& string : strings)
815 {
816 enumeratorString += string;
817
818 if(string != strings.back())
819 {
820 enumeratorString += '|';
821 }
822 }
823
824 return enumeratorString;
825}
826
827static
828bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
829{
830 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
831 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
832 VK_QUERY_RESULT_WAIT_BIT |
833 VK_QUERY_RESULT_64_BIT |
834 VK_QUERY_RESULT_DEFAULT);
835 if(enumerator & (~allFlags))
836 {
837 return false;
838 }
839
840 return true;
841}
842
843static
844std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
845{
846 if(!ValidateEnumerator(enumerator))
847 {
848 return "unrecognized enumerator";
849 }
850
851 std::vector<std::string> strings;
852 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
853 {
854 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
855 }
856 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
857 {
858 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
859 }
860 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
861 {
862 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
863 }
864 if(enumerator & VK_QUERY_RESULT_64_BIT)
865 {
866 strings.push_back("VK_QUERY_RESULT_64_BIT");
867 }
868 if(enumerator & VK_QUERY_RESULT_DEFAULT)
869 {
870 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600871 }
872
873 std::string enumeratorString;
874 for(auto const& string : strings)
875 {
876 enumeratorString += string;
877
878 if(string != strings.back())
879 {
880 enumeratorString += '|';
881 }
882 }
883
884 return enumeratorString;
885}
886
887static
888bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
889{
890 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
891 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
892 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
893 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
894 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
895 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
896 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
897 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600898 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600899 if(enumerator & (~allFlags))
900 {
901 return false;
902 }
903
904 return true;
905}
906
907static
908std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
909{
910 if(!ValidateEnumerator(enumerator))
911 {
912 return "unrecognized enumerator";
913 }
914
915 std::vector<std::string> strings;
916 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
917 {
918 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
919 }
920 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
921 {
922 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
923 }
924 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
925 {
926 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
927 }
928 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
929 {
930 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
931 }
932 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
933 {
934 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
935 }
936 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
937 {
938 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
939 }
940 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
941 {
942 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
943 }
944 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
947 }
948 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
949 {
950 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
951 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600952
953 std::string enumeratorString;
954 for(auto const& string : strings)
955 {
956 enumeratorString += string;
957
958 if(string != strings.back())
959 {
960 enumeratorString += '|';
961 }
962 }
963
964 return enumeratorString;
965}
966
967static
968bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
969{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600970 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
971 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600972 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600973 if(enumerator & (~allFlags))
974 {
975 return false;
976 }
977
978 return true;
979}
980
981static
982std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
983{
984 if(!ValidateEnumerator(enumerator))
985 {
986 return "unrecognized enumerator";
987 }
988
989 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600990 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
991 {
992 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
993 }
994 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
995 {
996 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
997 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600998 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600999 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001000 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001001 }
1002
1003 std::string enumeratorString;
1004 for(auto const& string : strings)
1005 {
1006 enumeratorString += string;
1007
1008 if(string != strings.back())
1009 {
1010 enumeratorString += '|';
1011 }
1012 }
1013
1014 return enumeratorString;
1015}
1016
1017static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001018bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1019{
1020 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001021 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1022 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001023 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001024 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001025 if(enumerator & (~allFlags))
1026 {
1027 return false;
1028 }
1029
1030 return true;
1031}
1032
1033static
1034std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1035{
1036 if(!ValidateEnumerator(enumerator))
1037 {
1038 return "unrecognized enumerator";
1039 }
1040
1041 std::vector<std::string> strings;
1042 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1043 {
1044 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1045 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001046 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1047 {
1048 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1049 }
1050 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1051 {
1052 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1053 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001054 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1055 {
1056 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1057 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001058 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001059 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001060 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001061 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001062
1063 std::string enumeratorString;
1064 for(auto const& string : strings)
1065 {
1066 enumeratorString += string;
1067
1068 if(string != strings.back())
1069 {
1070 enumeratorString += '|';
1071 }
1072 }
1073
1074 return enumeratorString;
1075}
1076
1077static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001078bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001079{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001080 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1081 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001082 if(enumerator & (~allFlags))
1083 {
1084 return false;
1085 }
1086
1087 return true;
1088}
1089
1090static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001091std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001092{
1093 if(!ValidateEnumerator(enumerator))
1094 {
1095 return "unrecognized enumerator";
1096 }
1097
1098 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001099 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001100 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001101 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001102 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001103 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001104 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001105 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001106 }
1107
1108 std::string enumeratorString;
1109 for(auto const& string : strings)
1110 {
1111 enumeratorString += string;
1112
1113 if(string != strings.back())
1114 {
1115 enumeratorString += '|';
1116 }
1117 }
1118
1119 return enumeratorString;
1120}
1121
1122static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001123bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1124{
1125 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1126 VK_CHANNEL_B_BIT |
1127 VK_CHANNEL_G_BIT |
1128 VK_CHANNEL_R_BIT);
1129 if(enumerator & (~allFlags))
1130 {
1131 return false;
1132 }
1133
1134 return true;
1135}
1136
1137static
1138std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1139{
1140 if(!ValidateEnumerator(enumerator))
1141 {
1142 return "unrecognized enumerator";
1143 }
1144
1145 std::vector<std::string> strings;
1146 if(enumerator & VK_CHANNEL_A_BIT)
1147 {
1148 strings.push_back("VK_CHANNEL_A_BIT");
1149 }
1150 if(enumerator & VK_CHANNEL_B_BIT)
1151 {
1152 strings.push_back("VK_CHANNEL_B_BIT");
1153 }
1154 if(enumerator & VK_CHANNEL_G_BIT)
1155 {
1156 strings.push_back("VK_CHANNEL_G_BIT");
1157 }
1158 if(enumerator & VK_CHANNEL_R_BIT)
1159 {
1160 strings.push_back("VK_CHANNEL_R_BIT");
1161 }
1162
1163 std::string enumeratorString;
1164 for(auto const& string : strings)
1165 {
1166 enumeratorString += string;
1167
1168 if(string != strings.back())
1169 {
1170 enumeratorString += '|';
1171 }
1172 }
1173
1174 return enumeratorString;
1175}
1176
1177static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001178bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001179{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001180 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1181 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1182 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001183 if(enumerator & (~allFlags))
1184 {
1185 return false;
1186 }
1187
1188 return true;
1189}
1190
1191static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001192std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001193{
1194 if(!ValidateEnumerator(enumerator))
1195 {
1196 return "unrecognized enumerator";
1197 }
1198
1199 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001200 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001201 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001202 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1203 }
1204 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1205 {
1206 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1207 }
1208 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1209 {
1210 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001211 }
1212
1213 std::string enumeratorString;
1214 for(auto const& string : strings)
1215 {
1216 enumeratorString += string;
1217
1218 if(string != strings.back())
1219 {
1220 enumeratorString += '|';
1221 }
1222 }
1223
1224 return enumeratorString;
1225}
1226
1227static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001228bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001229{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001230 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1231 VK_SHADER_STAGE_FRAGMENT_BIT |
1232 VK_SHADER_STAGE_GEOMETRY_BIT |
1233 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001234 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1235 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001236 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001237 if(enumerator & (~allFlags))
1238 {
1239 return false;
1240 }
1241
1242 return true;
1243}
1244
1245static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001246std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001247{
1248 if(!ValidateEnumerator(enumerator))
1249 {
1250 return "unrecognized enumerator";
1251 }
1252
1253 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001254 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001255 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001256 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001257 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001258 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001259 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001260 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001261 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001262 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001263 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001264 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1265 }
1266 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1267 {
1268 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1269 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001270 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001271 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001272 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001273 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001274 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001275 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001276 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001277 }
1278 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1279 {
1280 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001281 }
1282
1283 std::string enumeratorString;
1284 for(auto const& string : strings)
1285 {
1286 enumeratorString += string;
1287
1288 if(string != strings.back())
1289 {
1290 enumeratorString += '|';
1291 }
1292 }
1293
1294 return enumeratorString;
1295}
1296
1297static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001298bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001299{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001300 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1301 VK_PIPELINE_STAGE_HOST_BIT |
1302 VK_PIPELINE_STAGE_TRANSFER_BIT |
1303 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1304 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1305 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001306 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001307 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001308 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1309 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1310 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001311 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001312 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1313 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1314 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1315 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001316 if(enumerator & (~allFlags))
1317 {
1318 return false;
1319 }
1320
1321 return true;
1322}
1323
1324static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001325std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001326{
1327 if(!ValidateEnumerator(enumerator))
1328 {
1329 return "unrecognized enumerator";
1330 }
1331
1332 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001333 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001334 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001335 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001336 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001337 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001338 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001339 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001340 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001341 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001342 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001343 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001344 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001345 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001346 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001347 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001348 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001349 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001350 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001351 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001352 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001353 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001354 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001355 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001356 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001357 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001358 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001359 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001360 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001361 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001362 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001363 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001364 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001365 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001366 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001367 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001368 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001369 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001370 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001371 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1372 }
1373 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1374 {
1375 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1376 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001377 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001378 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001379 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001380 }
1381 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1382 {
1383 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1384 }
1385 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1386 {
1387 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1388 }
1389 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1390 {
1391 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1392 }
1393 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1394 {
1395 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001396 }
1397
1398 std::string enumeratorString;
1399 for(auto const& string : strings)
1400 {
1401 enumeratorString += string;
1402
1403 if(string != strings.back())
1404 {
1405 enumeratorString += '|';
1406 }
1407 }
1408
1409 return enumeratorString;
1410}
1411
1412static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001413bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001414{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001415 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1416 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1417 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1418 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1419 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001420 if(enumerator & (~allFlags))
1421 {
1422 return false;
1423 }
1424
1425 return true;
1426}
1427
1428static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001429std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001430{
1431 if(!ValidateEnumerator(enumerator))
1432 {
1433 return "unrecognized enumerator";
1434 }
1435
1436 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001438 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001440 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001441 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001442 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001443 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001444 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001445 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001446 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1448 }
1449 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1450 {
1451 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1452 }
1453 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1454 {
1455 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001456 }
1457
1458 std::string enumeratorString;
1459 for(auto const& string : strings)
1460 {
1461 enumeratorString += string;
1462
1463 if(string != strings.back())
1464 {
1465 enumeratorString += '|';
1466 }
1467 }
1468
1469 return enumeratorString;
1470}
1471
1472static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001473bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001474{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001475 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1476 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1477 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1478 VK_MEMORY_INPUT_SHADER_READ_BIT |
1479 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1480 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1481 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1482 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1483 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1484 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001485 if(enumerator & (~allFlags))
1486 {
1487 return false;
1488 }
1489
1490 return true;
1491}
1492
1493static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001494std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001495{
1496 if(!ValidateEnumerator(enumerator))
1497 {
1498 return "unrecognized enumerator";
1499 }
1500
1501 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001502 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001503 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001504 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1505 }
1506 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1507 {
1508 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1509 }
1510 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1511 {
1512 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1513 }
1514 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1515 {
1516 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1517 }
1518 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1519 {
1520 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1521 }
1522 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1523 {
1524 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1525 }
1526 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1527 {
1528 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1529 }
1530 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1531 {
1532 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1533 }
1534 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1535 {
1536 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1537 }
1538 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1539 {
1540 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001541 }
1542
1543 std::string enumeratorString;
1544 for(auto const& string : strings)
1545 {
1546 enumeratorString += string;
1547
1548 if(string != strings.back())
1549 {
1550 enumeratorString += '|';
1551 }
1552 }
1553
1554 return enumeratorString;
1555}
1556
1557static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001558bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001559{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001560 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1561 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001562 if(enumerator & (~allFlags))
1563 {
1564 return false;
1565 }
1566
1567 return true;
1568}
1569
1570static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001571std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001572{
1573 if(!ValidateEnumerator(enumerator))
1574 {
1575 return "unrecognized enumerator";
1576 }
1577
1578 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001579 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001580 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001581 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001582 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001583 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001584 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001585 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001586 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001587
1588 std::string enumeratorString;
1589 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001590 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001591 enumeratorString += string;
1592
1593 if(string != strings.back())
1594 {
1595 enumeratorString += '|';
1596 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001597 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001598
1599 return enumeratorString;
1600}
1601
1602static
1603bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1604{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001605 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001606 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001607 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001608 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001609 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001610
1611 return true;
1612}
1613
1614static
1615std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1616{
1617 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001618 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001619 return "unrecognized enumerator";
1620 }
1621
1622 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001623 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001624 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001625 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001626 }
1627
1628 std::string enumeratorString;
1629 for(auto const& string : strings)
1630 {
1631 enumeratorString += string;
1632
1633 if(string != strings.back())
1634 {
1635 enumeratorString += '|';
1636 }
1637 }
1638
1639 return enumeratorString;
1640}
1641
1642static
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001643bool ValidateEnumerator(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001644{
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001645 VkCmdBufferUsageFlags allFlags = (VkCmdBufferUsageFlags)(VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1646 VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1647 VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001648 if(enumerator & (~allFlags))
1649 {
1650 return false;
1651 }
1652
1653 return true;
1654}
1655
1656static
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001657std::string EnumeratorString(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001658{
1659 if(!ValidateEnumerator(enumerator))
1660 {
1661 return "unrecognized enumerator";
1662 }
1663
1664 std::vector<std::string> strings;
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001665 if(enumerator & VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001666 {
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001667 strings.push_back("VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001668 }
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001669 if(enumerator & VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001670 {
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001671 strings.push_back("VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001672 }
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001673 if(enumerator & VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001674 {
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001675 strings.push_back("VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001676 }
1677
1678 std::string enumeratorString;
1679 for(auto const& string : strings)
1680 {
1681 enumeratorString += string;
1682
1683 if(string != strings.back())
1684 {
1685 enumeratorString += '|';
1686 }
1687 }
1688
1689 return enumeratorString;
1690}
1691
1692static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001693bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001694{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001695 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001696 if(enumerator & (~allFlags))
1697 {
1698 return false;
1699 }
1700
1701 return true;
1702}
1703
1704static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001705std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001706{
1707 if(!ValidateEnumerator(enumerator))
1708 {
1709 return "unrecognized enumerator";
1710 }
1711
1712 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001713 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001714 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001715 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001716 }
1717
1718 std::string enumeratorString;
1719 for(auto const& string : strings)
1720 {
1721 enumeratorString += string;
1722
1723 if(string != strings.back())
1724 {
1725 enumeratorString += '|';
1726 }
1727 }
1728
1729 return enumeratorString;
1730}
1731
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001732static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001733bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001734{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001735 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1736 VK_IMAGE_ASPECT_STENCIL_BIT |
1737 VK_IMAGE_ASPECT_DEPTH_BIT |
1738 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001739 if(enumerator & (~allFlags))
1740 {
1741 return false;
1742 }
1743
1744 return true;
1745}
1746
1747static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001748std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001749{
1750 if(!ValidateEnumerator(enumerator))
1751 {
1752 return "unrecognized enumerator";
1753 }
1754
1755 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001756 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001757 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001758 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1759 }
1760 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1761 {
1762 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1763 }
1764 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1765 {
1766 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1767 }
1768 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1769 {
1770 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1771 }
1772
1773 std::string enumeratorString;
1774 for(auto const& string : strings)
1775 {
1776 enumeratorString += string;
1777
1778 if(string != strings.back())
1779 {
1780 enumeratorString += '|';
1781 }
1782 }
1783
1784 return enumeratorString;
1785}
1786
1787static
1788bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1789{
1790 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1791 if(enumerator & (~allFlags))
1792 {
1793 return false;
1794 }
1795
1796 return true;
1797}
1798
1799static
1800std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1801{
1802 if(!ValidateEnumerator(enumerator))
1803 {
1804 return "unrecognized enumerator";
1805 }
1806
1807 std::vector<std::string> strings;
1808 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1809 {
1810 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001811 }
1812
1813 std::string enumeratorString;
1814 for(auto const& string : strings)
1815 {
1816 enumeratorString += string;
1817
1818 if(string != strings.back())
1819 {
1820 enumeratorString += '|';
1821 }
1822 }
1823
1824 return enumeratorString;
1825}
1826
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001827VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1828 const VkInstanceCreateInfo* pCreateInfo,
1829 VkInstance* pInstance)
1830{
1831 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1832 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1833
1834 if (result == VK_SUCCESS) {
1835 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1836 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001837 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001838
1839 InitParamChecker(data);
1840 }
1841
1842 return result;
1843}
1844
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001845VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001846 VkInstance instance)
1847{
1848 // Grab the key before the instance is destroyed.
1849 dispatch_key key = get_dispatch_key(instance);
1850 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001851 pTable->DestroyInstance(instance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001852
1853 // Clean up logging callback, if any
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001854 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1855 while (my_data->logging_callback.size() > 0) {
1856 VkDbgMsgCallback callback = my_data->logging_callback.back();
1857 layer_destroy_msg_callback(my_data->report_data, callback);
1858 my_data->logging_callback.pop_back();
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001859 }
1860
1861 layer_debug_report_destroy_instance(mid(instance));
1862 layer_data_map.erase(pTable);
1863
1864 pc_instance_table_map.erase(key);
1865 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001866}
1867
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001868bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001869 VkInstance instance,
1870 uint32_t* pPhysicalDeviceCount,
1871 VkPhysicalDevice* pPhysicalDevices,
1872 VkResult result)
1873{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001874
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001875 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001876 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001877 }
1878
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001879 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001880 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001881 }
1882
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001883 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001884 {
1885 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001886 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1887 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001888 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001889
1890 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001891}
1892
1893VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1894 VkInstance instance,
1895 uint32_t* pPhysicalDeviceCount,
1896 VkPhysicalDevice* pPhysicalDevices)
1897{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001898 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1899
1900 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1901
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001902 return result;
1903}
1904
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001905bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001906 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001907 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001908{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001909
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001910 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001911 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001912 }
1913
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001914 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001915}
1916
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001917VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001918 VkPhysicalDevice physicalDevice,
1919 VkPhysicalDeviceFeatures* pFeatures)
1920{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001921 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001922
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001923 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001924}
1925
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001926bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001927 VkPhysicalDevice physicalDevice,
1928 VkFormat format,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001929 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001930{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001931
1932 if(format < VK_FORMAT_BEGIN_RANGE ||
1933 format > VK_FORMAT_END_RANGE)
1934 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001935 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001936 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001937 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001938 }
1939
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001940 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001941 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001942 }
1943
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001944 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001945}
1946
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001947VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001948 VkPhysicalDevice physicalDevice,
1949 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001950 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001951{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001952 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001953
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001954 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001955}
1956
1957bool PostGetPhysicalDeviceImageFormatProperties(
1958 VkPhysicalDevice physicalDevice,
1959 VkFormat format,
1960 VkImageType type,
1961 VkImageTiling tiling,
1962 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001963 VkImageCreateFlags flags,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001964 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001965{
1966
1967 if(format < VK_FORMAT_BEGIN_RANGE ||
1968 format > VK_FORMAT_END_RANGE)
1969 {
1970 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1971 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1972 return false;
1973 }
1974
1975 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1976 type > VK_IMAGE_TYPE_END_RANGE)
1977 {
1978 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1979 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1980 return false;
1981 }
1982
1983 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1984 tiling > VK_IMAGE_TILING_END_RANGE)
1985 {
1986 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1987 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1988 return false;
1989 }
1990
1991
1992 if(pImageFormatProperties != nullptr)
1993 {
1994 }
1995
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001996 return true;
1997}
1998
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001999VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002000 VkPhysicalDevice physicalDevice,
2001 VkFormat format,
2002 VkImageType type,
2003 VkImageTiling tiling,
2004 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002005 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002006 VkImageFormatProperties* pImageFormatProperties)
2007{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002008 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002009
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002010 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002011}
2012
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002013bool PostGetPhysicalDeviceProperties(
2014 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002015 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002016{
2017
2018 if(pProperties != nullptr)
2019 {
2020 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2021 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2022 {
2023 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2024 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2025 return false;
2026 }
2027 }
2028
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002029 return true;
2030}
2031
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002032VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002033 VkPhysicalDevice physicalDevice,
2034 VkPhysicalDeviceProperties* pProperties)
2035{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002036 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002037
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002038 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002039}
2040
Cody Northropef72e2a2015-08-03 17:04:53 -06002041bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002042 VkPhysicalDevice physicalDevice,
2043 uint32_t* pCount,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002044 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002045{
2046
Cody Northropef72e2a2015-08-03 17:04:53 -06002047 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002048 {
2049 }
2050
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002051 if(pQueueProperties != nullptr)
2052 {
2053 }
2054
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002055 return true;
2056}
2057
Courtney Goeltzenleuchter8148af02015-10-27 11:19:02 -06002058VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002059 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002060 uint32_t* pCount,
2061 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002062{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002063 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002064
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002065 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002066}
2067
2068bool PostGetPhysicalDeviceMemoryProperties(
2069 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002070 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002071{
2072
2073 if(pMemoryProperties != nullptr)
2074 {
2075 }
2076
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002077 return true;
2078}
2079
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002080VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002081 VkPhysicalDevice physicalDevice,
2082 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2083{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002084 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002085
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002086 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002087}
2088
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002089VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2090 VkPhysicalDevice physicalDevice,
2091 const VkDeviceCreateInfo* pCreateInfo,
2092 VkDevice* pDevice)
2093{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002094 /*
2095 * NOTE: The loader fills in the ICD's device object in *pDevice.
2096 * Use that object to get the dispatch table.
2097 *
2098 * NOTE: We do not validate physicalDevice or any dispatchable
2099 * object as the first parameter. We couldn't get here if it was wrong!
2100 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002101 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002102 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2103 if(result == VK_SUCCESS)
2104 {
2105 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2106 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2107 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2108 }
2109
2110 return result;
2111}
2112
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002113VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002114 VkDevice device)
2115{
2116 layer_debug_report_destroy_device(device);
2117
2118 dispatch_key key = get_dispatch_key(device);
2119#if DISPATCH_MAP_DEBUG
2120 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2121#endif
2122
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002123 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002124 pc_device_table_map.erase(key);
2125 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002126}
2127
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002128bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002129 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002130 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002131 uint32_t queueIndex,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002132 VkQueue* pQueue)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002133{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002134
2135
2136
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002137 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002138 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002139 }
2140
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002141 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002142}
2143
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002144VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002145 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002146 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002147 uint32_t queueIndex,
2148 VkQueue* pQueue)
2149{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002150 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002151
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002152 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002153}
2154
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002155bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002156 VkQueue queue,
2157 const VkCmdBuffer* pCmdBuffers)
2158{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002159 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002160 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002161 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002162
2163 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002164}
2165
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002166bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002167 VkQueue queue,
2168 uint32_t cmdBufferCount,
2169 VkFence fence,
2170 VkResult result)
2171{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002172
2173
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002174
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002175 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002176 {
2177 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002178 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2179 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002180 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002181
2182 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002183}
2184
2185VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2186 VkQueue queue,
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002187 uint32_t submitCount,
2188 const VkSubmitInfo* pSubmitInfo,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002189 VkFence fence)
2190{
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002191 for (uint32_t i = 0; i < submitCount; i++) {
2192 PreQueueSubmit(queue, pSubmitInfo[i].pCommandBuffers);
2193 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002194
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002195 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmitInfo, fence);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002196
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002197 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002198
2199 return result;
2200}
2201
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002202bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002203 VkQueue queue,
2204 VkResult result)
2205{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002206
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002207 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002208 {
2209 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002210 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2211 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002212 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002213
2214 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002215}
2216
2217VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2218 VkQueue queue)
2219{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002220 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2221
2222 PostQueueWaitIdle(queue, result);
2223
2224 return result;
2225}
2226
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002227bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002228 VkDevice device,
2229 VkResult result)
2230{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002231
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002232 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002233 {
2234 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2236 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002237 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002238
2239 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002240}
2241
2242VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2243 VkDevice device)
2244{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002245 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2246
2247 PostDeviceWaitIdle(device, result);
2248
2249 return result;
2250}
2251
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002252bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002253 VkDevice device,
2254 const VkMemoryAllocInfo* pAllocInfo)
2255{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002256 if(pAllocInfo != nullptr)
2257 {
2258 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002259 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002260 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002261 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002262 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002263 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002264 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002265
2266 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002267}
2268
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002269bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002270 VkDevice device,
2271 VkDeviceMemory* pMem,
2272 VkResult result)
2273{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002274
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002275 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002276 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002277 }
2278
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002279 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002280 {
2281 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2283 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002284 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002285
2286 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002287}
2288
2289VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2290 VkDevice device,
2291 const VkMemoryAllocInfo* pAllocInfo,
2292 VkDeviceMemory* pMem)
2293{
2294 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002295
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002296 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2297
2298 PostAllocMemory(device, pMem, result);
2299
2300 return result;
2301}
2302
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002303bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002304 VkDevice device,
2305 VkDeviceMemory mem,
2306 VkDeviceSize offset,
2307 VkDeviceSize size,
2308 VkMemoryMapFlags flags,
2309 void** ppData,
2310 VkResult result)
2311{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002312
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002313
2314
2315
2316
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002317 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002318 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002319 }
2320
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002321 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002322 {
2323 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2325 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002326 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002327
2328 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002329}
2330
2331VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2332 VkDevice device,
2333 VkDeviceMemory mem,
2334 VkDeviceSize offset,
2335 VkDeviceSize size,
2336 VkMemoryMapFlags flags,
2337 void** ppData)
2338{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002339 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2340
2341 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2342
2343 return result;
2344}
2345
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002346bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002347 VkDevice device,
2348 const VkMappedMemoryRange* pMemRanges)
2349{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002350 if(pMemRanges != nullptr)
2351 {
2352 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002353 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002354 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002355 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002356 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002357 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002358 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002359
2360 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002361}
2362
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002363bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002364 VkDevice device,
2365 uint32_t memRangeCount,
2366 VkResult result)
2367{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002368
2369
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002370 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002371 {
2372 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002373 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2374 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002375 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002376
2377 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002378}
2379
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002380VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002381 VkDevice device,
2382 uint32_t memRangeCount,
2383 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002384{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002385 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002386
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002387 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002388
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002389 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2390
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002391 return result;
2392}
2393
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002394bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002395 VkDevice device,
2396 const VkMappedMemoryRange* pMemRanges)
2397{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002398 if(pMemRanges != nullptr)
2399 {
2400 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002401 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002402 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002403 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002404 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002405 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002406 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002407
2408 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002409}
2410
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002411bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002412 VkDevice device,
2413 uint32_t memRangeCount,
2414 VkResult result)
2415{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002416
2417
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002418 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002419 {
2420 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2422 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002423 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002424
2425 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002426}
2427
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002428VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002429 VkDevice device,
2430 uint32_t memRangeCount,
2431 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002432{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002433 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002434
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002435 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002436
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002437 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2438
Tony Barbour859ceab2015-04-16 19:23:13 -06002439 return result;
2440}
2441
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002442bool PostGetDeviceMemoryCommitment(
2443 VkDevice device,
2444 VkDeviceMemory memory,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002445 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002446{
2447
2448
2449 if(pCommittedMemoryInBytes != nullptr)
2450 {
2451 }
2452
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002453 return true;
2454}
2455
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002456VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002457 VkDevice device,
2458 VkDeviceMemory memory,
2459 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002460{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002461 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002462
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002463 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002464}
2465
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002466bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002467 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002468 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002469 VkDeviceMemory mem,
2470 VkDeviceSize memOffset,
2471 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002472{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002473
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002474
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002475
2476
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002477 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002478 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002479 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2480 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2481 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002482 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002483
2484 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002485}
2486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002487VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002488 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002489 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002490 VkDeviceMemory mem,
2491 VkDeviceSize memOffset)
2492{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002493 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002494
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002495 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002496
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002497 return result;
2498}
2499
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002500bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002501 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002502 VkImage image,
2503 VkDeviceMemory mem,
2504 VkDeviceSize memOffset,
2505 VkResult result)
2506{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002507
2508
2509
2510
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002511 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002512 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002513 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2514 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2515 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002516 }
2517
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002518 return true;
2519}
2520
2521VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2522 VkDevice device,
2523 VkImage image,
2524 VkDeviceMemory mem,
2525 VkDeviceSize memOffset)
2526{
2527 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2528
2529 PostBindImageMemory(device, image, mem, memOffset, result);
2530
2531 return result;
2532}
2533
2534bool PostGetBufferMemoryRequirements(
2535 VkDevice device,
2536 VkBuffer buffer,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002537 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002538{
2539
2540
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002541 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002542 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002543 }
2544
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002545 return true;
2546}
2547
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002548VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002549 VkDevice device,
2550 VkBuffer buffer,
2551 VkMemoryRequirements* pMemoryRequirements)
2552{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002553 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002554
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002555 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002556}
2557
2558bool PostGetImageMemoryRequirements(
2559 VkDevice device,
2560 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002561 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002562{
2563
2564
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002565 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002566 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002567 }
2568
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002569 return true;
2570}
2571
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002572VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002573 VkDevice device,
2574 VkImage image,
2575 VkMemoryRequirements* pMemoryRequirements)
2576{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002577 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002578
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002579 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580}
2581
2582bool PostGetImageSparseMemoryRequirements(
2583 VkDevice device,
2584 VkImage image,
2585 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002586 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002587{
2588
2589
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002590 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002591 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002592 }
2593
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002594 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002595 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002596 if ((pSparseMemoryRequirements->formatProps.aspect &
2597 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002598 {
2599 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002600 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002601 return false;
2602 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002603 }
2604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002605 return true;
2606}
2607
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002608VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002609 VkDevice device,
2610 VkImage image,
2611 uint32_t* pNumRequirements,
2612 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2613{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002614 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002615
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002616 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002617}
2618
2619bool PostGetPhysicalDeviceSparseImageFormatProperties(
2620 VkPhysicalDevice physicalDevice,
2621 VkFormat format,
2622 VkImageType type,
2623 uint32_t samples,
2624 VkImageUsageFlags usage,
2625 VkImageTiling tiling,
2626 uint32_t* pNumProperties,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002627 VkSparseImageFormatProperties* pProperties)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002628{
2629
2630 if(format < VK_FORMAT_BEGIN_RANGE ||
2631 format > VK_FORMAT_END_RANGE)
2632 {
2633 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002634 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002635 return false;
2636 }
2637
2638 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2639 type > VK_IMAGE_TYPE_END_RANGE)
2640 {
2641 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002642 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002643 return false;
2644 }
2645
2646
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002647
2648 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2649 tiling > VK_IMAGE_TILING_END_RANGE)
2650 {
2651 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002652 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002653 return false;
2654 }
2655
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002656 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002657 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002658 }
2659
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002660 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002661 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002662 if ((pProperties->aspect &
2663 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002664 {
2665 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002666 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002667 return false;
2668 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002669 }
2670
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002671 return true;
2672}
2673
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002674VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002675 VkPhysicalDevice physicalDevice,
2676 VkFormat format,
2677 VkImageType type,
2678 uint32_t samples,
2679 VkImageUsageFlags usage,
2680 VkImageTiling tiling,
2681 uint32_t* pNumProperties,
2682 VkSparseImageFormatProperties* pProperties)
2683{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002684 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002685
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002686 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002687}
2688
2689bool PreQueueBindSparseBufferMemory(
2690 VkQueue queue,
2691 const VkSparseMemoryBindInfo* pBindInfo)
2692{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002693 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002694 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002695 }
2696
2697 return true;
2698}
2699
2700bool PostQueueBindSparseBufferMemory(
2701 VkQueue queue,
2702 VkBuffer buffer,
2703 uint32_t numBindings,
2704 VkResult result)
2705{
2706
2707
2708
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002709 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002710 {
2711 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2712 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2713 return false;
2714 }
2715
2716 return true;
2717}
2718
2719VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2720 VkQueue queue,
2721 VkBuffer buffer,
2722 uint32_t numBindings,
2723 const VkSparseMemoryBindInfo* pBindInfo)
2724{
2725 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2726
2727 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2728
2729 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2730
2731 return result;
2732}
2733
2734bool PreQueueBindSparseImageOpaqueMemory(
2735 VkQueue queue,
2736 const VkSparseMemoryBindInfo* pBindInfo)
2737{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002738 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002739 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002740 }
2741
2742 return true;
2743}
2744
2745bool PostQueueBindSparseImageOpaqueMemory(
2746 VkQueue queue,
2747 VkImage image,
2748 uint32_t numBindings,
2749 VkResult result)
2750{
2751
2752
2753
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002754 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002755 {
2756 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2757 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2758 return false;
2759 }
2760
2761 return true;
2762}
2763
2764VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2765 VkQueue queue,
2766 VkImage image,
2767 uint32_t numBindings,
2768 const VkSparseMemoryBindInfo* pBindInfo)
2769{
2770 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2771
2772 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2773
2774 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2775
2776 return result;
2777}
2778
2779bool PreQueueBindSparseImageMemory(
2780 VkQueue queue,
2781 const VkSparseImageMemoryBindInfo* pBindInfo)
2782{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002783 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002784 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002785 if ((pBindInfo->subresource.aspect &
2786 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002787 {
2788 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002789 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002790 return false;
2791 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002792 }
2793
2794 return true;
2795}
2796
2797bool PostQueueBindSparseImageMemory(
2798 VkQueue queue,
2799 VkImage image,
2800 uint32_t numBindings,
2801 VkResult result)
2802{
2803
2804
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002805
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002806 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002807 {
2808 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002809 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2810 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002811 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002812
2813 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002814}
2815
2816VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002817 VkQueue queue,
2818 VkImage image,
2819 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002820 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002821{
2822 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002823
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002824 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002825
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002826 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002827
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002828 return result;
2829}
2830
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002831bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002832 VkDevice device,
2833 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002834{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002835 if(pCreateInfo != nullptr)
2836 {
2837 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002838 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002840 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002841 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002842 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002843 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002844
2845 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002846}
2847
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002848bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002849 VkDevice device,
2850 VkFence* pFence,
2851 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002852{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002853
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002854 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002855 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002856 }
2857
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002858 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002859 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002860 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2862 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002863 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002864
2865 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002866}
2867
2868VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2869 VkDevice device,
2870 const VkFenceCreateInfo* pCreateInfo,
2871 VkFence* pFence)
2872{
2873 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002874
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002875 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
2876
2877 PostCreateFence(device, pFence, result);
2878
2879 return result;
2880}
2881
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002882bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002883 VkDevice device,
2884 const VkFence* pFences)
2885{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002886 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002887 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002888 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002889
2890 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002891}
2892
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002893bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002894 VkDevice device,
2895 uint32_t fenceCount,
2896 VkResult result)
2897{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002898
2899
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002900 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002901 {
2902 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002903 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2904 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002905 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002906
2907 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002908}
2909
2910VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2911 VkDevice device,
2912 uint32_t fenceCount,
2913 const VkFence* pFences)
2914{
2915 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002916
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002917 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2918
2919 PostResetFences(device, fenceCount, result);
2920
2921 return result;
2922}
2923
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002924bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002925 VkDevice device,
2926 VkFence fence,
2927 VkResult result)
2928{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002929
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002930
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002931 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002932 {
2933 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2935 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002936 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002937
2938 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002939}
2940
2941VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2942 VkDevice device,
2943 VkFence fence)
2944{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002945 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2946
2947 PostGetFenceStatus(device, fence, result);
2948
2949 return result;
2950}
2951
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002952bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002953 VkDevice device,
2954 const VkFence* pFences)
2955{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002956 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002957 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002958 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002959
2960 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002961}
2962
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002963bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002964 VkDevice device,
2965 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002966 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002967 uint64_t timeout,
2968 VkResult result)
2969{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002970
2971
2972
2973
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002974 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002975 {
2976 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002977 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2978 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002979 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002980
2981 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002982}
2983
2984VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2985 VkDevice device,
2986 uint32_t fenceCount,
2987 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002988 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002989 uint64_t timeout)
2990{
2991 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002992
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002993 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2994
2995 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2996
2997 return result;
2998}
2999
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003000bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003001 VkDevice device,
3002 const VkSemaphoreCreateInfo* pCreateInfo)
3003{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003004 if(pCreateInfo != nullptr)
3005 {
3006 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003007 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003009 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003010 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003011 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003012 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003013
3014 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003015}
3016
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003017bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003018 VkDevice device,
3019 VkSemaphore* pSemaphore,
3020 VkResult result)
3021{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003022
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003023 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003024 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003025 }
3026
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003027 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003028 {
3029 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003030 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3031 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003032 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003033
3034 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003035}
3036
3037VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3038 VkDevice device,
3039 const VkSemaphoreCreateInfo* pCreateInfo,
3040 VkSemaphore* pSemaphore)
3041{
3042 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003043
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003044 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3045
3046 PostCreateSemaphore(device, pSemaphore, result);
3047
3048 return result;
3049}
3050
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003051bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003052 VkQueue queue,
3053 VkSemaphore semaphore,
3054 VkResult result)
3055{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003056
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003057
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003058 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003059 {
3060 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003061 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3062 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003063 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003064
3065 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003066}
3067
3068VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3069 VkQueue queue,
3070 VkSemaphore semaphore)
3071{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003072 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3073
3074 PostQueueSignalSemaphore(queue, semaphore, result);
3075
3076 return result;
3077}
3078
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003079bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003080 VkQueue queue,
3081 VkSemaphore semaphore,
3082 VkResult result)
3083{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003084
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003085
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003086 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003087 {
3088 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003089 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3090 return false;
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
3096VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3097 VkQueue queue,
3098 VkSemaphore semaphore)
3099{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003100 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3101
3102 PostQueueWaitSemaphore(queue, semaphore, result);
3103
3104 return result;
3105}
3106
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003107bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003108 VkDevice device,
3109 const VkEventCreateInfo* pCreateInfo)
3110{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003111 if(pCreateInfo != nullptr)
3112 {
3113 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003114 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003116 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003117 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003118 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003119 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003120
3121 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003122}
3123
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003124bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003125 VkDevice device,
3126 VkEvent* pEvent,
3127 VkResult result)
3128{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003129
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003130 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003131 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003132 }
3133
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003134 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003135 {
3136 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3138 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003139 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003140
3141 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003142}
3143
3144VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3145 VkDevice device,
3146 const VkEventCreateInfo* pCreateInfo,
3147 VkEvent* pEvent)
3148{
3149 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003150
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003151 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3152
3153 PostCreateEvent(device, pEvent, result);
3154
3155 return result;
3156}
3157
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003158bool PostGetEventStatus(
3159 VkDevice device,
3160 VkEvent event,
3161 VkResult result)
3162{
3163
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003164
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003165 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003166 {
3167 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003168 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3169 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003170 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003171
3172 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003173}
3174
3175VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3176 VkDevice device,
3177 VkEvent event)
3178{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003179 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3180
3181 PostGetEventStatus(device, event, result);
3182
3183 return result;
3184}
3185
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003186bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003187 VkDevice device,
3188 VkEvent event,
3189 VkResult result)
3190{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003191
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003192
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003193 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003194 {
3195 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003196 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3197 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003198 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003199
3200 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003201}
3202
3203VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3204 VkDevice device,
3205 VkEvent event)
3206{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003207 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3208
3209 PostSetEvent(device, event, result);
3210
3211 return result;
3212}
3213
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003214bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003215 VkDevice device,
3216 VkEvent event,
3217 VkResult result)
3218{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003219
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003220
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003221 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003222 {
3223 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003224 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3225 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003226 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003227
3228 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003229}
3230
3231VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3232 VkDevice device,
3233 VkEvent event)
3234{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003235 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3236
3237 PostResetEvent(device, event, result);
3238
3239 return result;
3240}
3241
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003242bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003243 VkDevice device,
3244 const VkQueryPoolCreateInfo* pCreateInfo)
3245{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003246 if(pCreateInfo != nullptr)
3247 {
3248 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003249 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003251 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003252 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003253 }
3254 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3255 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3256 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003258 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003259 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003260 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003261 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003262
3263 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003264}
3265
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003266bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003267 VkDevice device,
3268 VkQueryPool* pQueryPool,
3269 VkResult result)
3270{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003271
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003272 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003273 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003274 }
3275
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003276 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003277 {
3278 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3280 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003281 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003282
3283 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003284}
3285
3286VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3287 VkDevice device,
3288 const VkQueryPoolCreateInfo* pCreateInfo,
3289 VkQueryPool* pQueryPool)
3290{
3291 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003292
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003293 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3294
3295 PostCreateQueryPool(device, pQueryPool, result);
3296
3297 return result;
3298}
3299
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003300bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003301 VkDevice device,
3302 VkQueryPool queryPool,
3303 uint32_t startQuery,
3304 uint32_t queryCount,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003305 size_t dataSize,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003306 void* pData,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003307 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003308 VkQueryResultFlags flags,
3309 VkResult result)
3310{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003311
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003312
3313
3314
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003315 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003316 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003317 }
3318
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003319
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003320 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003321 {
3322 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003323 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3324 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003325 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003326
3327 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003328}
3329
3330VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3331 VkDevice device,
3332 VkQueryPool queryPool,
3333 uint32_t startQuery,
3334 uint32_t queryCount,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003335 size_t dataSize,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003336 void* pData,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003337 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003338 VkQueryResultFlags flags)
3339{
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003340 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003341
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003342 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003343
3344 return result;
3345}
3346
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003347bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003348 VkDevice device,
3349 const VkBufferCreateInfo* pCreateInfo)
3350{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003351 if(pCreateInfo != nullptr)
3352 {
3353 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003354 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003355 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003356 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003357 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003358 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003359 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3360 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003361 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003362 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003363 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003364 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003365 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003366 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003367 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003368 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003369 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003370
3371 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003372}
3373
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003374bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003375 VkDevice device,
3376 VkBuffer* pBuffer,
3377 VkResult result)
3378{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003379
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003380 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003381 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003382 }
3383
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003384 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003385 {
3386 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003387 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3388 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003389 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003390
3391 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003392}
3393
3394VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3395 VkDevice device,
3396 const VkBufferCreateInfo* pCreateInfo,
3397 VkBuffer* pBuffer)
3398{
3399 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003400
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003401 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3402
3403 PostCreateBuffer(device, pBuffer, result);
3404
3405 return result;
3406}
3407
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003408bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003409 VkDevice device,
3410 const VkBufferViewCreateInfo* pCreateInfo)
3411{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003412 if(pCreateInfo != nullptr)
3413 {
3414 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003415 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003416 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003417 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003418 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003419 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003420 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3421 pCreateInfo->format > VK_FORMAT_END_RANGE)
3422 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003423 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003424 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003425 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003426 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003427 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003428
3429 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003430}
3431
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003432bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003433 VkDevice device,
3434 VkBufferView* pView,
3435 VkResult result)
3436{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003437
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003438 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003439 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003440 }
3441
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003442 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003443 {
3444 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3446 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003447 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003448
3449 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003450}
3451
3452VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3453 VkDevice device,
3454 const VkBufferViewCreateInfo* pCreateInfo,
3455 VkBufferView* pView)
3456{
3457 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003458
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003459 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3460
3461 PostCreateBufferView(device, pView, result);
3462
3463 return result;
3464}
3465
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003466bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003467 VkDevice device,
3468 const VkImageCreateInfo* pCreateInfo)
3469{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003470 if(pCreateInfo != nullptr)
3471 {
3472 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003473 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003474 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003475 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003476 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003477 }
3478 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3479 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3480 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003481 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003482 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003483 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003484 }
3485 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3486 pCreateInfo->format > VK_FORMAT_END_RANGE)
3487 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003488 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003489 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003490 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003491 }
3492 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3493 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3494 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003495 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003496 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003497 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003498 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003499 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3500 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003501 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003502 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3503 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003504 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003505 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003506 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003507 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003508 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003509 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003510
3511 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003512}
3513
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003514bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003515 VkDevice device,
3516 VkImage* pImage,
3517 VkResult result)
3518{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003519
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003520 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003521 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003522 }
3523
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003524 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003525 {
3526 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003527 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3528 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003529 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003530
3531 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003532}
3533
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003534VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3535 VkDevice device,
3536 const VkImageCreateInfo* pCreateInfo,
3537 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003538{
3539 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003540
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003541 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3542
3543 PostCreateImage(device, pImage, result);
3544
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003545 return result;
3546}
3547
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003548bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003549 VkDevice device,
3550 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003551{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003552 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003553 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06003554 if ((pSubresource->aspect &
3555 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003556 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003557 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003558 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003559 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003560 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003561 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003562
3563 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003564}
3565
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003566bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003567 VkDevice device,
3568 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003569 VkSubresourceLayout* pLayout)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003570{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003571
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003573 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003574 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003575 }
3576
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003577 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003578}
3579
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003580VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003581 VkDevice device,
3582 VkImage image,
3583 const VkImageSubresource* pSubresource,
3584 VkSubresourceLayout* pLayout)
3585{
3586 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003587
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003588 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003589
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003590 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003591}
3592
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003593bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003594 VkDevice device,
3595 const VkImageViewCreateInfo* pCreateInfo)
3596{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003597 if(pCreateInfo != nullptr)
3598 {
3599 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003600 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003601 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003602 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003603 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003604 }
3605 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3606 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3607 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003608 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003609 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003610 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003611 }
3612 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3613 pCreateInfo->format > VK_FORMAT_END_RANGE)
3614 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003615 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003616 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003617 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003618 }
3619 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3620 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3621 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003622 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003623 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003624 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003625 }
3626 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3627 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3628 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003629 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003630 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003631 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003632 }
3633 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3634 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3635 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003636 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003637 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003638 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003639 }
3640 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3641 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3642 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003643 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003644 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003645 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003646 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003647 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003648
3649 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003650}
3651
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003652bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003653 VkDevice device,
3654 VkImageView* pView,
3655 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003656{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003657
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003658 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003659 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003660 }
3661
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003662 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003663 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003664 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003665 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3666 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003667 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003668
3669 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003670}
3671
3672VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3673 VkDevice device,
3674 const VkImageViewCreateInfo* pCreateInfo,
3675 VkImageView* pView)
3676{
3677 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003678
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003679 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3680
3681 PostCreateImageView(device, pView, result);
3682
3683 return result;
3684}
3685
Michael Lentine6715e522015-09-15 14:59:14 -05003686bool PreCreateShaderModule(
3687 VkDevice device,
3688 const VkShaderModuleCreateInfo* pCreateInfo)
3689{
3690 if(pCreateInfo) {
3691 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3692 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3693 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3694 return false;
3695 }
3696 if(!pCreateInfo->pCode) {
3697 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3698 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3699 return false;
3700 }
3701 } else {
3702 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3703 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3704 return false;
3705 }
3706
3707 return true;
3708}
3709
3710bool PostCreateShaderModule(
3711 VkDevice device,
3712 VkShaderModule* pShaderModule,
3713 VkResult result)
3714{
3715 if(result < VK_SUCCESS) {
3716 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3717 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3718 return false;
3719 }
3720
3721 return true;
3722}
3723
3724VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3725 VkDevice device,
3726 const VkShaderModuleCreateInfo* pCreateInfo,
3727 VkShaderModule* pShaderModule)
3728{
3729 PreCreateShaderModule(device, pCreateInfo);
3730 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3731 PostCreateShaderModule(device, pShaderModule, result);
3732 return result;
3733}
3734
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003735bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003736 VkDevice device,
3737 const VkShaderCreateInfo* pCreateInfo)
3738{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003739 if(pCreateInfo != nullptr)
3740 {
3741 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003742 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003743 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003744 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003745 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003746 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003747 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003748 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003749 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003750 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003751
3752 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003753}
3754
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003755bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003756 VkDevice device,
3757 VkShader* pShader,
3758 VkResult result)
3759{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003760
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003761 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003762 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003763 }
3764
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003765 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003766 {
3767 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003768 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3769 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003770 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003771
3772 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003773}
3774
3775VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3776 VkDevice device,
3777 const VkShaderCreateInfo* pCreateInfo,
3778 VkShader* pShader)
3779{
3780 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003781
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003782 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3783
3784 PostCreateShader(device, pShader, result);
3785
3786 return result;
3787}
3788
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003789bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003790 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003791 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003792{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003793 if(pCreateInfo != nullptr)
3794 {
3795 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003796 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003797 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003798 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003799 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003800 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003801 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003802 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003803 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003804 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003805
3806 return true;
3807}
3808
3809bool PostCreatePipelineCache(
3810 VkDevice device,
3811 VkPipelineCache* pPipelineCache,
3812 VkResult result)
3813{
3814
3815 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003816 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003817 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003818
3819 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003820 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003821 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06003822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3823 return false;
3824 }
3825
3826 return true;
3827}
3828
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003829VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003830 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003831 const VkPipelineCacheCreateInfo* pCreateInfo,
3832 VkPipelineCache* pPipelineCache)
3833{
3834 PreCreatePipelineCache(device, pCreateInfo);
3835
3836 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3837
3838 PostCreatePipelineCache(device, pPipelineCache, result);
3839
3840 return result;
3841}
3842
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003843bool PostGetPipelineCacheSize(
3844 VkDevice device,
3845 VkPipelineCache pipelineCache)
3846{
3847
3848
3849 return true;
3850}
3851
3852VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
3853 VkDevice device,
3854 VkPipelineCache pipelineCache)
3855{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06003856 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003857
3858 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06003859
3860 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003861}
3862
3863bool PostGetPipelineCacheData(
3864 VkDevice device,
3865 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003866 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003867 void* pData,
3868 VkResult result)
3869{
3870
3871
3872 if(pData != nullptr)
3873 {
3874 }
3875
3876 if(result < VK_SUCCESS)
3877 {
3878 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3879 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3880 return false;
3881 }
3882
3883 return true;
3884}
3885
3886VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3887 VkDevice device,
3888 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003889 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003890 void* pData)
3891{
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003892 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, dataSize, pData);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003893
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003894 PostGetPipelineCacheData(device, pipelineCache, dataSize, pData, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003895
3896 return result;
3897}
3898
3899bool PreMergePipelineCaches(
3900 VkDevice device,
3901 const VkPipelineCache* pSrcCaches)
3902{
3903 if(pSrcCaches != nullptr)
3904 {
3905 }
3906
3907 return true;
3908}
3909
3910bool PostMergePipelineCaches(
3911 VkDevice device,
3912 VkPipelineCache destCache,
3913 uint32_t srcCacheCount,
3914 VkResult result)
3915{
3916
3917
3918
3919 if(result < VK_SUCCESS)
3920 {
3921 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3922 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3923 return false;
3924 }
3925
3926 return true;
3927}
3928
3929VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3930 VkDevice device,
3931 VkPipelineCache destCache,
3932 uint32_t srcCacheCount,
3933 const VkPipelineCache* pSrcCaches)
3934{
3935 PreMergePipelineCaches(device, pSrcCaches);
3936
3937 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
3938
3939 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
3940
3941 return result;
3942}
3943
3944bool PreCreateGraphicsPipelines(
3945 VkDevice device,
3946 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3947{
3948 if(pCreateInfos != nullptr)
3949 {
3950 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3951 {
3952 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3953 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3954 return false;
3955 }
3956 if(pCreateInfos->pStages != nullptr)
3957 {
3958 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3959 {
3960 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3961 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3962 return false;
3963 }
Courtney Goeltzenleuchter8e2f0972015-10-21 17:08:06 -06003964 if((pCreateInfos->pStages->stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
3965 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
3966 VK_SHADER_STAGE_GEOMETRY_BIT |
3967 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003968 {
3969 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3970 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
3971 return false;
3972 }
3973 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3974 {
3975 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
3976 {
3977 }
3978 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3979 {
3980 }
3981 }
3982 }
3983 if(pCreateInfos->pVertexInputState != nullptr)
3984 {
3985 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3986 {
3987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3988 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3989 return false;
3990 }
3991 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3992 {
3993 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
3994 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
3995 {
3996 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3997 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
3998 return false;
3999 }
4000 }
4001 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4002 {
4003 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4004 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4005 {
4006 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4007 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4008 return false;
4009 }
4010 }
4011 }
4012 if(pCreateInfos->pInputAssemblyState != nullptr)
4013 {
4014 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4015 {
4016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4017 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4018 return false;
4019 }
4020 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4021 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4022 {
4023 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4024 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4025 return false;
4026 }
4027 }
4028 if(pCreateInfos->pTessellationState != nullptr)
4029 {
4030 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4031 {
4032 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4033 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4034 return false;
4035 }
4036 }
4037 if(pCreateInfos->pViewportState != nullptr)
4038 {
4039 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4040 {
4041 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4042 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4043 return false;
4044 }
4045 }
4046 if(pCreateInfos->pRasterState != nullptr)
4047 {
4048 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4049 {
4050 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4051 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4052 return false;
4053 }
4054 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4055 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4056 {
4057 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4058 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4059 return false;
4060 }
4061 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4062 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4063 {
4064 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4065 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4066 return false;
4067 }
4068 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4069 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4070 {
4071 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4072 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4073 return false;
4074 }
4075 }
4076 if(pCreateInfos->pMultisampleState != nullptr)
4077 {
4078 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4079 {
4080 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4081 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4082 return false;
4083 }
4084 }
4085 if(pCreateInfos->pDepthStencilState != nullptr)
4086 {
4087 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4088 {
4089 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4090 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4091 return false;
4092 }
4093 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4094 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4095 {
4096 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4097 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4098 return false;
4099 }
4100 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4101 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4102 {
4103 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4104 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4105 return false;
4106 }
4107 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4108 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4109 {
4110 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4111 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4112 return false;
4113 }
4114 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4115 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4116 {
4117 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4118 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4119 return false;
4120 }
4121 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4122 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4123 {
4124 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4125 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4126 return false;
4127 }
4128 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4129 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4130 {
4131 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4132 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4133 return false;
4134 }
4135 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4136 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4137 {
4138 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4139 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4140 return false;
4141 }
4142 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4143 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4144 {
4145 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4146 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4147 return false;
4148 }
4149 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4150 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4151 {
4152 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4153 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4154 return false;
4155 }
4156 }
4157 if(pCreateInfos->pColorBlendState != nullptr)
4158 {
4159 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4160 {
4161 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4162 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4163 return false;
4164 }
Michael Lentine6d033602015-10-06 14:55:54 -07004165 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4166 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004167 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4168 {
4169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4170 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4171 return false;
4172 }
Michael Lentined833b882015-09-15 14:59:56 -05004173 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004174 {
4175 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4176 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4177 {
4178 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4179 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4180 return false;
4181 }
4182 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4183 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4184 {
4185 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4186 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4187 return false;
4188 }
4189 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4190 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4191 {
4192 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4193 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4194 return false;
4195 }
4196 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4197 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4198 {
4199 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4200 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4201 return false;
4202 }
4203 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4204 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4205 {
4206 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4207 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4208 return false;
4209 }
4210 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4211 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4212 {
4213 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4214 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4215 return false;
4216 }
4217 }
4218 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004219 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4220 {
4221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4222 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4223 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004224 }
4225
4226 return true;
4227}
4228
4229bool PostCreateGraphicsPipelines(
4230 VkDevice device,
4231 VkPipelineCache pipelineCache,
4232 uint32_t count,
4233 VkPipeline* pPipelines,
4234 VkResult result)
4235{
4236
4237
4238
4239 if(pPipelines != nullptr)
4240 {
4241 }
4242
4243 if(result < VK_SUCCESS)
4244 {
4245 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4246 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4247 return false;
4248 }
4249
4250 return true;
4251}
4252
4253VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4254 VkDevice device,
4255 VkPipelineCache pipelineCache,
4256 uint32_t count,
4257 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4258 VkPipeline* pPipelines)
4259{
4260 PreCreateGraphicsPipelines(device, pCreateInfos);
4261
4262 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4263
4264 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4265
4266 return result;
4267}
4268
4269bool PreCreateComputePipelines(
4270 VkDevice device,
4271 const VkComputePipelineCreateInfo* pCreateInfos)
4272{
4273 if(pCreateInfos != nullptr)
4274 {
4275 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4276 {
4277 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4278 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4279 return false;
4280 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004281 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004282 {
4283 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4284 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4285 return false;
4286 }
Courtney Goeltzenleuchter8e2f0972015-10-21 17:08:06 -06004287 if((pCreateInfos->stage.stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
4288 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
4289 VK_SHADER_STAGE_GEOMETRY_BIT |
4290 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004291 {
4292 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4293 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4294 return false;
4295 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004296 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004297 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004298 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004299 {
4300 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004301 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004302 {
4303 }
4304 }
4305 }
4306
4307 return true;
4308}
4309
4310bool PostCreateComputePipelines(
4311 VkDevice device,
4312 VkPipelineCache pipelineCache,
4313 uint32_t count,
4314 VkPipeline* pPipelines,
4315 VkResult result)
4316{
4317
4318
4319
4320 if(pPipelines != nullptr)
4321 {
4322 }
4323
4324 if(result < VK_SUCCESS)
4325 {
4326 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4327 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4328 return false;
4329 }
4330
4331 return true;
4332}
4333
4334VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4335 VkDevice device,
4336 VkPipelineCache pipelineCache,
4337 uint32_t count,
4338 const VkComputePipelineCreateInfo* pCreateInfos,
4339 VkPipeline* pPipelines)
4340{
4341 PreCreateComputePipelines(device, pCreateInfos);
4342
4343 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4344
4345 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4346
4347 return result;
4348}
4349
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004350bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004351 VkDevice device,
4352 const VkPipelineLayoutCreateInfo* pCreateInfo)
4353{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004354 if(pCreateInfo != nullptr)
4355 {
4356 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004357 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004358 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004359 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4360 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004361 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004362 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004363 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004364 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004365 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004366 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004367 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004368 }
4369
4370 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004371}
4372
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004373bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004374 VkDevice device,
4375 VkPipelineLayout* pPipelineLayout,
4376 VkResult result)
4377{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004378
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004379 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004380 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004381 }
4382
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004383 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004384 {
4385 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004386 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4387 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004388 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004389
4390 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004391}
4392
4393VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4394 VkDevice device,
4395 const VkPipelineLayoutCreateInfo* pCreateInfo,
4396 VkPipelineLayout* pPipelineLayout)
4397{
4398 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004399
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004400 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4401
4402 PostCreatePipelineLayout(device, pPipelineLayout, result);
4403
4404 return result;
4405}
4406
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004407bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004408 VkDevice device,
4409 const VkSamplerCreateInfo* pCreateInfo)
4410{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004411 if(pCreateInfo != nullptr)
4412 {
4413 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004414 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004415 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004416 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004417 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004418 }
4419 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4420 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4421 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004422 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004423 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004424 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004425 }
4426 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4427 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4428 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004429 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004430 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004431 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004432 }
4433 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4434 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4435 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004436 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004437 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004438 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004439 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004440 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4441 pCreateInfo->addressModeU > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004442 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004443 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004444 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004445 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004446 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004447 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4448 pCreateInfo->addressModeV > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004449 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004450 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004451 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004452 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004453 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004454 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4455 pCreateInfo->addressModeW > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004456 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004457 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004458 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004459 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004460 }
4461 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4462 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4463 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004464 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004465 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004466 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004467 }
4468 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4469 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4470 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004471 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004472 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004473 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004474 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004475 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004476
4477 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004478}
4479
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004480bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004481 VkDevice device,
4482 VkSampler* pSampler,
4483 VkResult result)
4484{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004485
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004486 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004487 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004488 }
4489
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004490 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004491 {
4492 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004493 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4494 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004495 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004496
4497 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004498}
4499
4500VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4501 VkDevice device,
4502 const VkSamplerCreateInfo* pCreateInfo,
4503 VkSampler* pSampler)
4504{
4505 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004506
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004507 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4508
4509 PostCreateSampler(device, pSampler, result);
4510
4511 return result;
4512}
4513
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004514bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004515 VkDevice device,
4516 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4517{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004518 if(pCreateInfo != nullptr)
4519 {
4520 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004521 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004522 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004523 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004524 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004525 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004526 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004527 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004528 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4529 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4530 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004531 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004532 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004533 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004534 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004535 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004536 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004537 }
4538 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004539 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004540
4541 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004542}
4543
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004544bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004545 VkDevice device,
4546 VkDescriptorSetLayout* pSetLayout,
4547 VkResult result)
4548{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004549
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004550 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004551 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004552 }
4553
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004554 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004555 {
4556 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004557 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4558 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004559 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004560
4561 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004562}
4563
4564VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4565 VkDevice device,
4566 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4567 VkDescriptorSetLayout* pSetLayout)
4568{
4569 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004570
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004571 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4572
4573 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4574
4575 return result;
4576}
4577
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004578bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004579 VkDevice device,
4580 const VkDescriptorPoolCreateInfo* pCreateInfo)
4581{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004582 if(pCreateInfo != nullptr)
4583 {
4584 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004585 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004586 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004587 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004588 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004589 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004590 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004591 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004592 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4593 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4594 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004595 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004596 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004597 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004598 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004599 }
4600 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004601
4602 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004603}
4604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004605bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004606 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004607 uint32_t maxSets,
4608 VkDescriptorPool* pDescriptorPool,
4609 VkResult result)
4610{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004611
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004612 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004613
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004614 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004615 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004616 }
4617
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004618 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004619 {
4620 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004621 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4622 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004623 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004624
4625 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004626}
4627
4628VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4629 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004630 const VkDescriptorPoolCreateInfo* pCreateInfo,
4631 VkDescriptorPool* pDescriptorPool)
4632{
4633 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004634
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004635 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004636
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004637 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004638
4639 return result;
4640}
4641
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004642bool PostResetDescriptorPool(
4643 VkDevice device,
4644 VkDescriptorPool descriptorPool,
4645 VkResult result)
4646{
4647
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004648
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004649 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004650 {
4651 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004652 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4653 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004654 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004655
4656 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004657}
4658
4659VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4660 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004661 VkDescriptorPool descriptorPool,
4662 VkDescriptorPoolResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004663{
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004664 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004665
4666 PostResetDescriptorPool(device, descriptorPool, result);
4667
4668 return result;
4669}
4670
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004671bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004672 VkDevice device,
4673 const VkDescriptorSetLayout* pSetLayouts)
4674{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004675 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004676 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004677 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004678
4679 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004680}
4681
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004682bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004683 VkDevice device,
4684 VkDescriptorPool descriptorPool,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004685 uint32_t count,
4686 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004687 VkResult result)
4688{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004689
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004690
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004691 if(pDescriptorSets != 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 = "vkAllocDescriptorSets 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 vkAllocDescriptorSets(
4706 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004707 const VkDescriptorSetAllocInfo* pAllocInfo,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004708 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004709{
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004710 PreAllocDescriptorSets(device, pAllocInfo->pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004711
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004712 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, pAllocInfo, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004713
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004714 PostAllocDescriptorSets(device, pAllocInfo->descriptorPool, pAllocInfo->count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004715
4716 return result;
4717}
4718
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004719bool PreFreeDescriptorSets(
4720 VkDevice device,
4721 const VkDescriptorSet* pDescriptorSets)
4722{
4723 if(pDescriptorSets != nullptr)
4724 {
4725 }
4726
4727 return true;
4728}
4729
4730bool PostFreeDescriptorSets(
4731 VkDevice device,
4732 VkDescriptorPool descriptorPool,
4733 uint32_t count,
4734 VkResult result)
4735{
4736
4737
4738
4739 if(result < VK_SUCCESS)
4740 {
4741 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4742 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4743 return false;
4744 }
4745
4746 return true;
4747}
4748
4749VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4750 VkDevice device,
4751 VkDescriptorPool descriptorPool,
4752 uint32_t count,
4753 const VkDescriptorSet* pDescriptorSets)
4754{
4755 PreFreeDescriptorSets(device, pDescriptorSets);
4756
4757 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4758
4759 PostFreeDescriptorSets(device, descriptorPool, count, result);
4760
4761 return result;
4762}
4763
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004764bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004765 VkDevice device,
4766 const VkWriteDescriptorSet* pDescriptorWrites,
4767 const VkCopyDescriptorSet* pDescriptorCopies)
4768{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004769 if(pDescriptorWrites != nullptr)
4770 {
4771 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004772 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004773 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004774 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004775 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004776 }
4777 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4778 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4779 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004780 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004781 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004782 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004783 }
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004784 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4785 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4786 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004787 {
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004788 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4789 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004790 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004791 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004792 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004793 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004794 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004795 }
4796 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004797
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004798 if(pDescriptorCopies != nullptr)
4799 {
4800 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004801 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004802 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004803 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004804 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004805 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004806 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004807
4808 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004809}
4810
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004811VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004812 VkDevice device,
4813 uint32_t writeCount,
4814 const VkWriteDescriptorSet* pDescriptorWrites,
4815 uint32_t copyCount,
4816 const VkCopyDescriptorSet* pDescriptorCopies)
4817{
4818 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004819
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004820 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004821}
4822
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004823bool PreCreateFramebuffer(
4824 VkDevice device,
4825 const VkFramebufferCreateInfo* pCreateInfo)
4826{
4827 if(pCreateInfo != nullptr)
4828 {
4829 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4830 {
4831 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4832 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4833 return false;
4834 }
4835 if(pCreateInfo->pAttachments != nullptr)
4836 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004837 }
4838 }
4839
4840 return true;
4841}
4842
4843bool PostCreateFramebuffer(
4844 VkDevice device,
4845 VkFramebuffer* pFramebuffer,
4846 VkResult result)
4847{
4848
4849 if(pFramebuffer != nullptr)
4850 {
4851 }
4852
4853 if(result < VK_SUCCESS)
4854 {
4855 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4856 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4857 return false;
4858 }
4859
4860 return true;
4861}
4862
4863VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4864 VkDevice device,
4865 const VkFramebufferCreateInfo* pCreateInfo,
4866 VkFramebuffer* pFramebuffer)
4867{
4868 PreCreateFramebuffer(device, pCreateInfo);
4869
4870 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
4871
4872 PostCreateFramebuffer(device, pFramebuffer, result);
4873
4874 return result;
4875}
4876
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004877bool PreCreateRenderPass(
4878 VkDevice device,
4879 const VkRenderPassCreateInfo* pCreateInfo)
4880{
4881 if(pCreateInfo != nullptr)
4882 {
4883 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4884 {
4885 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4886 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4887 return false;
4888 }
4889 if(pCreateInfo->pAttachments != nullptr)
4890 {
4891 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
4892 {
4893 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4894 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
4895 return false;
4896 }
4897 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4898 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4899 {
4900 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4901 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4902 return false;
4903 }
4904 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4905 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4906 {
4907 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4908 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4909 return false;
4910 }
4911 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4912 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4913 {
4914 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4915 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4916 return false;
4917 }
4918 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4919 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4920 {
4921 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4922 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4923 return false;
4924 }
4925 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4926 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4927 {
4928 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4929 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4930 return false;
4931 }
4932 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4933 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4934 {
4935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4936 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4937 return false;
4938 }
4939 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4940 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4941 {
4942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4943 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4944 return false;
4945 }
4946 }
4947 if(pCreateInfo->pSubpasses != nullptr)
4948 {
4949 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
4950 {
4951 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4952 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
4953 return false;
4954 }
4955 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4956 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4957 {
4958 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4959 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4960 return false;
4961 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004962 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004963 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004964 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4965 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004966 {
4967 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004968 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004969 return false;
4970 }
4971 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004972 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004973 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004974 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4975 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004976 {
4977 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004978 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004979 return false;
4980 }
4981 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004982 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004983 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004984 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4985 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004986 {
4987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004988 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004989 return false;
4990 }
4991 }
4992 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4993 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
4994 {
4995 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4996 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
4997 return false;
4998 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004999 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005000 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005001 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5002 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005003 {
5004 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005005 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005006 return false;
5007 }
5008 }
5009 }
5010 if(pCreateInfo->pDependencies != nullptr)
5011 {
5012 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5013 {
5014 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5015 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5016 return false;
5017 }
5018 }
5019 }
5020
5021 return true;
5022}
5023
5024bool PostCreateRenderPass(
5025 VkDevice device,
5026 VkRenderPass* pRenderPass,
5027 VkResult result)
5028{
5029
5030 if(pRenderPass != nullptr)
5031 {
5032 }
5033
5034 if(result < VK_SUCCESS)
5035 {
5036 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5037 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5038 return false;
5039 }
5040
5041 return true;
5042}
5043
5044VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5045 VkDevice device,
5046 const VkRenderPassCreateInfo* pCreateInfo,
5047 VkRenderPass* pRenderPass)
5048{
5049 PreCreateRenderPass(device, pCreateInfo);
5050
5051 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5052
5053 PostCreateRenderPass(device, pRenderPass, result);
5054
5055 return result;
5056}
5057
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005058bool PostGetRenderAreaGranularity(
5059 VkDevice device,
5060 VkRenderPass renderPass,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005061 VkExtent2D* pGranularity)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005062{
5063
5064
5065 if(pGranularity != nullptr)
5066 {
5067 }
5068
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005069 return true;
5070}
5071
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005072VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005073 VkDevice device,
5074 VkRenderPass renderPass,
5075 VkExtent2D* pGranularity)
5076{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005077 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005078
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005079 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005080}
5081
5082bool PreCreateCommandPool(
5083 VkDevice device,
5084 const VkCmdPoolCreateInfo* pCreateInfo)
5085{
5086 if(pCreateInfo != nullptr)
5087 {
5088 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5089 {
5090 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5091 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5092 return false;
5093 }
5094 }
5095
5096 return true;
5097}
5098
5099bool PostCreateCommandPool(
5100 VkDevice device,
5101 VkCmdPool* pCmdPool,
5102 VkResult result)
5103{
5104
5105 if(pCmdPool != nullptr)
5106 {
5107 }
5108
5109 if(result < VK_SUCCESS)
5110 {
5111 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5112 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5113 return false;
5114 }
5115
5116 return true;
5117}
5118
5119VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5120 VkDevice device,
5121 const VkCmdPoolCreateInfo* pCreateInfo,
5122 VkCmdPool* pCmdPool)
5123{
5124 PreCreateCommandPool(device, pCreateInfo);
5125
5126 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5127
5128 PostCreateCommandPool(device, pCmdPool, result);
5129
5130 return result;
5131}
5132
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005133bool PostResetCommandPool(
5134 VkDevice device,
5135 VkCmdPool cmdPool,
5136 VkCmdPoolResetFlags flags,
5137 VkResult result)
5138{
5139
5140
5141
5142 if(result < VK_SUCCESS)
5143 {
5144 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5145 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5146 return false;
5147 }
5148
5149 return true;
5150}
5151
5152VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5153 VkDevice device,
5154 VkCmdPool cmdPool,
5155 VkCmdPoolResetFlags flags)
5156{
5157 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5158
5159 PostResetCommandPool(device, cmdPool, flags, result);
5160
5161 return result;
5162}
5163
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005164bool PreCreateCommandBuffer(
5165 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005166 const VkCmdBufferAllocInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005167{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005168 if(pCreateInfo != nullptr)
5169 {
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005170 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005171 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005172 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005173 "vkAllocCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005174 return false;
5175 }
5176 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5177 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5178 {
5179 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005180 "vkAllocCommandBuffers parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005181 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005182 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005183 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005184
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005185 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005186}
5187
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005188bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005189 VkDevice device,
5190 VkCmdBuffer* pCmdBuffer,
5191 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005192{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005193
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005194 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005195 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005196 }
5197
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005198 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005199 {
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005200 std::string reason = "vkAllocCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005201 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5202 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005203 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005204
5205 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005206}
5207
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005208VK_LAYER_EXPORT VkResult VKAPI vkAllocCommandBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005209 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005210 const VkCmdBufferAllocInfo* pCreateInfo,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005211 VkCmdBuffer* pCmdBuffer)
5212{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005213 PreCreateCommandBuffer(device, pCreateInfo);
5214
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005215 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocCommandBuffers(device, pCreateInfo, pCmdBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005216
5217 PostCreateCommandBuffer(device, pCmdBuffer, result);
5218
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005219 return result;
5220}
5221
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005222bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005223 VkCmdBuffer cmdBuffer,
5224 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005225{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005226 if(pBeginInfo != nullptr)
5227 {
5228 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005229 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005230 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005231 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005232 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005233 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005234 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005235
5236 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005237}
5238
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005239bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005240 VkCmdBuffer cmdBuffer,
5241 VkResult result)
5242{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005243
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005244 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005245 {
5246 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005247 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5248 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005249 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005250
5251 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005252}
5253
5254VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5255 VkCmdBuffer cmdBuffer,
5256 const VkCmdBufferBeginInfo* pBeginInfo)
5257{
5258 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005259
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005260 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5261
5262 PostBeginCommandBuffer(cmdBuffer, result);
5263
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005264 return result;
5265}
5266
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005267bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005268 VkCmdBuffer cmdBuffer,
5269 VkResult result)
5270{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005271
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005272 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005273 {
5274 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005275 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5276 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005277 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005278
5279 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005280}
5281
5282VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5283 VkCmdBuffer cmdBuffer)
5284{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005285 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5286
5287 PostEndCommandBuffer(cmdBuffer, result);
5288
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005289 return result;
5290}
5291
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005292bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005293 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005294 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005295 VkResult result)
5296{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005297
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005298
5299 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005300 {
5301 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005302 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5303 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005304 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005305
5306 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005307}
5308
5309VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005310 VkCmdBuffer cmdBuffer,
5311 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005312{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005313 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005314
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005315 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005316
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005317 return result;
5318}
5319
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005320bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005321 VkCmdBuffer cmdBuffer,
5322 VkPipelineBindPoint pipelineBindPoint,
5323 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005324{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005325
5326 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5327 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5328 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005329 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005330 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005331 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005332 }
5333
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005334
5335 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005336}
5337
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005338VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5339 VkCmdBuffer cmdBuffer,
5340 VkPipelineBindPoint pipelineBindPoint,
5341 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005342{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005343 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5344
5345 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5346}
5347
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005348VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005349{
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005350 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5351}
5352
5353VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5354{
5355 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005356}
5357
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005358VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005359{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005360 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005361}
5362
Chia-I Wufa950c52015-10-26 19:08:09 +08005363VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005364{
Chia-I Wufa950c52015-10-26 19:08:09 +08005365 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005366}
5367
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005368VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005369{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005370 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northropf5bd2252015-08-17 11:10:49 -06005371}
5372
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005373VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005374{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005375 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005376}
5377
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005378VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005379{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005380 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005381}
5382
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005383VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005384{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005385 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005386}
5387
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005388VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005389{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005390 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005391}
5392
5393bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005394 VkCmdBuffer cmdBuffer,
5395 const VkDescriptorSet* pDescriptorSets,
5396 const uint32_t* pDynamicOffsets)
5397{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005398 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005399 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005400 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005401
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005402 if(pDynamicOffsets != nullptr)
5403 {
5404 }
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 PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005410 VkCmdBuffer cmdBuffer,
5411 VkPipelineBindPoint pipelineBindPoint,
5412 VkPipelineLayout layout,
5413 uint32_t firstSet,
5414 uint32_t setCount,
5415 uint32_t dynamicOffsetCount)
5416{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005417
5418 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5419 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5420 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005421 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005422 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005423 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005424 }
5425
5426
5427
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005428
5429
5430 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005431}
5432
5433VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5434 VkCmdBuffer cmdBuffer,
5435 VkPipelineBindPoint pipelineBindPoint,
5436 VkPipelineLayout layout,
5437 uint32_t firstSet,
5438 uint32_t setCount,
5439 const VkDescriptorSet* pDescriptorSets,
5440 uint32_t dynamicOffsetCount,
5441 const uint32_t* pDynamicOffsets)
5442{
5443 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005444
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005445 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5446
5447 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5448}
5449
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005450bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005451 VkCmdBuffer cmdBuffer,
5452 VkBuffer buffer,
5453 VkDeviceSize offset,
5454 VkIndexType indexType)
5455{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005456
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005457
5458
5459 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5460 indexType > VK_INDEX_TYPE_END_RANGE)
5461 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005462 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005463 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005464 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005465 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005466
5467 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005468}
5469
5470VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5471 VkCmdBuffer cmdBuffer,
5472 VkBuffer buffer,
5473 VkDeviceSize offset,
5474 VkIndexType indexType)
5475{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005476 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5477
5478 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5479}
5480
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005481bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005482 VkCmdBuffer cmdBuffer,
5483 const VkBuffer* pBuffers,
5484 const VkDeviceSize* pOffsets)
5485{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005486 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005487 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005488 }
5489
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005490 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005491 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005492 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005493
5494 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005495}
5496
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005497bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005498 VkCmdBuffer cmdBuffer,
5499 uint32_t startBinding,
5500 uint32_t bindingCount)
5501{
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
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06005508VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005509 VkCmdBuffer cmdBuffer,
5510 uint32_t startBinding,
5511 uint32_t bindingCount,
5512 const VkBuffer* pBuffers,
5513 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005514{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005515 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005516
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005517 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5518
5519 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005520}
5521
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005522bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005523 VkCmdBuffer cmdBuffer,
5524 uint32_t firstVertex,
5525 uint32_t vertexCount,
5526 uint32_t firstInstance,
5527 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005528{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529
5530
5531
5532
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005533
5534 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005535}
5536
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005537VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5538 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005539 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005540 uint32_t instanceCount,
5541 uint32_t firstVertex,
5542 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005543{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005544 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005545
5546 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005547}
5548
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005549bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005550 VkCmdBuffer cmdBuffer,
5551 uint32_t firstIndex,
5552 uint32_t indexCount,
5553 int32_t vertexOffset,
5554 uint32_t firstInstance,
5555 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005556{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005557
5558
5559
5560
5561
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005562
5563 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005564}
5565
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005566VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5567 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005568 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005569 uint32_t instanceCount,
5570 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005571 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005572 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005573{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005574 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005575
5576 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5577}
5578
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005579bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005580 VkCmdBuffer cmdBuffer,
5581 VkBuffer buffer,
5582 VkDeviceSize offset,
5583 uint32_t count,
5584 uint32_t stride)
5585{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005586
5587
5588
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005589
5590
5591 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005592}
5593
5594VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5595 VkCmdBuffer cmdBuffer,
5596 VkBuffer buffer,
5597 VkDeviceSize offset,
5598 uint32_t count,
5599 uint32_t stride)
5600{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005601 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5602
5603 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5604}
5605
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005606bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005607 VkCmdBuffer cmdBuffer,
5608 VkBuffer buffer,
5609 VkDeviceSize offset,
5610 uint32_t count,
5611 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005612{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005613
5614
5615
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005616
5617
5618 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005619}
5620
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005621VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5622 VkCmdBuffer cmdBuffer,
5623 VkBuffer buffer,
5624 VkDeviceSize offset,
5625 uint32_t count,
5626 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005627{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005628 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5629
5630 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5631}
5632
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005633bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005634 VkCmdBuffer cmdBuffer,
5635 uint32_t x,
5636 uint32_t y,
5637 uint32_t z)
5638{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005639
5640
5641
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005642
5643 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005644}
5645
5646VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5647 VkCmdBuffer cmdBuffer,
5648 uint32_t x,
5649 uint32_t y,
5650 uint32_t z)
5651{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005652 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5653
5654 PostCmdDispatch(cmdBuffer, x, y, z);
5655}
5656
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005657bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005658 VkCmdBuffer cmdBuffer,
5659 VkBuffer buffer,
5660 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005661{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005662
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005663
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005664
5665 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005666}
5667
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005668VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5669 VkCmdBuffer cmdBuffer,
5670 VkBuffer buffer,
5671 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005672{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005673 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5674
5675 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005676}
5677
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005678bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005679 VkCmdBuffer cmdBuffer,
5680 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005681{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005682 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005683 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005684 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005685
5686 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005687}
5688
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005689bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005690 VkCmdBuffer cmdBuffer,
5691 VkBuffer srcBuffer,
5692 VkBuffer destBuffer,
5693 uint32_t regionCount)
5694{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005695
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005696
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005697
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005698
5699 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005700}
5701
5702VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5703 VkCmdBuffer cmdBuffer,
5704 VkBuffer srcBuffer,
5705 VkBuffer destBuffer,
5706 uint32_t regionCount,
5707 const VkBufferCopy* pRegions)
5708{
5709 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005710
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005711 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5712
5713 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5714}
5715
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005716bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005717 VkCmdBuffer cmdBuffer,
5718 const VkImageCopy* pRegions)
5719{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005720 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005721 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005722 if ((pRegions->srcSubresource.aspect &
5723 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005724 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005725 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005726 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005727 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005728 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005729 if ((pRegions->destSubresource.aspect &
5730 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005731 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005732 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005733 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005734 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005735 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005736 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005737
5738 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005739}
5740
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005741bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005742 VkCmdBuffer cmdBuffer,
5743 VkImage srcImage,
5744 VkImageLayout srcImageLayout,
5745 VkImage destImage,
5746 VkImageLayout destImageLayout,
5747 uint32_t regionCount)
5748{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005749
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005750
5751 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5752 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5753 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005754 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005755 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005756 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005757 }
5758
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005759
5760 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5761 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5762 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005763 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005764 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005765 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005766 }
5767
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005768
5769 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005770}
5771
5772VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5773 VkCmdBuffer cmdBuffer,
5774 VkImage srcImage,
5775 VkImageLayout srcImageLayout,
5776 VkImage destImage,
5777 VkImageLayout destImageLayout,
5778 uint32_t regionCount,
5779 const VkImageCopy* pRegions)
5780{
5781 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005782
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005783 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5784
5785 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5786}
5787
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005788bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005789 VkCmdBuffer cmdBuffer,
5790 const VkImageBlit* pRegions)
5791{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005792 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005793 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005794 if ((pRegions->srcSubresource.aspect &
5795 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005796 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005797 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005798 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005799 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005800 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005801 if ((pRegions->destSubresource.aspect &
5802 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005803 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005804 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005805 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005806 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005808 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005809
5810 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005811}
5812
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005813bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005814 VkCmdBuffer cmdBuffer,
5815 VkImage srcImage,
5816 VkImageLayout srcImageLayout,
5817 VkImage destImage,
5818 VkImageLayout destImageLayout,
5819 uint32_t regionCount,
5820 VkTexFilter filter)
5821{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005822
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005823
5824 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5825 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5826 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005827 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005828 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005829 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005830 }
5831
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005832
5833 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5834 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5835 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005836 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005837 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005838 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005839 }
5840
5841
5842 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
5843 filter > VK_TEX_FILTER_END_RANGE)
5844 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005845 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005846 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005847 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005848 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005849
5850 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005851}
5852
5853VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
5854 VkCmdBuffer cmdBuffer,
5855 VkImage srcImage,
5856 VkImageLayout srcImageLayout,
5857 VkImage destImage,
5858 VkImageLayout destImageLayout,
5859 uint32_t regionCount,
5860 const VkImageBlit* pRegions,
5861 VkTexFilter filter)
5862{
5863 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005864
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005865 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
5866
5867 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
5868}
5869
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005870bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005871 VkCmdBuffer cmdBuffer,
5872 const VkBufferImageCopy* pRegions)
5873{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005874 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005875 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005876 if ((pRegions->imageSubresource.aspect &
5877 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005878 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005879 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005880 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005881 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005882 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005883 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005884
5885 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005886}
5887
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005888bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005889 VkCmdBuffer cmdBuffer,
5890 VkBuffer srcBuffer,
5891 VkImage destImage,
5892 VkImageLayout destImageLayout,
5893 uint32_t regionCount)
5894{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005895
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005896
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005897
5898 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5899 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5900 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005901 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005902 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005903 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005904 }
5905
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005906
5907 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005908}
5909
5910VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
5911 VkCmdBuffer cmdBuffer,
5912 VkBuffer srcBuffer,
5913 VkImage destImage,
5914 VkImageLayout destImageLayout,
5915 uint32_t regionCount,
5916 const VkBufferImageCopy* pRegions)
5917{
5918 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005919
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005920 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
5921
5922 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
5923}
5924
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005925bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005926 VkCmdBuffer cmdBuffer,
5927 const VkBufferImageCopy* pRegions)
5928{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005929 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005930 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005931 if ((pRegions->imageSubresource.aspect &
5932 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005933 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005934 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005935 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005936 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005937 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005938 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005939
5940 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005941}
5942
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005943bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005944 VkCmdBuffer cmdBuffer,
5945 VkImage srcImage,
5946 VkImageLayout srcImageLayout,
5947 VkBuffer destBuffer,
5948 uint32_t regionCount)
5949{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005950
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005951
5952 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5953 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5954 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005955 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005956 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005957 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005958 }
5959
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005960
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005961
5962 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005963}
5964
5965VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
5966 VkCmdBuffer cmdBuffer,
5967 VkImage srcImage,
5968 VkImageLayout srcImageLayout,
5969 VkBuffer destBuffer,
5970 uint32_t regionCount,
5971 const VkBufferImageCopy* pRegions)
5972{
5973 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005974
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005975 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
5976
5977 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
5978}
5979
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005980bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005981 VkCmdBuffer cmdBuffer,
5982 const uint32_t* pData)
5983{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005984 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005985 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005986 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005987
5988 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005989}
5990
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005991bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005992 VkCmdBuffer cmdBuffer,
5993 VkBuffer destBuffer,
5994 VkDeviceSize destOffset,
5995 VkDeviceSize dataSize)
5996{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005997
5998
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005999
6000
6001 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006002}
6003
6004VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6005 VkCmdBuffer cmdBuffer,
6006 VkBuffer destBuffer,
6007 VkDeviceSize destOffset,
6008 VkDeviceSize dataSize,
6009 const uint32_t* pData)
6010{
6011 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006012
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006013 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6014
6015 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6016}
6017
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006018bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006019 VkCmdBuffer cmdBuffer,
6020 VkBuffer destBuffer,
6021 VkDeviceSize destOffset,
6022 VkDeviceSize fillSize,
6023 uint32_t data)
6024{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006025
6026
6027
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006028
6029
6030 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006031}
6032
6033VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6034 VkCmdBuffer cmdBuffer,
6035 VkBuffer destBuffer,
6036 VkDeviceSize destOffset,
6037 VkDeviceSize fillSize,
6038 uint32_t data)
6039{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006040 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6041
6042 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6043}
6044
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006045bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12006047 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006048 const VkImageSubresourceRange* pRanges)
6049{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006050 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006051 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006052 }
6053
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006054 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006055 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006056 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006057 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006058
6059 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006060}
6061
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006062bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006063 VkCmdBuffer cmdBuffer,
6064 VkImage image,
6065 VkImageLayout imageLayout,
6066 uint32_t rangeCount)
6067{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006068
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006069
6070 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6071 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6072 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006073 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006074 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006075 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006076 }
6077
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006078
6079 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006080}
6081
6082VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6083 VkCmdBuffer cmdBuffer,
6084 VkImage image,
6085 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12006086 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006087 uint32_t rangeCount,
6088 const VkImageSubresourceRange* pRanges)
6089{
6090 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006091
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006092 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6093
6094 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6095}
6096
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006097bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006098 VkCmdBuffer cmdBuffer,
6099 const VkImageSubresourceRange* pRanges)
6100{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006101 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006102 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006103 /*
6104 * TODO: How do we validation pRanges->aspectMask?
6105 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6106 * VK_IMAGE_ASPECT_STENCIL_BIT.
6107 */
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 PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006114 VkCmdBuffer cmdBuffer,
6115 VkImage image,
6116 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006117 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006118 uint32_t rangeCount)
6119{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006120
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006121
6122 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6123 imageLayout > 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 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006127 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006128 }
6129
6130
6131
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006132
6133 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006134}
6135
Chris Forbes2951d7d2015-06-22 17:21:59 +12006136VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006137 VkCmdBuffer cmdBuffer,
6138 VkImage image,
6139 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006140 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006141 uint32_t rangeCount,
6142 const VkImageSubresourceRange* pRanges)
6143{
Chris Forbes2951d7d2015-06-22 17:21:59 +12006144 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006145
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006146 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006147
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006148 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006149}
6150
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006151bool PreCmdClearAttachments(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006152 VkCmdBuffer cmdBuffer,
6153 const VkClearColorValue* pColor,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06006154 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006155{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006156 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006157 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006158 }
6159
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006160 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006161 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006162 }
6163
6164 return true;
6165}
6166
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006167VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6168 VkCmdBuffer cmdBuffer,
6169 uint32_t attachmentCount,
6170 const VkClearAttachment* pAttachments,
6171 uint32_t rectCount,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06006172 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006173{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006174 for (uint32_t i = 0; i < attachmentCount; i++) {
6175 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006176 }
6177
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006178 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006179}
6180
6181bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006182 VkCmdBuffer cmdBuffer,
6183 const VkImageResolve* pRegions)
6184{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006185 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006186 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006187 if ((pRegions->srcSubresource.aspect &
6188 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006189 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006190 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006191 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006192 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006193 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006194 if ((pRegions->destSubresource.aspect &
6195 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006196 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006197 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006198 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006199 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006200 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006201 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006202
6203 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006204}
6205
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006206bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006207 VkCmdBuffer cmdBuffer,
6208 VkImage srcImage,
6209 VkImageLayout srcImageLayout,
6210 VkImage destImage,
6211 VkImageLayout destImageLayout,
6212 uint32_t regionCount)
6213{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006214
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006215
6216 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6217 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6218 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006219 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006220 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006221 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006222 }
6223
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006224
6225 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6226 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6227 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006228 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006229 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006230 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006231 }
6232
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006233
6234 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006235}
6236
6237VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6238 VkCmdBuffer cmdBuffer,
6239 VkImage srcImage,
6240 VkImageLayout srcImageLayout,
6241 VkImage destImage,
6242 VkImageLayout destImageLayout,
6243 uint32_t regionCount,
6244 const VkImageResolve* pRegions)
6245{
6246 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006247
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006248 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6249
6250 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6251}
6252
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006253bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006254 VkCmdBuffer cmdBuffer,
6255 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006256 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006257{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006258
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006259
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006260
6261 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006262}
6263
6264VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6265 VkCmdBuffer cmdBuffer,
6266 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006267 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006268{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006269 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006270
Tony Barbourc2e987e2015-06-29 16:20:35 -06006271 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006272}
6273
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006274bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006275 VkCmdBuffer cmdBuffer,
6276 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006277 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006278{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006279
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006280
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006281
6282 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006283}
6284
6285VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6286 VkCmdBuffer cmdBuffer,
6287 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006288 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006289{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006290 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006291
Tony Barbourc2e987e2015-06-29 16:20:35 -06006292 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006293}
6294
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006295bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006296 VkCmdBuffer cmdBuffer,
6297 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006298 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006299{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006300 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006301 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006302 }
6303
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006304 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006305 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006306 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006307
6308 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006309}
6310
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006311bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006312 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006313 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006314 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006315 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006316 uint32_t memBarrierCount)
6317{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006318
Tony Barbourc2e987e2015-06-29 16:20:35 -06006319
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006320
6321
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006322
6323 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006324}
6325
6326VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6327 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006328 uint32_t eventCount,
6329 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006330 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006331 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006332 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006333 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006334{
6335 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006336
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006337 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006338
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006339 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006340}
6341
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006342bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006343 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006344 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006345{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006346 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006347 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006348 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006349
6350 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006351}
6352
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006353bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006354 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006355 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006356 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006357 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006358 uint32_t memBarrierCount)
6359{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006360
Tony Barbourc2e987e2015-06-29 16:20:35 -06006361
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006362
6363
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006364
6365 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006366}
6367
6368VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6369 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006370 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006371 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006372 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006373 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006374 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006375{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006376 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006377
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006378 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006379
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006380 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006381}
6382
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006383bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006384 VkCmdBuffer cmdBuffer,
6385 VkQueryPool queryPool,
6386 uint32_t slot,
6387 VkQueryControlFlags flags)
6388{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006389
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006390
6391
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006392
6393 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006394}
6395
6396VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6397 VkCmdBuffer cmdBuffer,
6398 VkQueryPool queryPool,
6399 uint32_t slot,
6400 VkQueryControlFlags flags)
6401{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006402 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6403
6404 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6405}
6406
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006407bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006408 VkCmdBuffer cmdBuffer,
6409 VkQueryPool queryPool,
6410 uint32_t slot)
6411{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006412
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006413
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006414
6415 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006416}
6417
6418VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6419 VkCmdBuffer cmdBuffer,
6420 VkQueryPool queryPool,
6421 uint32_t slot)
6422{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006423 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6424
6425 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6426}
6427
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006428bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006429 VkCmdBuffer cmdBuffer,
6430 VkQueryPool queryPool,
6431 uint32_t startQuery,
6432 uint32_t queryCount)
6433{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006434
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006435
6436
6437
6438 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006439}
6440
6441VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6442 VkCmdBuffer cmdBuffer,
6443 VkQueryPool queryPool,
6444 uint32_t startQuery,
6445 uint32_t queryCount)
6446{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006447 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6448
6449 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6450}
6451
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006452bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006453 VkCmdBuffer cmdBuffer,
6454 VkTimestampType timestampType,
6455 VkBuffer destBuffer,
6456 VkDeviceSize destOffset)
6457{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006458
6459 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6460 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6461 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006462 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006463 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006464 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006465 }
6466
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006467
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006468
6469 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006470}
6471
6472VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6473 VkCmdBuffer cmdBuffer,
6474 VkTimestampType timestampType,
6475 VkBuffer destBuffer,
6476 VkDeviceSize destOffset)
6477{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006478 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6479
6480 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6481}
6482
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006483bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006484 VkCmdBuffer cmdBuffer,
6485 VkQueryPool queryPool,
6486 uint32_t startQuery,
6487 uint32_t queryCount,
6488 VkBuffer destBuffer,
6489 VkDeviceSize destOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006490 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006491 VkQueryResultFlags flags)
6492{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006493
6494
6495
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006496
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006497
6498
6499
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006500
6501 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006502}
6503
Jeremy Hayescf469132015-04-17 10:36:53 -06006504VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006505 VkCmdBuffer cmdBuffer,
6506 VkQueryPool queryPool,
6507 uint32_t startQuery,
6508 uint32_t queryCount,
6509 VkBuffer destBuffer,
6510 VkDeviceSize destOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006511 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006512 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006513{
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006514 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006515
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006516 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006517}
6518
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006519bool PreCmdPushConstants(
6520 VkCmdBuffer cmdBuffer,
6521 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006522{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006523 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006524 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006525 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006526
6527 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006528}
6529
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006530bool PostCmdPushConstants(
6531 VkCmdBuffer cmdBuffer,
6532 VkPipelineLayout layout,
6533 VkShaderStageFlags stageFlags,
6534 uint32_t start,
6535 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006536{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006537
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006538
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006539
6540
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006541
6542 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006543}
6544
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006545VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6546 VkCmdBuffer cmdBuffer,
6547 VkPipelineLayout layout,
6548 VkShaderStageFlags stageFlags,
6549 uint32_t start,
6550 uint32_t length,
6551 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006552{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006553 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006554
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006555 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006556
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006557 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006558}
6559
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006560bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006561 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006562 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006563{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006564 if(pRenderPassBegin != nullptr)
6565 {
6566 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006567 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006568 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006569 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006570 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006571 }
Cody Northropc332eef2015-08-04 11:51:03 -06006572 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006573 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006574 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006575 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006576
6577 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006578}
6579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006580bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006581 VkCmdBuffer cmdBuffer,
6582 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006583{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006584
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006585 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6586 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6587 {
6588 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6589 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6590 return false;
6591 }
6592
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006593 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006594}
6595
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006596VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6597 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006598 const VkRenderPassBeginInfo* pRenderPassBegin,
6599 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006600{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006601 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6602
Chia-I Wuc278df82015-07-07 11:50:03 +08006603 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006604
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006605 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006606}
6607
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006608bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08006609 VkCmdBuffer cmdBuffer,
6610 VkRenderPassContents contents)
6611{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006612
6613 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006614 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006615 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006616 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006617 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6618 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006619 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006620
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006621 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006622}
6623
6624VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6625 VkCmdBuffer cmdBuffer,
6626 VkRenderPassContents contents)
6627{
Chia-I Wuc278df82015-07-07 11:50:03 +08006628 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6629
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006630 PostCmdNextSubpass(cmdBuffer, contents);
6631}
6632
6633bool PostCmdEndRenderPass(
6634 VkCmdBuffer cmdBuffer)
6635{
6636
6637 return true;
6638}
6639
6640VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6641 VkCmdBuffer cmdBuffer)
6642{
6643 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6644
6645 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006646}
6647
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006648bool PreCmdExecuteCommands(
6649 VkCmdBuffer cmdBuffer,
6650 const VkCmdBuffer* pCmdBuffers)
6651{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006652 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006653 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006654 }
6655
6656 return true;
6657}
6658
6659bool PostCmdExecuteCommands(
6660 VkCmdBuffer cmdBuffer,
6661 uint32_t cmdBuffersCount)
6662{
6663
6664
6665 return true;
6666}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006667
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006668VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006669 VkCmdBuffer cmdBuffer,
6670 uint32_t cmdBuffersCount,
6671 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006672{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006673 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6674
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006675 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6676
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006677 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006678}
6679
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006680VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006681{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006682 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006683 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006684 }
6685
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006686 /* loader uses this to force layer initialization; device object is wrapped */
6687 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006688 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006689 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006690 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006691
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006692 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006693 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006694 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006695 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006696 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006697 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006698 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006699 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006700 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006701 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006702 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006703 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006704 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006705 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006706 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006707 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006708 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006709 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006710 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006711 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006712 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006713 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006714 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006715 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006716 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006717 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006718 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006719 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006720 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006721 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006722 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006723 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006724 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006725 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006726 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006727 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006728 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006729 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006730 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006731 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006732 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006733 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006734 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006735 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006736 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006737 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006738 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006739 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006740 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006741 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006742 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006743 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006744 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006745 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006746 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006747 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006748 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006749 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine6715e522015-09-15 14:59:14 -05006750 if (!strcmp(funcName, "vkCreateShaderModule"))
6751 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006752 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006753 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006754 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006755 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006756 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006757 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006758 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006759 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006760 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006761 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006762 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006763 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006764 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006765 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006766 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006767 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006768 if (!strcmp(funcName, "vkCmdSetViewport"))
6769 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006770 if (!strcmp(funcName, "vkCmdSetScissor"))
6771 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006772 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6773 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6774 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6775 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6776 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6777 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6778 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6779 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6780 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6781 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6782 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6783 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6784 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6785 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06006786 if (!strcmp(funcName, "vkAllocCommandBuffers"))
6787 return (PFN_vkVoidFunction) vkAllocCommandBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006788 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006789 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006790 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006791 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006792 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006793 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006794 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006795 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006796 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006797 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006798 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006799 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006800 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006801 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006802 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006803 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006804 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006805 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006806 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006807 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006808 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006809 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006810 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006811 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006812 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006813 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006814 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006815 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006816 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006817 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006818 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006819 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006820 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006821 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006822 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006823 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006824 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006825 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006826 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006827 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006828 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006829 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006830 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006831 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006832 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006833 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006834 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006835 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006836 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006837 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006838 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006839 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006840 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006841 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006842 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006843 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006844 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006845 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006846 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006847 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006848 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006849 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006850 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006851 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006852 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006853 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006854 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006855 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08006856 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006857 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006858
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006859 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006860 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006861 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006862 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006863 }
6864}
6865
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006866VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006867{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006868 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006869 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006870 }
6871
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006872 /* loader uses this to force layer initialization; instance object is wrapped */
6873 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006874 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006875 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006876 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006877
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006878 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006879 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006880 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006881 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006882 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006883 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006884 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006885 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006886 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006887 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06006888 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006889 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06006890 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6891 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6892 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6893 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6894 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6895 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6896 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6897 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006898
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006899 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006900 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006901 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006902 return fptr;
6903
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006904 {
6905 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6906 return NULL;
6907 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6908 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006909}