blob: 989a6bdae9804be7f763bd388af54cd0f1e5cb14 [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
2058VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2059 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,
3305 size_t* pDataSize,
3306 void* pData,
3307 VkQueryResultFlags flags,
3308 VkResult result)
3309{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003310
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003311
3312
3313
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003314 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003315 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003316 }
3317
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003318 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003319 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003320 }
3321
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003322
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003323 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003324 {
3325 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003326 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3327 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003328 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003329
3330 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003331}
3332
3333VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3334 VkDevice device,
3335 VkQueryPool queryPool,
3336 uint32_t startQuery,
3337 uint32_t queryCount,
3338 size_t* pDataSize,
3339 void* pData,
3340 VkQueryResultFlags flags)
3341{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003342 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3343
3344 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3345
3346 return result;
3347}
3348
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003349bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003350 VkDevice device,
3351 const VkBufferCreateInfo* pCreateInfo)
3352{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003353 if(pCreateInfo != nullptr)
3354 {
3355 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003356 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003357 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003358 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003359 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003360 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003361 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3362 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003363 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003365 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003366 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003367 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003368 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003369 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003370 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003371 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003372
3373 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003374}
3375
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003376bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003377 VkDevice device,
3378 VkBuffer* pBuffer,
3379 VkResult result)
3380{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003381
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003382 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003383 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003384 }
3385
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003386 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003387 {
3388 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003389 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3390 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003391 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003392
3393 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003394}
3395
3396VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3397 VkDevice device,
3398 const VkBufferCreateInfo* pCreateInfo,
3399 VkBuffer* pBuffer)
3400{
3401 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003402
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003403 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3404
3405 PostCreateBuffer(device, pBuffer, result);
3406
3407 return result;
3408}
3409
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003410bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003411 VkDevice device,
3412 const VkBufferViewCreateInfo* pCreateInfo)
3413{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003414 if(pCreateInfo != nullptr)
3415 {
3416 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003417 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003418 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003419 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003420 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003421 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003422 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3423 pCreateInfo->format > VK_FORMAT_END_RANGE)
3424 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003425 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003426 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003427 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003428 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003429 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003430
3431 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003432}
3433
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003434bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003435 VkDevice device,
3436 VkBufferView* pView,
3437 VkResult result)
3438{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003439
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003440 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003442 }
3443
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003444 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003445 {
3446 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003447 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3448 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003449 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003450
3451 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452}
3453
3454VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3455 VkDevice device,
3456 const VkBufferViewCreateInfo* pCreateInfo,
3457 VkBufferView* pView)
3458{
3459 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003460
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003461 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3462
3463 PostCreateBufferView(device, pView, result);
3464
3465 return result;
3466}
3467
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003468bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003469 VkDevice device,
3470 const VkImageCreateInfo* pCreateInfo)
3471{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003472 if(pCreateInfo != nullptr)
3473 {
3474 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003475 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003476 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003477 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003478 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003479 }
3480 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3481 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3482 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003483 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003484 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003485 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003486 }
3487 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3488 pCreateInfo->format > VK_FORMAT_END_RANGE)
3489 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003491 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003492 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003493 }
3494 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3495 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3496 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003497 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003498 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003499 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003500 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003501 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3502 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003503 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003504 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3505 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003506 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003507 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003508 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003509 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003510 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003511 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003512
3513 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003514}
3515
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003516bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003517 VkDevice device,
3518 VkImage* pImage,
3519 VkResult result)
3520{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003521
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003522 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003523 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003524 }
3525
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003526 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527 {
3528 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003529 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3530 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003531 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003532
3533 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003534}
3535
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003536VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3537 VkDevice device,
3538 const VkImageCreateInfo* pCreateInfo,
3539 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003540{
3541 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003542
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003543 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3544
3545 PostCreateImage(device, pImage, result);
3546
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003547 return result;
3548}
3549
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003550bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003551 VkDevice device,
3552 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003553{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003554 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003555 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06003556 if ((pSubresource->aspect &
3557 (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 -06003558 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003560 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003561 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003562 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003563 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003564
3565 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003566}
3567
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003568bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003569 VkDevice device,
3570 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003571 VkSubresourceLayout* pLayout)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003573
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003574
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003575 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003576 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003577 }
3578
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003579 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003580}
3581
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003582VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003583 VkDevice device,
3584 VkImage image,
3585 const VkImageSubresource* pSubresource,
3586 VkSubresourceLayout* pLayout)
3587{
3588 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003589
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003590 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003591
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003592 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003593}
3594
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003595bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003596 VkDevice device,
3597 const VkImageViewCreateInfo* pCreateInfo)
3598{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003599 if(pCreateInfo != nullptr)
3600 {
3601 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003602 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003603 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003604 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003605 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003606 }
3607 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3608 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3609 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003610 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003611 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003612 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003613 }
3614 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3615 pCreateInfo->format > VK_FORMAT_END_RANGE)
3616 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003617 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003618 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003619 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003620 }
3621 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3622 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3623 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003624 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003625 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003626 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003627 }
3628 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3629 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3630 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003631 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003632 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003633 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003634 }
3635 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3636 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3637 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003638 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003639 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003640 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003641 }
3642 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3643 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3644 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003645 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003646 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003647 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003648 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003649 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003650
3651 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003652}
3653
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003654bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003655 VkDevice device,
3656 VkImageView* pView,
3657 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003658{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003659
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003660 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003661 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003662 }
3663
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003664 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003665 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003666 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003667 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3668 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003669 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003670
3671 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003672}
3673
3674VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3675 VkDevice device,
3676 const VkImageViewCreateInfo* pCreateInfo,
3677 VkImageView* pView)
3678{
3679 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003680
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003681 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3682
3683 PostCreateImageView(device, pView, result);
3684
3685 return result;
3686}
3687
Michael Lentine6715e522015-09-15 14:59:14 -05003688bool PreCreateShaderModule(
3689 VkDevice device,
3690 const VkShaderModuleCreateInfo* pCreateInfo)
3691{
3692 if(pCreateInfo) {
3693 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3694 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3695 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3696 return false;
3697 }
3698 if(!pCreateInfo->pCode) {
3699 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3700 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3701 return false;
3702 }
3703 } else {
3704 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3705 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3706 return false;
3707 }
3708
3709 return true;
3710}
3711
3712bool PostCreateShaderModule(
3713 VkDevice device,
3714 VkShaderModule* pShaderModule,
3715 VkResult result)
3716{
3717 if(result < VK_SUCCESS) {
3718 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3719 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3720 return false;
3721 }
3722
3723 return true;
3724}
3725
3726VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3727 VkDevice device,
3728 const VkShaderModuleCreateInfo* pCreateInfo,
3729 VkShaderModule* pShaderModule)
3730{
3731 PreCreateShaderModule(device, pCreateInfo);
3732 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3733 PostCreateShaderModule(device, pShaderModule, result);
3734 return result;
3735}
3736
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003737bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003738 VkDevice device,
3739 const VkShaderCreateInfo* pCreateInfo)
3740{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003741 if(pCreateInfo != nullptr)
3742 {
3743 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003744 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003745 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003746 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003747 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003748 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003749 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003750 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003751 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003752 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003753
3754 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003755}
3756
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003757bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003758 VkDevice device,
3759 VkShader* pShader,
3760 VkResult result)
3761{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003762
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003763 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003764 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003765 }
3766
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003767 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003768 {
3769 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003770 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3771 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003772 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003773
3774 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003775}
3776
3777VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3778 VkDevice device,
3779 const VkShaderCreateInfo* pCreateInfo,
3780 VkShader* pShader)
3781{
3782 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003783
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003784 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3785
3786 PostCreateShader(device, pShader, result);
3787
3788 return result;
3789}
3790
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003791bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003792 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003793 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003794{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003795 if(pCreateInfo != nullptr)
3796 {
3797 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003798 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003799 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003800 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003801 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003802 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003803 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003804 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003805 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003806 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003807
3808 return true;
3809}
3810
3811bool PostCreatePipelineCache(
3812 VkDevice device,
3813 VkPipelineCache* pPipelineCache,
3814 VkResult result)
3815{
3816
3817 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003818 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003819 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003820
3821 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003822 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003823 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06003824 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3825 return false;
3826 }
3827
3828 return true;
3829}
3830
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003831VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003832 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003833 const VkPipelineCacheCreateInfo* pCreateInfo,
3834 VkPipelineCache* pPipelineCache)
3835{
3836 PreCreatePipelineCache(device, pCreateInfo);
3837
3838 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3839
3840 PostCreatePipelineCache(device, pPipelineCache, result);
3841
3842 return result;
3843}
3844
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003845bool PostGetPipelineCacheSize(
3846 VkDevice device,
3847 VkPipelineCache pipelineCache)
3848{
3849
3850
3851 return true;
3852}
3853
3854VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
3855 VkDevice device,
3856 VkPipelineCache pipelineCache)
3857{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06003858 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003859
3860 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06003861
3862 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003863}
3864
3865bool PostGetPipelineCacheData(
3866 VkDevice device,
3867 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003868 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003869 void* pData,
3870 VkResult result)
3871{
3872
3873
3874 if(pData != nullptr)
3875 {
3876 }
3877
3878 if(result < VK_SUCCESS)
3879 {
3880 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3881 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3882 return false;
3883 }
3884
3885 return true;
3886}
3887
3888VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3889 VkDevice device,
3890 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003891 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003892 void* pData)
3893{
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003894 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, dataSize, pData);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003895
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003896 PostGetPipelineCacheData(device, pipelineCache, dataSize, pData, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003897
3898 return result;
3899}
3900
3901bool PreMergePipelineCaches(
3902 VkDevice device,
3903 const VkPipelineCache* pSrcCaches)
3904{
3905 if(pSrcCaches != nullptr)
3906 {
3907 }
3908
3909 return true;
3910}
3911
3912bool PostMergePipelineCaches(
3913 VkDevice device,
3914 VkPipelineCache destCache,
3915 uint32_t srcCacheCount,
3916 VkResult result)
3917{
3918
3919
3920
3921 if(result < VK_SUCCESS)
3922 {
3923 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3924 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3925 return false;
3926 }
3927
3928 return true;
3929}
3930
3931VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3932 VkDevice device,
3933 VkPipelineCache destCache,
3934 uint32_t srcCacheCount,
3935 const VkPipelineCache* pSrcCaches)
3936{
3937 PreMergePipelineCaches(device, pSrcCaches);
3938
3939 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
3940
3941 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
3942
3943 return result;
3944}
3945
3946bool PreCreateGraphicsPipelines(
3947 VkDevice device,
3948 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3949{
3950 if(pCreateInfos != nullptr)
3951 {
3952 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3953 {
3954 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3955 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3956 return false;
3957 }
3958 if(pCreateInfos->pStages != nullptr)
3959 {
3960 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3961 {
3962 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3963 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3964 return false;
3965 }
Courtney Goeltzenleuchter8e2f0972015-10-21 17:08:06 -06003966 if((pCreateInfos->pStages->stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
3967 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
3968 VK_SHADER_STAGE_GEOMETRY_BIT |
3969 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003970 {
3971 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3972 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
3973 return false;
3974 }
3975 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3976 {
3977 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
3978 {
3979 }
3980 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3981 {
3982 }
3983 }
3984 }
3985 if(pCreateInfos->pVertexInputState != nullptr)
3986 {
3987 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3988 {
3989 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3990 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3991 return false;
3992 }
3993 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3994 {
3995 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
3996 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
3997 {
3998 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3999 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4000 return false;
4001 }
4002 }
4003 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4004 {
4005 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4006 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4007 {
4008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4009 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4010 return false;
4011 }
4012 }
4013 }
4014 if(pCreateInfos->pInputAssemblyState != nullptr)
4015 {
4016 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4017 {
4018 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4019 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4020 return false;
4021 }
4022 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4023 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4024 {
4025 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4026 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4027 return false;
4028 }
4029 }
4030 if(pCreateInfos->pTessellationState != nullptr)
4031 {
4032 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4033 {
4034 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4035 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4036 return false;
4037 }
4038 }
4039 if(pCreateInfos->pViewportState != nullptr)
4040 {
4041 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4042 {
4043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4044 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4045 return false;
4046 }
4047 }
4048 if(pCreateInfos->pRasterState != nullptr)
4049 {
4050 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4051 {
4052 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4053 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4054 return false;
4055 }
4056 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4057 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4058 {
4059 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4060 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4061 return false;
4062 }
4063 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4064 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4065 {
4066 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4067 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4068 return false;
4069 }
4070 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4071 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4072 {
4073 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4074 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4075 return false;
4076 }
4077 }
4078 if(pCreateInfos->pMultisampleState != nullptr)
4079 {
4080 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4081 {
4082 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4083 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4084 return false;
4085 }
4086 }
4087 if(pCreateInfos->pDepthStencilState != nullptr)
4088 {
4089 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4090 {
4091 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4092 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4093 return false;
4094 }
4095 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4096 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4097 {
4098 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4099 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4100 return false;
4101 }
4102 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4103 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4104 {
4105 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4106 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4107 return false;
4108 }
4109 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4110 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4111 {
4112 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4113 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4114 return false;
4115 }
4116 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4117 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4118 {
4119 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4120 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4121 return false;
4122 }
4123 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4124 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4125 {
4126 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4127 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4128 return false;
4129 }
4130 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4131 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4132 {
4133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4134 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4135 return false;
4136 }
4137 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4138 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4139 {
4140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4141 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4142 return false;
4143 }
4144 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4145 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4146 {
4147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4148 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4149 return false;
4150 }
4151 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4152 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4153 {
4154 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4155 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4156 return false;
4157 }
4158 }
4159 if(pCreateInfos->pColorBlendState != nullptr)
4160 {
4161 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4162 {
4163 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4164 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4165 return false;
4166 }
Michael Lentine6d033602015-10-06 14:55:54 -07004167 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4168 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004169 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4170 {
4171 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4172 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4173 return false;
4174 }
Michael Lentined833b882015-09-15 14:59:56 -05004175 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004176 {
4177 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4178 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4179 {
4180 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4181 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4182 return false;
4183 }
4184 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4185 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4186 {
4187 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4188 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4189 return false;
4190 }
4191 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4192 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4193 {
4194 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4195 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4196 return false;
4197 }
4198 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4199 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4200 {
4201 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4202 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4203 return false;
4204 }
4205 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4206 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4207 {
4208 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4209 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4210 return false;
4211 }
4212 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4213 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4214 {
4215 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4216 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4217 return false;
4218 }
4219 }
4220 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004221 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4222 {
4223 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4224 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4225 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004226 }
4227
4228 return true;
4229}
4230
4231bool PostCreateGraphicsPipelines(
4232 VkDevice device,
4233 VkPipelineCache pipelineCache,
4234 uint32_t count,
4235 VkPipeline* pPipelines,
4236 VkResult result)
4237{
4238
4239
4240
4241 if(pPipelines != nullptr)
4242 {
4243 }
4244
4245 if(result < VK_SUCCESS)
4246 {
4247 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4248 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4249 return false;
4250 }
4251
4252 return true;
4253}
4254
4255VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4256 VkDevice device,
4257 VkPipelineCache pipelineCache,
4258 uint32_t count,
4259 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4260 VkPipeline* pPipelines)
4261{
4262 PreCreateGraphicsPipelines(device, pCreateInfos);
4263
4264 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4265
4266 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4267
4268 return result;
4269}
4270
4271bool PreCreateComputePipelines(
4272 VkDevice device,
4273 const VkComputePipelineCreateInfo* pCreateInfos)
4274{
4275 if(pCreateInfos != nullptr)
4276 {
4277 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4278 {
4279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4280 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4281 return false;
4282 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004283 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004284 {
4285 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4286 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4287 return false;
4288 }
Courtney Goeltzenleuchter8e2f0972015-10-21 17:08:06 -06004289 if((pCreateInfos->stage.stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
4290 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
4291 VK_SHADER_STAGE_GEOMETRY_BIT |
4292 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004293 {
4294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4295 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4296 return false;
4297 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004298 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004299 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004300 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004301 {
4302 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004303 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004304 {
4305 }
4306 }
4307 }
4308
4309 return true;
4310}
4311
4312bool PostCreateComputePipelines(
4313 VkDevice device,
4314 VkPipelineCache pipelineCache,
4315 uint32_t count,
4316 VkPipeline* pPipelines,
4317 VkResult result)
4318{
4319
4320
4321
4322 if(pPipelines != nullptr)
4323 {
4324 }
4325
4326 if(result < VK_SUCCESS)
4327 {
4328 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4329 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4330 return false;
4331 }
4332
4333 return true;
4334}
4335
4336VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4337 VkDevice device,
4338 VkPipelineCache pipelineCache,
4339 uint32_t count,
4340 const VkComputePipelineCreateInfo* pCreateInfos,
4341 VkPipeline* pPipelines)
4342{
4343 PreCreateComputePipelines(device, pCreateInfos);
4344
4345 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4346
4347 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4348
4349 return result;
4350}
4351
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004352bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004353 VkDevice device,
4354 const VkPipelineLayoutCreateInfo* pCreateInfo)
4355{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004356 if(pCreateInfo != nullptr)
4357 {
4358 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004359 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004360 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004361 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4362 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004363 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004364 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004365 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004366 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004367 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004368 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004369 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004370 }
4371
4372 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004373}
4374
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004375bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004376 VkDevice device,
4377 VkPipelineLayout* pPipelineLayout,
4378 VkResult result)
4379{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004380
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004381 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004382 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004383 }
4384
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004385 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004386 {
4387 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004388 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4389 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004390 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004391
4392 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004393}
4394
4395VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4396 VkDevice device,
4397 const VkPipelineLayoutCreateInfo* pCreateInfo,
4398 VkPipelineLayout* pPipelineLayout)
4399{
4400 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004401
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004402 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4403
4404 PostCreatePipelineLayout(device, pPipelineLayout, result);
4405
4406 return result;
4407}
4408
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004409bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004410 VkDevice device,
4411 const VkSamplerCreateInfo* pCreateInfo)
4412{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004413 if(pCreateInfo != nullptr)
4414 {
4415 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004416 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004417 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004418 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004419 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004420 }
4421 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4422 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4423 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004424 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004425 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004426 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004427 }
4428 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4429 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4430 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004431 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004432 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004433 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004434 }
4435 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4436 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4437 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004438 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004439 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004440 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004441 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004442 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4443 pCreateInfo->addressModeU > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004444 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004446 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004447 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004448 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004449 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4450 pCreateInfo->addressModeV > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004451 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004452 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004453 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004454 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004455 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004456 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4457 pCreateInfo->addressModeW > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004458 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004460 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004461 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004462 }
4463 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4464 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4465 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004466 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004467 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004468 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004469 }
4470 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4471 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4472 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004473 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004474 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004475 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004476 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004477 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004478
4479 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004480}
4481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004482bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004483 VkDevice device,
4484 VkSampler* pSampler,
4485 VkResult result)
4486{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004487
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004488 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004489 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004490 }
4491
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004492 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004493 {
4494 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004495 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4496 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004497 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004498
4499 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004500}
4501
4502VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4503 VkDevice device,
4504 const VkSamplerCreateInfo* pCreateInfo,
4505 VkSampler* pSampler)
4506{
4507 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004508
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004509 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4510
4511 PostCreateSampler(device, pSampler, result);
4512
4513 return result;
4514}
4515
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004516bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004517 VkDevice device,
4518 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4519{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004520 if(pCreateInfo != nullptr)
4521 {
4522 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004523 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004524 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004525 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004526 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004527 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004528 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004529 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004530 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4531 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4532 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004533 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004534 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004535 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004536 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004537 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004538 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004539 }
4540 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004541 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004542
4543 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004544}
4545
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004546bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004547 VkDevice device,
4548 VkDescriptorSetLayout* pSetLayout,
4549 VkResult result)
4550{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004551
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004552 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004553 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004554 }
4555
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004556 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004557 {
4558 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4560 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004561 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004562
4563 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004564}
4565
4566VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4567 VkDevice device,
4568 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4569 VkDescriptorSetLayout* pSetLayout)
4570{
4571 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004572
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004573 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4574
4575 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4576
4577 return result;
4578}
4579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004580bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004581 VkDevice device,
4582 const VkDescriptorPoolCreateInfo* pCreateInfo)
4583{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004584 if(pCreateInfo != nullptr)
4585 {
4586 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004587 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004588 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004589 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004590 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004591 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004592 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004593 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004594 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4595 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4596 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004597 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004598 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004599 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004600 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004601 }
4602 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004603
4604 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004605}
4606
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004607bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004608 VkDevice device,
4609 VkDescriptorPoolUsage poolUsage,
4610 uint32_t maxSets,
4611 VkDescriptorPool* pDescriptorPool,
4612 VkResult result)
4613{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004614
4615 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
4616 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
4617 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004618 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004619 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004620 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004621 }
4622
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004623 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004624
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004625 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004626 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004627 }
4628
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004629 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004630 {
4631 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004632 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4633 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004634 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004635
4636 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004637}
4638
4639VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4640 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004641 const VkDescriptorPoolCreateInfo* pCreateInfo,
4642 VkDescriptorPool* pDescriptorPool)
4643{
4644 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004645
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004646 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004647
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004648 PostCreateDescriptorPool(device, pCreateInfo->poolUsage, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004649
4650 return result;
4651}
4652
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004653bool PostResetDescriptorPool(
4654 VkDevice device,
4655 VkDescriptorPool descriptorPool,
4656 VkResult result)
4657{
4658
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004659
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004660 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004661 {
4662 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004663 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4664 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004665 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004666
4667 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004668}
4669
4670VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4671 VkDevice device,
4672 VkDescriptorPool descriptorPool)
4673{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004674 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
4675
4676 PostResetDescriptorPool(device, descriptorPool, result);
4677
4678 return result;
4679}
4680
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004681bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004682 VkDevice device,
4683 const VkDescriptorSetLayout* pSetLayouts)
4684{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004685 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004686 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004687 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004688
4689 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004690}
4691
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004692bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004693 VkDevice device,
4694 VkDescriptorPool descriptorPool,
4695 VkDescriptorSetUsage setUsage,
4696 uint32_t count,
4697 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004698 VkResult result)
4699{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004700
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004701
4702 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
4703 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
4704 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004705 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004706 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004707 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004708 }
4709
4710
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004711 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004712 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004713 }
4714
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004715 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004716 {
4717 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004718 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4719 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004720 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004721
4722 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004723}
4724
4725VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4726 VkDevice device,
4727 VkDescriptorPool descriptorPool,
4728 VkDescriptorSetUsage setUsage,
4729 uint32_t count,
4730 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004731 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004732{
4733 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004734
Cody Northropc8aa4a52015-08-03 12:47:29 -06004735 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004736
Cody Northropc8aa4a52015-08-03 12:47:29 -06004737 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004738
4739 return result;
4740}
4741
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004742bool PreFreeDescriptorSets(
4743 VkDevice device,
4744 const VkDescriptorSet* pDescriptorSets)
4745{
4746 if(pDescriptorSets != nullptr)
4747 {
4748 }
4749
4750 return true;
4751}
4752
4753bool PostFreeDescriptorSets(
4754 VkDevice device,
4755 VkDescriptorPool descriptorPool,
4756 uint32_t count,
4757 VkResult result)
4758{
4759
4760
4761
4762 if(result < VK_SUCCESS)
4763 {
4764 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4765 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4766 return false;
4767 }
4768
4769 return true;
4770}
4771
4772VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4773 VkDevice device,
4774 VkDescriptorPool descriptorPool,
4775 uint32_t count,
4776 const VkDescriptorSet* pDescriptorSets)
4777{
4778 PreFreeDescriptorSets(device, pDescriptorSets);
4779
4780 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4781
4782 PostFreeDescriptorSets(device, descriptorPool, count, result);
4783
4784 return result;
4785}
4786
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004787bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004788 VkDevice device,
4789 const VkWriteDescriptorSet* pDescriptorWrites,
4790 const VkCopyDescriptorSet* pDescriptorCopies)
4791{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004792 if(pDescriptorWrites != nullptr)
4793 {
4794 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004795 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004796 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004797 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004798 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004799 }
4800 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4801 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4802 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004803 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004804 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004805 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004806 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004807 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004808 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004809 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4810 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
4811 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004812 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004813 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004814 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004815 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004816 }
4817 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004818
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004819 if(pDescriptorCopies != nullptr)
4820 {
4821 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004822 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004823 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004824 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004825 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004826 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004827 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004828
4829 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004830}
4831
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004832VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004833 VkDevice device,
4834 uint32_t writeCount,
4835 const VkWriteDescriptorSet* pDescriptorWrites,
4836 uint32_t copyCount,
4837 const VkCopyDescriptorSet* pDescriptorCopies)
4838{
4839 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004840
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004841 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004842}
4843
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004844bool PreCreateFramebuffer(
4845 VkDevice device,
4846 const VkFramebufferCreateInfo* pCreateInfo)
4847{
4848 if(pCreateInfo != nullptr)
4849 {
4850 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4851 {
4852 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4853 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4854 return false;
4855 }
4856 if(pCreateInfo->pAttachments != nullptr)
4857 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004858 }
4859 }
4860
4861 return true;
4862}
4863
4864bool PostCreateFramebuffer(
4865 VkDevice device,
4866 VkFramebuffer* pFramebuffer,
4867 VkResult result)
4868{
4869
4870 if(pFramebuffer != nullptr)
4871 {
4872 }
4873
4874 if(result < VK_SUCCESS)
4875 {
4876 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4877 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4878 return false;
4879 }
4880
4881 return true;
4882}
4883
4884VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4885 VkDevice device,
4886 const VkFramebufferCreateInfo* pCreateInfo,
4887 VkFramebuffer* pFramebuffer)
4888{
4889 PreCreateFramebuffer(device, pCreateInfo);
4890
4891 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
4892
4893 PostCreateFramebuffer(device, pFramebuffer, result);
4894
4895 return result;
4896}
4897
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004898bool PreCreateRenderPass(
4899 VkDevice device,
4900 const VkRenderPassCreateInfo* pCreateInfo)
4901{
4902 if(pCreateInfo != nullptr)
4903 {
4904 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4905 {
4906 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4907 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4908 return false;
4909 }
4910 if(pCreateInfo->pAttachments != nullptr)
4911 {
4912 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
4913 {
4914 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4915 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
4916 return false;
4917 }
4918 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4919 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4920 {
4921 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4922 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4923 return false;
4924 }
4925 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4926 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4927 {
4928 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4929 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4930 return false;
4931 }
4932 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4933 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4934 {
4935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4936 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4937 return false;
4938 }
4939 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4940 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4941 {
4942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4943 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4944 return false;
4945 }
4946 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4947 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4948 {
4949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4950 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4951 return false;
4952 }
4953 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4954 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4955 {
4956 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4957 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4958 return false;
4959 }
4960 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4961 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4962 {
4963 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4964 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4965 return false;
4966 }
4967 }
4968 if(pCreateInfo->pSubpasses != nullptr)
4969 {
4970 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
4971 {
4972 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4973 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
4974 return false;
4975 }
4976 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4977 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4978 {
4979 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4980 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4981 return false;
4982 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004983 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004984 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004985 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4986 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004987 {
4988 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004989 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004990 return false;
4991 }
4992 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004993 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004994 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004995 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4996 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004997 {
4998 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004999 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005000 return false;
5001 }
5002 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005003 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005004 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005005 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5006 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005007 {
5008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005009 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005010 return false;
5011 }
5012 }
5013 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5014 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
5015 {
5016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5017 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
5018 return false;
5019 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005020 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005021 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005022 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5023 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005024 {
5025 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005026 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005027 return false;
5028 }
5029 }
5030 }
5031 if(pCreateInfo->pDependencies != nullptr)
5032 {
5033 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5034 {
5035 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5036 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5037 return false;
5038 }
5039 }
5040 }
5041
5042 return true;
5043}
5044
5045bool PostCreateRenderPass(
5046 VkDevice device,
5047 VkRenderPass* pRenderPass,
5048 VkResult result)
5049{
5050
5051 if(pRenderPass != nullptr)
5052 {
5053 }
5054
5055 if(result < VK_SUCCESS)
5056 {
5057 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5058 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5059 return false;
5060 }
5061
5062 return true;
5063}
5064
5065VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5066 VkDevice device,
5067 const VkRenderPassCreateInfo* pCreateInfo,
5068 VkRenderPass* pRenderPass)
5069{
5070 PreCreateRenderPass(device, pCreateInfo);
5071
5072 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5073
5074 PostCreateRenderPass(device, pRenderPass, result);
5075
5076 return result;
5077}
5078
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005079bool PostGetRenderAreaGranularity(
5080 VkDevice device,
5081 VkRenderPass renderPass,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005082 VkExtent2D* pGranularity)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005083{
5084
5085
5086 if(pGranularity != nullptr)
5087 {
5088 }
5089
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005090 return true;
5091}
5092
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005093VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005094 VkDevice device,
5095 VkRenderPass renderPass,
5096 VkExtent2D* pGranularity)
5097{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005098 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005099
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005100 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005101}
5102
5103bool PreCreateCommandPool(
5104 VkDevice device,
5105 const VkCmdPoolCreateInfo* pCreateInfo)
5106{
5107 if(pCreateInfo != nullptr)
5108 {
5109 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5110 {
5111 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5112 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5113 return false;
5114 }
5115 }
5116
5117 return true;
5118}
5119
5120bool PostCreateCommandPool(
5121 VkDevice device,
5122 VkCmdPool* pCmdPool,
5123 VkResult result)
5124{
5125
5126 if(pCmdPool != nullptr)
5127 {
5128 }
5129
5130 if(result < VK_SUCCESS)
5131 {
5132 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5134 return false;
5135 }
5136
5137 return true;
5138}
5139
5140VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5141 VkDevice device,
5142 const VkCmdPoolCreateInfo* pCreateInfo,
5143 VkCmdPool* pCmdPool)
5144{
5145 PreCreateCommandPool(device, pCreateInfo);
5146
5147 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5148
5149 PostCreateCommandPool(device, pCmdPool, result);
5150
5151 return result;
5152}
5153
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005154bool PostResetCommandPool(
5155 VkDevice device,
5156 VkCmdPool cmdPool,
5157 VkCmdPoolResetFlags flags,
5158 VkResult result)
5159{
5160
5161
5162
5163 if(result < VK_SUCCESS)
5164 {
5165 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5166 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5167 return false;
5168 }
5169
5170 return true;
5171}
5172
5173VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5174 VkDevice device,
5175 VkCmdPool cmdPool,
5176 VkCmdPoolResetFlags flags)
5177{
5178 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5179
5180 PostResetCommandPool(device, cmdPool, flags, result);
5181
5182 return result;
5183}
5184
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005185bool PreCreateCommandBuffer(
5186 VkDevice device,
5187 const VkCmdBufferCreateInfo* pCreateInfo)
5188{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005189 if(pCreateInfo != nullptr)
5190 {
5191 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005192 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005193 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005194 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005195 return false;
5196 }
5197 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5198 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5199 {
5200 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005201 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005202 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005203 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005204 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005205
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005206 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005207}
5208
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005209bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005210 VkDevice device,
5211 VkCmdBuffer* pCmdBuffer,
5212 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005213{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005214
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005215 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005216 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005217 }
5218
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005219 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005220 {
5221 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005222 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5223 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005224 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005225
5226 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005227}
5228
5229VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
5230 VkDevice device,
5231 const VkCmdBufferCreateInfo* pCreateInfo,
5232 VkCmdBuffer* pCmdBuffer)
5233{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005234 PreCreateCommandBuffer(device, pCreateInfo);
5235
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005236 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
5237
5238 PostCreateCommandBuffer(device, pCmdBuffer, result);
5239
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005240 return result;
5241}
5242
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005243bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005244 VkCmdBuffer cmdBuffer,
5245 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005246{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005247 if(pBeginInfo != nullptr)
5248 {
5249 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005250 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005251 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005252 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005253 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005254 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005255 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005256
5257 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005258}
5259
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005260bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005261 VkCmdBuffer cmdBuffer,
5262 VkResult result)
5263{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005264
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005265 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005266 {
5267 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005268 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5269 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005270 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005271
5272 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005273}
5274
5275VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5276 VkCmdBuffer cmdBuffer,
5277 const VkCmdBufferBeginInfo* pBeginInfo)
5278{
5279 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005280
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005281 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5282
5283 PostBeginCommandBuffer(cmdBuffer, result);
5284
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005285 return result;
5286}
5287
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005288bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005289 VkCmdBuffer cmdBuffer,
5290 VkResult result)
5291{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005292
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005293 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005294 {
5295 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005296 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5297 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005298 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005299
5300 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005301}
5302
5303VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5304 VkCmdBuffer cmdBuffer)
5305{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005306 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5307
5308 PostEndCommandBuffer(cmdBuffer, result);
5309
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005310 return result;
5311}
5312
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005313bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005314 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005315 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005316 VkResult result)
5317{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005318
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005319
5320 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005321 {
5322 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005323 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5324 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005325 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005326
5327 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005328}
5329
5330VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005331 VkCmdBuffer cmdBuffer,
5332 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005333{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005334 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005335
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005336 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005337
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005338 return result;
5339}
5340
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005341bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005342 VkCmdBuffer cmdBuffer,
5343 VkPipelineBindPoint pipelineBindPoint,
5344 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005345{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005346
5347 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5348 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5349 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005350 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005351 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005352 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005353 }
5354
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005355
5356 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005357}
5358
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005359VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5360 VkCmdBuffer cmdBuffer,
5361 VkPipelineBindPoint pipelineBindPoint,
5362 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005363{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005364 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5365
5366 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5367}
5368
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005369VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005370{
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005371 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5372}
5373
5374VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5375{
5376 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005377}
5378
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005379VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005380{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005381 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005382}
5383
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005384VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005385{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005386 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005387}
5388
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005389VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005390{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005391 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northropf5bd2252015-08-17 11:10:49 -06005392}
5393
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005394VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005395{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005396 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005397}
5398
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005399VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005400{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005401 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005402}
5403
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005404VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005405{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005406 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005407}
5408
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005409VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005410{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005411 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005412}
5413
5414bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005415 VkCmdBuffer cmdBuffer,
5416 const VkDescriptorSet* pDescriptorSets,
5417 const uint32_t* pDynamicOffsets)
5418{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005419 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005420 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005421 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005422
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005423 if(pDynamicOffsets != nullptr)
5424 {
5425 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005426
5427 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005428}
5429
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005430bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005431 VkCmdBuffer cmdBuffer,
5432 VkPipelineBindPoint pipelineBindPoint,
5433 VkPipelineLayout layout,
5434 uint32_t firstSet,
5435 uint32_t setCount,
5436 uint32_t dynamicOffsetCount)
5437{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005438
5439 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5440 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5441 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005442 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005443 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005444 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005445 }
5446
5447
5448
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005449
5450
5451 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005452}
5453
5454VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5455 VkCmdBuffer cmdBuffer,
5456 VkPipelineBindPoint pipelineBindPoint,
5457 VkPipelineLayout layout,
5458 uint32_t firstSet,
5459 uint32_t setCount,
5460 const VkDescriptorSet* pDescriptorSets,
5461 uint32_t dynamicOffsetCount,
5462 const uint32_t* pDynamicOffsets)
5463{
5464 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005465
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005466 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5467
5468 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5469}
5470
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005471bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005472 VkCmdBuffer cmdBuffer,
5473 VkBuffer buffer,
5474 VkDeviceSize offset,
5475 VkIndexType indexType)
5476{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005477
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005478
5479
5480 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5481 indexType > VK_INDEX_TYPE_END_RANGE)
5482 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005483 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005484 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005485 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005486 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005487
5488 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005489}
5490
5491VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5492 VkCmdBuffer cmdBuffer,
5493 VkBuffer buffer,
5494 VkDeviceSize offset,
5495 VkIndexType indexType)
5496{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005497 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5498
5499 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5500}
5501
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005502bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005503 VkCmdBuffer cmdBuffer,
5504 const VkBuffer* pBuffers,
5505 const VkDeviceSize* pOffsets)
5506{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005507 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005508 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005509 }
5510
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005511 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005512 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005513 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005514
5515 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005516}
5517
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005518bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519 VkCmdBuffer cmdBuffer,
5520 uint32_t startBinding,
5521 uint32_t bindingCount)
5522{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005523
5524
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005525
5526 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005527}
5528
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06005529VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005530 VkCmdBuffer cmdBuffer,
5531 uint32_t startBinding,
5532 uint32_t bindingCount,
5533 const VkBuffer* pBuffers,
5534 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005535{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005536 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005537
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005538 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5539
5540 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005541}
5542
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005543bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005544 VkCmdBuffer cmdBuffer,
5545 uint32_t firstVertex,
5546 uint32_t vertexCount,
5547 uint32_t firstInstance,
5548 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005549{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005550
5551
5552
5553
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005554
5555 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005556}
5557
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005558VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5559 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005560 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005561 uint32_t instanceCount,
5562 uint32_t firstVertex,
5563 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005564{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005565 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005566
5567 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005568}
5569
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005570bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005571 VkCmdBuffer cmdBuffer,
5572 uint32_t firstIndex,
5573 uint32_t indexCount,
5574 int32_t vertexOffset,
5575 uint32_t firstInstance,
5576 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005577{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005578
5579
5580
5581
5582
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005583
5584 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005585}
5586
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005587VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5588 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005589 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005590 uint32_t instanceCount,
5591 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005592 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005593 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005594{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005595 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005596
5597 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5598}
5599
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005600bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005601 VkCmdBuffer cmdBuffer,
5602 VkBuffer buffer,
5603 VkDeviceSize offset,
5604 uint32_t count,
5605 uint32_t stride)
5606{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005607
5608
5609
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005610
5611
5612 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005613}
5614
5615VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5616 VkCmdBuffer cmdBuffer,
5617 VkBuffer buffer,
5618 VkDeviceSize offset,
5619 uint32_t count,
5620 uint32_t stride)
5621{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005622 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5623
5624 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5625}
5626
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005627bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005628 VkCmdBuffer cmdBuffer,
5629 VkBuffer buffer,
5630 VkDeviceSize offset,
5631 uint32_t count,
5632 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005633{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005634
5635
5636
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005637
5638
5639 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005640}
5641
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005642VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5643 VkCmdBuffer cmdBuffer,
5644 VkBuffer buffer,
5645 VkDeviceSize offset,
5646 uint32_t count,
5647 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005648{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005649 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5650
5651 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5652}
5653
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005654bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005655 VkCmdBuffer cmdBuffer,
5656 uint32_t x,
5657 uint32_t y,
5658 uint32_t z)
5659{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005660
5661
5662
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005663
5664 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005665}
5666
5667VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5668 VkCmdBuffer cmdBuffer,
5669 uint32_t x,
5670 uint32_t y,
5671 uint32_t z)
5672{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005673 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5674
5675 PostCmdDispatch(cmdBuffer, x, y, z);
5676}
5677
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005678bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005679 VkCmdBuffer cmdBuffer,
5680 VkBuffer buffer,
5681 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005682{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005683
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005684
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005685
5686 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005687}
5688
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005689VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5690 VkCmdBuffer cmdBuffer,
5691 VkBuffer buffer,
5692 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005693{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005694 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5695
5696 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005697}
5698
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005699bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005700 VkCmdBuffer cmdBuffer,
5701 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005702{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005703 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005704 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005705 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005706
5707 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005708}
5709
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005710bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005711 VkCmdBuffer cmdBuffer,
5712 VkBuffer srcBuffer,
5713 VkBuffer destBuffer,
5714 uint32_t regionCount)
5715{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005716
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005717
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005718
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005719
5720 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005721}
5722
5723VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5724 VkCmdBuffer cmdBuffer,
5725 VkBuffer srcBuffer,
5726 VkBuffer destBuffer,
5727 uint32_t regionCount,
5728 const VkBufferCopy* pRegions)
5729{
5730 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005731
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005732 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5733
5734 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5735}
5736
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005737bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005738 VkCmdBuffer cmdBuffer,
5739 const VkImageCopy* pRegions)
5740{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005741 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005742 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005743 if ((pRegions->srcSubresource.aspect &
5744 (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 -06005745 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005746 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005747 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005748 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005749 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005750 if ((pRegions->destSubresource.aspect &
5751 (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 -06005752 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005753 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005754 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005755 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005756 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005757 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005758
5759 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005760}
5761
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005762bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005763 VkCmdBuffer cmdBuffer,
5764 VkImage srcImage,
5765 VkImageLayout srcImageLayout,
5766 VkImage destImage,
5767 VkImageLayout destImageLayout,
5768 uint32_t regionCount)
5769{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005770
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005771
5772 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5773 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5774 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005775 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005776 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005777 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005778 }
5779
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005780
5781 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5782 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5783 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005784 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005785 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005786 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005787 }
5788
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005789
5790 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005791}
5792
5793VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5794 VkCmdBuffer cmdBuffer,
5795 VkImage srcImage,
5796 VkImageLayout srcImageLayout,
5797 VkImage destImage,
5798 VkImageLayout destImageLayout,
5799 uint32_t regionCount,
5800 const VkImageCopy* pRegions)
5801{
5802 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005803
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005804 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5805
5806 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5807}
5808
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005809bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005810 VkCmdBuffer cmdBuffer,
5811 const VkImageBlit* pRegions)
5812{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005813 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005814 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005815 if ((pRegions->srcSubresource.aspect &
5816 (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 -06005817 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005818 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005819 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005820 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005821 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005822 if ((pRegions->destSubresource.aspect &
5823 (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 -06005824 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005825 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005826 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005827 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005828 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005829 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005830
5831 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005832}
5833
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005834bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005835 VkCmdBuffer cmdBuffer,
5836 VkImage srcImage,
5837 VkImageLayout srcImageLayout,
5838 VkImage destImage,
5839 VkImageLayout destImageLayout,
5840 uint32_t regionCount,
5841 VkTexFilter filter)
5842{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005843
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005844
5845 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5846 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5847 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005848 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005849 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005850 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005851 }
5852
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005853
5854 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5855 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5856 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005857 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005858 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005859 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005860 }
5861
5862
5863 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
5864 filter > VK_TEX_FILTER_END_RANGE)
5865 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005866 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005867 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005868 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005869 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005870
5871 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005872}
5873
5874VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
5875 VkCmdBuffer cmdBuffer,
5876 VkImage srcImage,
5877 VkImageLayout srcImageLayout,
5878 VkImage destImage,
5879 VkImageLayout destImageLayout,
5880 uint32_t regionCount,
5881 const VkImageBlit* pRegions,
5882 VkTexFilter filter)
5883{
5884 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005885
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005886 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
5887
5888 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
5889}
5890
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005891bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005892 VkCmdBuffer cmdBuffer,
5893 const VkBufferImageCopy* pRegions)
5894{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005895 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005896 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005897 if ((pRegions->imageSubresource.aspect &
5898 (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 -06005899 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005900 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005901 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005902 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005903 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005904 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005905
5906 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005907}
5908
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005909bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005910 VkCmdBuffer cmdBuffer,
5911 VkBuffer srcBuffer,
5912 VkImage destImage,
5913 VkImageLayout destImageLayout,
5914 uint32_t regionCount)
5915{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005916
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005917
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005918
5919 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5920 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5921 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005922 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005923 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005924 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005925 }
5926
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005927
5928 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005929}
5930
5931VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
5932 VkCmdBuffer cmdBuffer,
5933 VkBuffer srcBuffer,
5934 VkImage destImage,
5935 VkImageLayout destImageLayout,
5936 uint32_t regionCount,
5937 const VkBufferImageCopy* pRegions)
5938{
5939 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005940
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005941 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
5942
5943 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
5944}
5945
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005946bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005947 VkCmdBuffer cmdBuffer,
5948 const VkBufferImageCopy* pRegions)
5949{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005950 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005951 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005952 if ((pRegions->imageSubresource.aspect &
5953 (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 -06005954 {
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, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005957 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005958 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005959 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005960
5961 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005962}
5963
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005964bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005965 VkCmdBuffer cmdBuffer,
5966 VkImage srcImage,
5967 VkImageLayout srcImageLayout,
5968 VkBuffer destBuffer,
5969 uint32_t regionCount)
5970{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005971
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005972
5973 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5974 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5975 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005976 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005977 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005978 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005979 }
5980
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005982
5983 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005984}
5985
5986VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
5987 VkCmdBuffer cmdBuffer,
5988 VkImage srcImage,
5989 VkImageLayout srcImageLayout,
5990 VkBuffer destBuffer,
5991 uint32_t regionCount,
5992 const VkBufferImageCopy* pRegions)
5993{
5994 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005995
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005996 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
5997
5998 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
5999}
6000
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006001bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006002 VkCmdBuffer cmdBuffer,
6003 const uint32_t* pData)
6004{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006005 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006006 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006007 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006008
6009 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006010}
6011
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006012bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006013 VkCmdBuffer cmdBuffer,
6014 VkBuffer destBuffer,
6015 VkDeviceSize destOffset,
6016 VkDeviceSize dataSize)
6017{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006018
6019
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006020
6021
6022 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006023}
6024
6025VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6026 VkCmdBuffer cmdBuffer,
6027 VkBuffer destBuffer,
6028 VkDeviceSize destOffset,
6029 VkDeviceSize dataSize,
6030 const uint32_t* pData)
6031{
6032 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006033
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006034 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6035
6036 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6037}
6038
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006039bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006040 VkCmdBuffer cmdBuffer,
6041 VkBuffer destBuffer,
6042 VkDeviceSize destOffset,
6043 VkDeviceSize fillSize,
6044 uint32_t data)
6045{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046
6047
6048
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006049
6050
6051 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006052}
6053
6054VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6055 VkCmdBuffer cmdBuffer,
6056 VkBuffer destBuffer,
6057 VkDeviceSize destOffset,
6058 VkDeviceSize fillSize,
6059 uint32_t data)
6060{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006061 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6062
6063 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6064}
6065
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006066bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006067 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12006068 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006069 const VkImageSubresourceRange* pRanges)
6070{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006071 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006072 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006073 }
6074
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006075 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006076 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006077 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006078 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006079
6080 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006081}
6082
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006083bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006084 VkCmdBuffer cmdBuffer,
6085 VkImage image,
6086 VkImageLayout imageLayout,
6087 uint32_t rangeCount)
6088{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006089
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006090
6091 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6092 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6093 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006094 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006095 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006096 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006097 }
6098
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006099
6100 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006101}
6102
6103VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6104 VkCmdBuffer cmdBuffer,
6105 VkImage image,
6106 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12006107 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006108 uint32_t rangeCount,
6109 const VkImageSubresourceRange* pRanges)
6110{
6111 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006112
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006113 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6114
6115 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6116}
6117
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006118bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006119 VkCmdBuffer cmdBuffer,
6120 const VkImageSubresourceRange* pRanges)
6121{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006122 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006123 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006124 /*
6125 * TODO: How do we validation pRanges->aspectMask?
6126 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6127 * VK_IMAGE_ASPECT_STENCIL_BIT.
6128 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006129 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006130
6131 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006132}
6133
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006134bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006135 VkCmdBuffer cmdBuffer,
6136 VkImage image,
6137 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006138 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006139 uint32_t rangeCount)
6140{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006141
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006142
6143 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6144 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6145 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006146 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006147 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006148 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006149 }
6150
6151
6152
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006153
6154 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006155}
6156
Chris Forbes2951d7d2015-06-22 17:21:59 +12006157VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006158 VkCmdBuffer cmdBuffer,
6159 VkImage image,
6160 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006161 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006162 uint32_t rangeCount,
6163 const VkImageSubresourceRange* pRanges)
6164{
Chris Forbes2951d7d2015-06-22 17:21:59 +12006165 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006166
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006167 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006168
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006169 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006170}
6171
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006172bool PreCmdClearAttachments(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006173 VkCmdBuffer cmdBuffer,
6174 const VkClearColorValue* pColor,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06006175 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006176{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006177 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006178 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006179 }
6180
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006181 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006182 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006183 }
6184
6185 return true;
6186}
6187
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006188VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6189 VkCmdBuffer cmdBuffer,
6190 uint32_t attachmentCount,
6191 const VkClearAttachment* pAttachments,
6192 uint32_t rectCount,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06006193 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006194{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006195 for (uint32_t i = 0; i < attachmentCount; i++) {
6196 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006197 }
6198
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006199 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006200}
6201
6202bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006203 VkCmdBuffer cmdBuffer,
6204 const VkImageResolve* pRegions)
6205{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006206 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006207 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006208 if ((pRegions->srcSubresource.aspect &
6209 (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 -06006210 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006211 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006212 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006213 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006214 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006215 if ((pRegions->destSubresource.aspect &
6216 (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 -06006217 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006218 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006219 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006220 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006221 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006222 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006223
6224 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006225}
6226
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006227bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006228 VkCmdBuffer cmdBuffer,
6229 VkImage srcImage,
6230 VkImageLayout srcImageLayout,
6231 VkImage destImage,
6232 VkImageLayout destImageLayout,
6233 uint32_t regionCount)
6234{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006235
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006236
6237 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6238 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6239 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006240 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006241 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006242 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006243 }
6244
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006245
6246 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6247 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6248 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006249 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006250 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006251 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006252 }
6253
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006254
6255 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006256}
6257
6258VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6259 VkCmdBuffer cmdBuffer,
6260 VkImage srcImage,
6261 VkImageLayout srcImageLayout,
6262 VkImage destImage,
6263 VkImageLayout destImageLayout,
6264 uint32_t regionCount,
6265 const VkImageResolve* pRegions)
6266{
6267 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006268
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006269 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6270
6271 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6272}
6273
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006274bool PostCmdSetEvent(
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 vkCmdSetEvent(
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)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006291
Tony Barbourc2e987e2015-06-29 16:20:35 -06006292 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006293}
6294
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006295bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006296 VkCmdBuffer cmdBuffer,
6297 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006298 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006299{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006300
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006301
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006302
6303 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006304}
6305
6306VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6307 VkCmdBuffer cmdBuffer,
6308 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006309 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006310{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006311 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006312
Tony Barbourc2e987e2015-06-29 16:20:35 -06006313 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006314}
6315
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006316bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006317 VkCmdBuffer cmdBuffer,
6318 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006319 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006320{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006321 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006322 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006323 }
6324
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006325 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006326 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006327 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006328
6329 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006330}
6331
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006332bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006333 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006334 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006335 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006336 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006337 uint32_t memBarrierCount)
6338{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006339
Tony Barbourc2e987e2015-06-29 16:20:35 -06006340
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006341
6342
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006343
6344 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006345}
6346
6347VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6348 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006349 uint32_t eventCount,
6350 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006351 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006352 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006353 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006354 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006355{
6356 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006357
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006358 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006359
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006360 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006361}
6362
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006363bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006364 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006365 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006366{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006367 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006368 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006369 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006370
6371 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006372}
6373
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006374bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006375 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006376 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006377 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006378 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006379 uint32_t memBarrierCount)
6380{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006381
Tony Barbourc2e987e2015-06-29 16:20:35 -06006382
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006383
6384
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006385
6386 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006387}
6388
6389VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6390 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006391 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006392 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006393 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006394 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006395 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006396{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006397 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006398
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006399 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006400
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006401 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006402}
6403
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006404bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006405 VkCmdBuffer cmdBuffer,
6406 VkQueryPool queryPool,
6407 uint32_t slot,
6408 VkQueryControlFlags flags)
6409{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006410
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006411
6412
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006413
6414 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006415}
6416
6417VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6418 VkCmdBuffer cmdBuffer,
6419 VkQueryPool queryPool,
6420 uint32_t slot,
6421 VkQueryControlFlags flags)
6422{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006423 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6424
6425 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6426}
6427
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006428bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006429 VkCmdBuffer cmdBuffer,
6430 VkQueryPool queryPool,
6431 uint32_t slot)
6432{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006433
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006434
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006435
6436 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006437}
6438
6439VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6440 VkCmdBuffer cmdBuffer,
6441 VkQueryPool queryPool,
6442 uint32_t slot)
6443{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006444 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6445
6446 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6447}
6448
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006449bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006450 VkCmdBuffer cmdBuffer,
6451 VkQueryPool queryPool,
6452 uint32_t startQuery,
6453 uint32_t queryCount)
6454{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006455
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006456
6457
6458
6459 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006460}
6461
6462VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6463 VkCmdBuffer cmdBuffer,
6464 VkQueryPool queryPool,
6465 uint32_t startQuery,
6466 uint32_t queryCount)
6467{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006468 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6469
6470 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6471}
6472
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006473bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006474 VkCmdBuffer cmdBuffer,
6475 VkTimestampType timestampType,
6476 VkBuffer destBuffer,
6477 VkDeviceSize destOffset)
6478{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006479
6480 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6481 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6482 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006483 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006484 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006485 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006486 }
6487
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006488
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006489
6490 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006491}
6492
6493VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6494 VkCmdBuffer cmdBuffer,
6495 VkTimestampType timestampType,
6496 VkBuffer destBuffer,
6497 VkDeviceSize destOffset)
6498{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006499 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6500
6501 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6502}
6503
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006504bool PostCmdCopyQueryPoolResults(
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,
6511 VkDeviceSize destStride,
6512 VkQueryResultFlags flags)
6513{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006514
6515
6516
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006517
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006518
6519
6520
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006521
6522 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006523}
6524
Jeremy Hayescf469132015-04-17 10:36:53 -06006525VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006526 VkCmdBuffer cmdBuffer,
6527 VkQueryPool queryPool,
6528 uint32_t startQuery,
6529 uint32_t queryCount,
6530 VkBuffer destBuffer,
6531 VkDeviceSize destOffset,
6532 VkDeviceSize destStride,
6533 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006534{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006535 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
6536
6537 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006538}
6539
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006540bool PreCmdPushConstants(
6541 VkCmdBuffer cmdBuffer,
6542 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006543{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006544 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006545 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006546 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006547
6548 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006549}
6550
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006551bool PostCmdPushConstants(
6552 VkCmdBuffer cmdBuffer,
6553 VkPipelineLayout layout,
6554 VkShaderStageFlags stageFlags,
6555 uint32_t start,
6556 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006557{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006558
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006559
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006560
6561
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006562
6563 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006564}
6565
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006566VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6567 VkCmdBuffer cmdBuffer,
6568 VkPipelineLayout layout,
6569 VkShaderStageFlags stageFlags,
6570 uint32_t start,
6571 uint32_t length,
6572 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006573{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006574 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006575
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006576 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006577
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006578 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006579}
6580
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006581bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006582 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006583 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006584{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006585 if(pRenderPassBegin != nullptr)
6586 {
6587 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006588 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006589 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006590 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006591 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006592 }
Cody Northropc332eef2015-08-04 11:51:03 -06006593 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006594 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006595 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006596 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006597
6598 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006599}
6600
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006601bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006602 VkCmdBuffer cmdBuffer,
6603 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006604{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006605
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006606 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6607 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6608 {
6609 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6610 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6611 return false;
6612 }
6613
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006614 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006615}
6616
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006617VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6618 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006619 const VkRenderPassBeginInfo* pRenderPassBegin,
6620 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006621{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006622 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6623
Chia-I Wuc278df82015-07-07 11:50:03 +08006624 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006625
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006626 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006627}
6628
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006629bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08006630 VkCmdBuffer cmdBuffer,
6631 VkRenderPassContents contents)
6632{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006633
6634 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006635 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006636 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006637 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006638 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6639 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006640 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006641
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006642 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006643}
6644
6645VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6646 VkCmdBuffer cmdBuffer,
6647 VkRenderPassContents contents)
6648{
Chia-I Wuc278df82015-07-07 11:50:03 +08006649 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6650
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006651 PostCmdNextSubpass(cmdBuffer, contents);
6652}
6653
6654bool PostCmdEndRenderPass(
6655 VkCmdBuffer cmdBuffer)
6656{
6657
6658 return true;
6659}
6660
6661VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6662 VkCmdBuffer cmdBuffer)
6663{
6664 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6665
6666 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006667}
6668
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006669bool PreCmdExecuteCommands(
6670 VkCmdBuffer cmdBuffer,
6671 const VkCmdBuffer* pCmdBuffers)
6672{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006673 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006674 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006675 }
6676
6677 return true;
6678}
6679
6680bool PostCmdExecuteCommands(
6681 VkCmdBuffer cmdBuffer,
6682 uint32_t cmdBuffersCount)
6683{
6684
6685
6686 return true;
6687}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006688
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006689VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006690 VkCmdBuffer cmdBuffer,
6691 uint32_t cmdBuffersCount,
6692 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006693{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006694 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6695
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006696 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6697
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006698 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006699}
6700
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006701VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006702{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006703 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006704 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006705 }
6706
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006707 /* loader uses this to force layer initialization; device object is wrapped */
6708 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006709 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006710 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006711 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006712
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006713 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006714 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006715 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006716 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006717 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006718 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006719 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006720 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006721 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006722 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006723 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006724 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006725 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006726 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006727 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006728 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006730 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006731 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006732 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006733 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006734 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006735 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006736 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006737 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006738 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006739 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006740 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006741 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006742 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006743 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006744 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006745 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006746 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006747 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006748 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006749 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006750 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006751 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006752 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006753 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006754 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006755 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006756 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006757 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006758 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006759 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006760 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006761 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006762 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006763 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006764 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006765 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006766 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006767 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006768 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006769 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006770 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine6715e522015-09-15 14:59:14 -05006771 if (!strcmp(funcName, "vkCreateShaderModule"))
6772 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006773 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006774 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006775 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006776 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006777 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006778 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006779 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006780 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006781 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006782 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006783 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006784 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006785 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006786 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006787 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006788 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006789 if (!strcmp(funcName, "vkCmdSetViewport"))
6790 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006791 if (!strcmp(funcName, "vkCmdSetScissor"))
6792 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006793 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6794 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6795 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6796 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6797 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6798 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6799 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6800 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6801 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6802 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6803 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6804 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6805 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6806 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006807 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006808 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006809 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006810 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006811 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006812 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006813 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006814 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006815 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006816 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006817 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006818 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006819 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006820 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006821 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006822 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006823 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006824 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006825 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006826 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006827 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006828 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006829 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006830 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006831 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006832 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006833 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006834 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006835 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006836 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006837 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006838 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006839 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006840 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006841 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006842 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006843 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006844 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006845 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006846 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006847 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006848 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006849 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006850 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006851 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006852 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006853 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006854 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006855 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006856 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006857 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006858 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006859 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006860 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006861 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006862 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006863 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006864 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006865 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006866 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006867 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006868 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006869 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006870 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006871 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006872 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006873 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006874 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006875 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006876 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08006877 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006878 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006879
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006880 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006881 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006882 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006883 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006884 }
6885}
6886
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006887VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006888{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006889 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006890 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006891 }
6892
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006893 /* loader uses this to force layer initialization; instance object is wrapped */
6894 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006895 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006896 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006897 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006898
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006899 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006900 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006901 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006902 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006903 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006904 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006905 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006906 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006907 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006908 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06006909 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006910 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06006911 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6912 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6913 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6914 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6915 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6916 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6917 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6918 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006919
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006920 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006921 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006922 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006923 return fptr;
6924
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006925 {
6926 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6927 return NULL;
6928 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6929 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006930}