blob: b217886bb8bbcd66a720eae8d131b71b7440fa78 [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
1643bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1644{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001645 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1646 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001647 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1648 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1649 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1650 if(enumerator & (~allFlags))
1651 {
1652 return false;
1653 }
1654
1655 return true;
1656}
1657
1658static
1659std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1660{
1661 if(!ValidateEnumerator(enumerator))
1662 {
1663 return "unrecognized enumerator";
1664 }
1665
1666 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001667 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1668 {
1669 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1670 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001671 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1672 {
1673 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1674 }
1675 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1676 {
1677 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1678 }
1679 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1680 {
1681 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1682 }
1683 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1684 {
1685 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1686 }
1687
1688 std::string enumeratorString;
1689 for(auto const& string : strings)
1690 {
1691 enumeratorString += string;
1692
1693 if(string != strings.back())
1694 {
1695 enumeratorString += '|';
1696 }
1697 }
1698
1699 return enumeratorString;
1700}
1701
1702static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001703bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001704{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001705 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001706 if(enumerator & (~allFlags))
1707 {
1708 return false;
1709 }
1710
1711 return true;
1712}
1713
1714static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001715std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001716{
1717 if(!ValidateEnumerator(enumerator))
1718 {
1719 return "unrecognized enumerator";
1720 }
1721
1722 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001723 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001724 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001725 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001726 }
1727
1728 std::string enumeratorString;
1729 for(auto const& string : strings)
1730 {
1731 enumeratorString += string;
1732
1733 if(string != strings.back())
1734 {
1735 enumeratorString += '|';
1736 }
1737 }
1738
1739 return enumeratorString;
1740}
1741
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001742static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001743bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001744{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001745 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1746 VK_IMAGE_ASPECT_STENCIL_BIT |
1747 VK_IMAGE_ASPECT_DEPTH_BIT |
1748 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001749 if(enumerator & (~allFlags))
1750 {
1751 return false;
1752 }
1753
1754 return true;
1755}
1756
1757static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001758std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001759{
1760 if(!ValidateEnumerator(enumerator))
1761 {
1762 return "unrecognized enumerator";
1763 }
1764
1765 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001766 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001767 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001768 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1769 }
1770 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1771 {
1772 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1773 }
1774 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1775 {
1776 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1777 }
1778 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1779 {
1780 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1781 }
1782
1783 std::string enumeratorString;
1784 for(auto const& string : strings)
1785 {
1786 enumeratorString += string;
1787
1788 if(string != strings.back())
1789 {
1790 enumeratorString += '|';
1791 }
1792 }
1793
1794 return enumeratorString;
1795}
1796
1797static
1798bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1799{
1800 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1801 if(enumerator & (~allFlags))
1802 {
1803 return false;
1804 }
1805
1806 return true;
1807}
1808
1809static
1810std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1811{
1812 if(!ValidateEnumerator(enumerator))
1813 {
1814 return "unrecognized enumerator";
1815 }
1816
1817 std::vector<std::string> strings;
1818 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1819 {
1820 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001821 }
1822
1823 std::string enumeratorString;
1824 for(auto const& string : strings)
1825 {
1826 enumeratorString += string;
1827
1828 if(string != strings.back())
1829 {
1830 enumeratorString += '|';
1831 }
1832 }
1833
1834 return enumeratorString;
1835}
1836
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001837VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1838 const VkInstanceCreateInfo* pCreateInfo,
1839 VkInstance* pInstance)
1840{
1841 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1842 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1843
1844 if (result == VK_SUCCESS) {
1845 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1846 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001847 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001848
1849 InitParamChecker(data);
1850 }
1851
1852 return result;
1853}
1854
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001855VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001856 VkInstance instance)
1857{
1858 // Grab the key before the instance is destroyed.
1859 dispatch_key key = get_dispatch_key(instance);
1860 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001861 pTable->DestroyInstance(instance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001862
1863 // Clean up logging callback, if any
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001864 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1865 while (my_data->logging_callback.size() > 0) {
1866 VkDbgMsgCallback callback = my_data->logging_callback.back();
1867 layer_destroy_msg_callback(my_data->report_data, callback);
1868 my_data->logging_callback.pop_back();
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001869 }
1870
1871 layer_debug_report_destroy_instance(mid(instance));
1872 layer_data_map.erase(pTable);
1873
1874 pc_instance_table_map.erase(key);
1875 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001876}
1877
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001878bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001879 VkInstance instance,
1880 uint32_t* pPhysicalDeviceCount,
1881 VkPhysicalDevice* pPhysicalDevices,
1882 VkResult result)
1883{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001884
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001885 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001886 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001887 }
1888
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001889 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001890 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001891 }
1892
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001893 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001894 {
1895 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001896 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1897 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001898 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001899
1900 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001901}
1902
1903VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1904 VkInstance instance,
1905 uint32_t* pPhysicalDeviceCount,
1906 VkPhysicalDevice* pPhysicalDevices)
1907{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001908 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1909
1910 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1911
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001912 return result;
1913}
1914
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001915bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001916 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001917 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001918{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001919
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001920 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001921 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001922 }
1923
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001924 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001925}
1926
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001927VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001928 VkPhysicalDevice physicalDevice,
1929 VkPhysicalDeviceFeatures* pFeatures)
1930{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001931 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001932
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001933 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001934}
1935
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001936bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001937 VkPhysicalDevice physicalDevice,
1938 VkFormat format,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001939 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001940{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001941
1942 if(format < VK_FORMAT_BEGIN_RANGE ||
1943 format > VK_FORMAT_END_RANGE)
1944 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001945 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001946 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001947 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001948 }
1949
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001950 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001951 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001952 }
1953
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001954 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001955}
1956
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001957VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001958 VkPhysicalDevice physicalDevice,
1959 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001960 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001961{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001962 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001963
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001964 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001965}
1966
1967bool PostGetPhysicalDeviceImageFormatProperties(
1968 VkPhysicalDevice physicalDevice,
1969 VkFormat format,
1970 VkImageType type,
1971 VkImageTiling tiling,
1972 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001973 VkImageCreateFlags flags,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001974 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001975{
1976
1977 if(format < VK_FORMAT_BEGIN_RANGE ||
1978 format > VK_FORMAT_END_RANGE)
1979 {
1980 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1981 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1982 return false;
1983 }
1984
1985 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1986 type > VK_IMAGE_TYPE_END_RANGE)
1987 {
1988 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1989 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1990 return false;
1991 }
1992
1993 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1994 tiling > VK_IMAGE_TILING_END_RANGE)
1995 {
1996 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1997 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1998 return false;
1999 }
2000
2001
2002 if(pImageFormatProperties != nullptr)
2003 {
2004 }
2005
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002006 return true;
2007}
2008
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002009VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002010 VkPhysicalDevice physicalDevice,
2011 VkFormat format,
2012 VkImageType type,
2013 VkImageTiling tiling,
2014 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002015 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002016 VkImageFormatProperties* pImageFormatProperties)
2017{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002018 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002019
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002020 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002021}
2022
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002023bool PostGetPhysicalDeviceProperties(
2024 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002025 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002026{
2027
2028 if(pProperties != nullptr)
2029 {
2030 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2031 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2032 {
2033 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2034 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2035 return false;
2036 }
2037 }
2038
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002039 return true;
2040}
2041
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002042VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002043 VkPhysicalDevice physicalDevice,
2044 VkPhysicalDeviceProperties* pProperties)
2045{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002046 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002047
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002048 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002049}
2050
Cody Northropef72e2a2015-08-03 17:04:53 -06002051bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002052 VkPhysicalDevice physicalDevice,
2053 uint32_t* pCount,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002054 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002055{
2056
Cody Northropef72e2a2015-08-03 17:04:53 -06002057 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002058 {
2059 }
2060
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002061 if(pQueueProperties != nullptr)
2062 {
2063 }
2064
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002065 return true;
2066}
2067
2068VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2069 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002070 uint32_t* pCount,
2071 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002072{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002073 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002074
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002075 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002076}
2077
2078bool PostGetPhysicalDeviceMemoryProperties(
2079 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002080 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002081{
2082
2083 if(pMemoryProperties != nullptr)
2084 {
2085 }
2086
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002087 return true;
2088}
2089
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002090VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002091 VkPhysicalDevice physicalDevice,
2092 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2093{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002094 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002095
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002096 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002097}
2098
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002099VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2100 VkPhysicalDevice physicalDevice,
2101 const VkDeviceCreateInfo* pCreateInfo,
2102 VkDevice* pDevice)
2103{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002104 /*
2105 * NOTE: The loader fills in the ICD's device object in *pDevice.
2106 * Use that object to get the dispatch table.
2107 *
2108 * NOTE: We do not validate physicalDevice or any dispatchable
2109 * object as the first parameter. We couldn't get here if it was wrong!
2110 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002111 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002112 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2113 if(result == VK_SUCCESS)
2114 {
2115 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2116 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2117 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2118 }
2119
2120 return result;
2121}
2122
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002123VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002124 VkDevice device)
2125{
2126 layer_debug_report_destroy_device(device);
2127
2128 dispatch_key key = get_dispatch_key(device);
2129#if DISPATCH_MAP_DEBUG
2130 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2131#endif
2132
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002133 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002134 pc_device_table_map.erase(key);
2135 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002136}
2137
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002138bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002139 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002140 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002141 uint32_t queueIndex,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002142 VkQueue* pQueue)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002143{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002144
2145
2146
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002147 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002148 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002149 }
2150
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002151 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002152}
2153
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002154VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002155 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002156 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002157 uint32_t queueIndex,
2158 VkQueue* pQueue)
2159{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002160 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002161
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002162 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002163}
2164
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002165bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002166 VkQueue queue,
2167 const VkCmdBuffer* pCmdBuffers)
2168{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002169 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002170 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002171 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002172
2173 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002174}
2175
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002176bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002177 VkQueue queue,
2178 uint32_t cmdBufferCount,
2179 VkFence fence,
2180 VkResult result)
2181{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002182
2183
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002184
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002185 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002186 {
2187 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002188 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2189 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002190 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002191
2192 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002193}
2194
2195VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2196 VkQueue queue,
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002197 uint32_t submitCount,
2198 const VkSubmitInfo* pSubmitInfo,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002199 VkFence fence)
2200{
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002201 for (uint32_t i = 0; i < submitCount; i++) {
2202 PreQueueSubmit(queue, pSubmitInfo[i].pCommandBuffers);
2203 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002204
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002205 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmitInfo, fence);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002206
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002207 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002208
2209 return result;
2210}
2211
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002212bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002213 VkQueue queue,
2214 VkResult result)
2215{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002216
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002217 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002218 {
2219 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002220 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2221 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002222 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002223
2224 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002225}
2226
2227VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2228 VkQueue queue)
2229{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002230 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2231
2232 PostQueueWaitIdle(queue, result);
2233
2234 return result;
2235}
2236
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002237bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002238 VkDevice device,
2239 VkResult result)
2240{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002241
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002242 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002243 {
2244 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002245 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2246 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002247 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002248
2249 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002250}
2251
2252VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2253 VkDevice device)
2254{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002255 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2256
2257 PostDeviceWaitIdle(device, result);
2258
2259 return result;
2260}
2261
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002262bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002263 VkDevice device,
2264 const VkMemoryAllocInfo* pAllocInfo)
2265{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002266 if(pAllocInfo != nullptr)
2267 {
2268 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002269 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002270 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002271 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002272 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002273 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002274 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002275
2276 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002277}
2278
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002279bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002280 VkDevice device,
2281 VkDeviceMemory* pMem,
2282 VkResult result)
2283{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002284
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002285 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002286 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002287 }
2288
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002289 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002290 {
2291 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002292 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2293 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002294 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002295
2296 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002297}
2298
2299VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2300 VkDevice device,
2301 const VkMemoryAllocInfo* pAllocInfo,
2302 VkDeviceMemory* pMem)
2303{
2304 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002305
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002306 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2307
2308 PostAllocMemory(device, pMem, result);
2309
2310 return result;
2311}
2312
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002313bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002314 VkDevice device,
2315 VkDeviceMemory mem,
2316 VkDeviceSize offset,
2317 VkDeviceSize size,
2318 VkMemoryMapFlags flags,
2319 void** ppData,
2320 VkResult result)
2321{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002322
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002323
2324
2325
2326
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002327 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002328 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002329 }
2330
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002331 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002332 {
2333 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002334 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2335 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002336 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002337
2338 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002339}
2340
2341VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2342 VkDevice device,
2343 VkDeviceMemory mem,
2344 VkDeviceSize offset,
2345 VkDeviceSize size,
2346 VkMemoryMapFlags flags,
2347 void** ppData)
2348{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002349 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2350
2351 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2352
2353 return result;
2354}
2355
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002356bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002357 VkDevice device,
2358 const VkMappedMemoryRange* pMemRanges)
2359{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002360 if(pMemRanges != nullptr)
2361 {
2362 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002363 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002365 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002366 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002367 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002368 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002369
2370 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002371}
2372
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002373bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002374 VkDevice device,
2375 uint32_t memRangeCount,
2376 VkResult result)
2377{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002378
2379
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002380 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002381 {
2382 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002383 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2384 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002385 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002386
2387 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002388}
2389
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002390VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002391 VkDevice device,
2392 uint32_t memRangeCount,
2393 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002394{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002395 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002396
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002397 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002398
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002399 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2400
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002401 return result;
2402}
2403
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002404bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002405 VkDevice device,
2406 const VkMappedMemoryRange* pMemRanges)
2407{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002408 if(pMemRanges != nullptr)
2409 {
2410 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002411 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002412 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002413 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002414 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002415 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002416 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002417
2418 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002419}
2420
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002421bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002422 VkDevice device,
2423 uint32_t memRangeCount,
2424 VkResult result)
2425{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002426
2427
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002428 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002429 {
2430 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002431 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2432 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002433 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002434
2435 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002436}
2437
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002438VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002439 VkDevice device,
2440 uint32_t memRangeCount,
2441 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002442{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002443 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002444
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002445 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002446
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002447 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2448
Tony Barbour859ceab2015-04-16 19:23:13 -06002449 return result;
2450}
2451
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002452bool PostGetDeviceMemoryCommitment(
2453 VkDevice device,
2454 VkDeviceMemory memory,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002455 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002456{
2457
2458
2459 if(pCommittedMemoryInBytes != nullptr)
2460 {
2461 }
2462
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002463 return true;
2464}
2465
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002466VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002467 VkDevice device,
2468 VkDeviceMemory memory,
2469 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002470{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002471 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002472
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002473 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002474}
2475
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002476bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002477 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002478 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002479 VkDeviceMemory mem,
2480 VkDeviceSize memOffset,
2481 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002482{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002483
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002484
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002485
2486
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002487 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002488 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002489 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2491 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002492 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002493
2494 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002495}
2496
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002497VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002498 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002499 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002500 VkDeviceMemory mem,
2501 VkDeviceSize memOffset)
2502{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002503 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002504
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002505 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002506
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002507 return result;
2508}
2509
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002510bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002511 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002512 VkImage image,
2513 VkDeviceMemory mem,
2514 VkDeviceSize memOffset,
2515 VkResult result)
2516{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002517
2518
2519
2520
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002521 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002522 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002523 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2524 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2525 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002526 }
2527
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002528 return true;
2529}
2530
2531VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2532 VkDevice device,
2533 VkImage image,
2534 VkDeviceMemory mem,
2535 VkDeviceSize memOffset)
2536{
2537 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2538
2539 PostBindImageMemory(device, image, mem, memOffset, result);
2540
2541 return result;
2542}
2543
2544bool PostGetBufferMemoryRequirements(
2545 VkDevice device,
2546 VkBuffer buffer,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002547 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002548{
2549
2550
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002551 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002552 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002553 }
2554
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002555 return true;
2556}
2557
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002558VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002559 VkDevice device,
2560 VkBuffer buffer,
2561 VkMemoryRequirements* pMemoryRequirements)
2562{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002563 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002564
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002565 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002566}
2567
2568bool PostGetImageMemoryRequirements(
2569 VkDevice device,
2570 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002571 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002572{
2573
2574
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002575 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002576 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002577 }
2578
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002579 return true;
2580}
2581
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002582VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002583 VkDevice device,
2584 VkImage image,
2585 VkMemoryRequirements* pMemoryRequirements)
2586{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002587 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002588
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002589 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002590}
2591
2592bool PostGetImageSparseMemoryRequirements(
2593 VkDevice device,
2594 VkImage image,
2595 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002596 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002597{
2598
2599
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002600 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002601 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002602 }
2603
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002604 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002605 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002606 if ((pSparseMemoryRequirements->formatProps.aspect &
2607 (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 -06002608 {
2609 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002610 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002611 return false;
2612 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002613 }
2614
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002615 return true;
2616}
2617
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002618VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002619 VkDevice device,
2620 VkImage image,
2621 uint32_t* pNumRequirements,
2622 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2623{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002624 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002625
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002626 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002627}
2628
2629bool PostGetPhysicalDeviceSparseImageFormatProperties(
2630 VkPhysicalDevice physicalDevice,
2631 VkFormat format,
2632 VkImageType type,
2633 uint32_t samples,
2634 VkImageUsageFlags usage,
2635 VkImageTiling tiling,
2636 uint32_t* pNumProperties,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002637 VkSparseImageFormatProperties* pProperties)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002638{
2639
2640 if(format < VK_FORMAT_BEGIN_RANGE ||
2641 format > VK_FORMAT_END_RANGE)
2642 {
2643 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002644 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002645 return false;
2646 }
2647
2648 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2649 type > VK_IMAGE_TYPE_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, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002653 return false;
2654 }
2655
2656
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002657
2658 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2659 tiling > VK_IMAGE_TILING_END_RANGE)
2660 {
2661 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002662 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002663 return false;
2664 }
2665
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002666 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002667 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002668 }
2669
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002670 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002671 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002672 if ((pProperties->aspect &
2673 (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 -06002674 {
2675 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002676 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002677 return false;
2678 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002679 }
2680
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002681 return true;
2682}
2683
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002684VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002685 VkPhysicalDevice physicalDevice,
2686 VkFormat format,
2687 VkImageType type,
2688 uint32_t samples,
2689 VkImageUsageFlags usage,
2690 VkImageTiling tiling,
2691 uint32_t* pNumProperties,
2692 VkSparseImageFormatProperties* pProperties)
2693{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002694 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002695
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002696 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002697}
2698
2699bool PreQueueBindSparseBufferMemory(
2700 VkQueue queue,
2701 const VkSparseMemoryBindInfo* pBindInfo)
2702{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002703 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002704 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002705 }
2706
2707 return true;
2708}
2709
2710bool PostQueueBindSparseBufferMemory(
2711 VkQueue queue,
2712 VkBuffer buffer,
2713 uint32_t numBindings,
2714 VkResult result)
2715{
2716
2717
2718
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002719 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002720 {
2721 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2722 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2723 return false;
2724 }
2725
2726 return true;
2727}
2728
2729VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2730 VkQueue queue,
2731 VkBuffer buffer,
2732 uint32_t numBindings,
2733 const VkSparseMemoryBindInfo* pBindInfo)
2734{
2735 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2736
2737 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2738
2739 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2740
2741 return result;
2742}
2743
2744bool PreQueueBindSparseImageOpaqueMemory(
2745 VkQueue queue,
2746 const VkSparseMemoryBindInfo* pBindInfo)
2747{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002748 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002749 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002750 }
2751
2752 return true;
2753}
2754
2755bool PostQueueBindSparseImageOpaqueMemory(
2756 VkQueue queue,
2757 VkImage image,
2758 uint32_t numBindings,
2759 VkResult result)
2760{
2761
2762
2763
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002764 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002765 {
2766 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2767 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2768 return false;
2769 }
2770
2771 return true;
2772}
2773
2774VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2775 VkQueue queue,
2776 VkImage image,
2777 uint32_t numBindings,
2778 const VkSparseMemoryBindInfo* pBindInfo)
2779{
2780 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2781
2782 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2783
2784 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2785
2786 return result;
2787}
2788
2789bool PreQueueBindSparseImageMemory(
2790 VkQueue queue,
2791 const VkSparseImageMemoryBindInfo* pBindInfo)
2792{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002793 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002794 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002795 if ((pBindInfo->subresource.aspect &
2796 (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 -06002797 {
2798 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002799 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002800 return false;
2801 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002802 }
2803
2804 return true;
2805}
2806
2807bool PostQueueBindSparseImageMemory(
2808 VkQueue queue,
2809 VkImage image,
2810 uint32_t numBindings,
2811 VkResult result)
2812{
2813
2814
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002815
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002816 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002817 {
2818 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002819 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2820 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002821 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002822
2823 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002824}
2825
2826VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002827 VkQueue queue,
2828 VkImage image,
2829 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002830 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002831{
2832 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002833
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002834 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002835
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002836 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002837
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002838 return result;
2839}
2840
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002841bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002842 VkDevice device,
2843 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002844{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002845 if(pCreateInfo != nullptr)
2846 {
2847 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002848 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002849 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002850 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002851 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002852 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002853 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002854
2855 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002856}
2857
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002858bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002859 VkDevice device,
2860 VkFence* pFence,
2861 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002862{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002863
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002864 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002865 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002866 }
2867
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002868 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002869 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002870 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002871 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2872 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002873 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002874
2875 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002876}
2877
2878VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2879 VkDevice device,
2880 const VkFenceCreateInfo* pCreateInfo,
2881 VkFence* pFence)
2882{
2883 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002884
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002885 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
2886
2887 PostCreateFence(device, pFence, result);
2888
2889 return result;
2890}
2891
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002892bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002893 VkDevice device,
2894 const VkFence* pFences)
2895{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002896 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002897 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002898 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002899
2900 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002901}
2902
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002903bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002904 VkDevice device,
2905 uint32_t fenceCount,
2906 VkResult result)
2907{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002908
2909
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002910 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002911 {
2912 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2914 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002915 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002916
2917 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002918}
2919
2920VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2921 VkDevice device,
2922 uint32_t fenceCount,
2923 const VkFence* pFences)
2924{
2925 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002926
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002927 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2928
2929 PostResetFences(device, fenceCount, result);
2930
2931 return result;
2932}
2933
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002934bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002935 VkDevice device,
2936 VkFence fence,
2937 VkResult result)
2938{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002939
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002940
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002941 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002942 {
2943 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002944 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2945 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002946 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002947
2948 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002949}
2950
2951VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2952 VkDevice device,
2953 VkFence fence)
2954{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002955 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2956
2957 PostGetFenceStatus(device, fence, result);
2958
2959 return result;
2960}
2961
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002962bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002963 VkDevice device,
2964 const VkFence* pFences)
2965{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002966 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002967 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002968 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002969
2970 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002971}
2972
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002973bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002974 VkDevice device,
2975 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002976 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002977 uint64_t timeout,
2978 VkResult result)
2979{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002980
2981
2982
2983
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002984 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002985 {
2986 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2988 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002989 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002990
2991 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002992}
2993
2994VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2995 VkDevice device,
2996 uint32_t fenceCount,
2997 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002998 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002999 uint64_t timeout)
3000{
3001 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003002
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003003 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3004
3005 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3006
3007 return result;
3008}
3009
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003010bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003011 VkDevice device,
3012 const VkSemaphoreCreateInfo* pCreateInfo)
3013{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003014 if(pCreateInfo != nullptr)
3015 {
3016 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003017 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003018 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003019 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003020 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003021 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003022 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003023
3024 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003025}
3026
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003027bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003028 VkDevice device,
3029 VkSemaphore* pSemaphore,
3030 VkResult result)
3031{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003032
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003033 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003034 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003035 }
3036
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003037 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003038 {
3039 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003040 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3041 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003042 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003043
3044 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003045}
3046
3047VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3048 VkDevice device,
3049 const VkSemaphoreCreateInfo* pCreateInfo,
3050 VkSemaphore* pSemaphore)
3051{
3052 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003053
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003054 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3055
3056 PostCreateSemaphore(device, pSemaphore, result);
3057
3058 return result;
3059}
3060
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003061bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003062 VkQueue queue,
3063 VkSemaphore semaphore,
3064 VkResult result)
3065{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003066
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003067
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003068 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003069 {
3070 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003071 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3072 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003073 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003074
3075 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003076}
3077
3078VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3079 VkQueue queue,
3080 VkSemaphore semaphore)
3081{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003082 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3083
3084 PostQueueSignalSemaphore(queue, semaphore, result);
3085
3086 return result;
3087}
3088
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003089bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003090 VkQueue queue,
3091 VkSemaphore semaphore,
3092 VkResult result)
3093{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003094
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003095
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003096 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003097 {
3098 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003099 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3100 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003101 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003102
3103 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003104}
3105
3106VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3107 VkQueue queue,
3108 VkSemaphore semaphore)
3109{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003110 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3111
3112 PostQueueWaitSemaphore(queue, semaphore, result);
3113
3114 return result;
3115}
3116
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003117bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003118 VkDevice device,
3119 const VkEventCreateInfo* pCreateInfo)
3120{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003121 if(pCreateInfo != nullptr)
3122 {
3123 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003124 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003125 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003126 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003127 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003128 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003129 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003130
3131 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003132}
3133
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003134bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003135 VkDevice device,
3136 VkEvent* pEvent,
3137 VkResult result)
3138{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003139
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003140 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003141 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003142 }
3143
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003144 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003145 {
3146 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3148 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003149 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003150
3151 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003152}
3153
3154VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3155 VkDevice device,
3156 const VkEventCreateInfo* pCreateInfo,
3157 VkEvent* pEvent)
3158{
3159 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003160
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003161 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3162
3163 PostCreateEvent(device, pEvent, result);
3164
3165 return result;
3166}
3167
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003168bool PostGetEventStatus(
3169 VkDevice device,
3170 VkEvent event,
3171 VkResult result)
3172{
3173
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003174
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003175 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003176 {
3177 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003178 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3179 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003180 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003181
3182 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003183}
3184
3185VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3186 VkDevice device,
3187 VkEvent event)
3188{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003189 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3190
3191 PostGetEventStatus(device, event, result);
3192
3193 return result;
3194}
3195
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003196bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003197 VkDevice device,
3198 VkEvent event,
3199 VkResult result)
3200{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003201
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003202
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003203 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003204 {
3205 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003206 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3207 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003208 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003209
3210 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003211}
3212
3213VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3214 VkDevice device,
3215 VkEvent event)
3216{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003217 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3218
3219 PostSetEvent(device, event, result);
3220
3221 return result;
3222}
3223
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003224bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003225 VkDevice device,
3226 VkEvent event,
3227 VkResult result)
3228{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003229
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003230
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003231 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003232 {
3233 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003234 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3235 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003236 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003237
3238 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003239}
3240
3241VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3242 VkDevice device,
3243 VkEvent event)
3244{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003245 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3246
3247 PostResetEvent(device, event, result);
3248
3249 return result;
3250}
3251
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003252bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003253 VkDevice device,
3254 const VkQueryPoolCreateInfo* pCreateInfo)
3255{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003256 if(pCreateInfo != nullptr)
3257 {
3258 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003259 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003260 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003261 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003262 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003263 }
3264 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3265 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3266 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003267 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003268 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003269 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003270 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003271 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003272
3273 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003274}
3275
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003276bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003277 VkDevice device,
3278 VkQueryPool* pQueryPool,
3279 VkResult result)
3280{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003281
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003282 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003283 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003284 }
3285
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003286 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003287 {
3288 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003289 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3290 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003291 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003292
3293 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003294}
3295
3296VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3297 VkDevice device,
3298 const VkQueryPoolCreateInfo* pCreateInfo,
3299 VkQueryPool* pQueryPool)
3300{
3301 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003302
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003303 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3304
3305 PostCreateQueryPool(device, pQueryPool, result);
3306
3307 return result;
3308}
3309
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003310bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003311 VkDevice device,
3312 VkQueryPool queryPool,
3313 uint32_t startQuery,
3314 uint32_t queryCount,
3315 size_t* pDataSize,
3316 void* pData,
3317 VkQueryResultFlags flags,
3318 VkResult result)
3319{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003320
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003321
3322
3323
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003324 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003325 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003326 }
3327
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003328 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003329 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003330 }
3331
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003332
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003333 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003334 {
3335 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003336 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3337 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003338 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003339
3340 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003341}
3342
3343VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3344 VkDevice device,
3345 VkQueryPool queryPool,
3346 uint32_t startQuery,
3347 uint32_t queryCount,
3348 size_t* pDataSize,
3349 void* pData,
3350 VkQueryResultFlags flags)
3351{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003352 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3353
3354 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3355
3356 return result;
3357}
3358
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003359bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003360 VkDevice device,
3361 const VkBufferCreateInfo* pCreateInfo)
3362{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003363 if(pCreateInfo != nullptr)
3364 {
3365 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003366 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003368 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003369 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003370 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003371 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3372 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003373 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003374 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003375 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003376 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003377 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003378 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003379 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003380 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003381 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003382
3383 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003384}
3385
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003386bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003387 VkDevice device,
3388 VkBuffer* pBuffer,
3389 VkResult result)
3390{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003391
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003392 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003393 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003394 }
3395
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003396 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003397 {
3398 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003399 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3400 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003401 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003402
3403 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003404}
3405
3406VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3407 VkDevice device,
3408 const VkBufferCreateInfo* pCreateInfo,
3409 VkBuffer* pBuffer)
3410{
3411 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003412
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003413 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3414
3415 PostCreateBuffer(device, pBuffer, result);
3416
3417 return result;
3418}
3419
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003420bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003421 VkDevice device,
3422 const VkBufferViewCreateInfo* pCreateInfo)
3423{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003424 if(pCreateInfo != nullptr)
3425 {
3426 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003427 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003428 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003429 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003430 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003431 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003432 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3433 pCreateInfo->format > VK_FORMAT_END_RANGE)
3434 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003435 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003436 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003437 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003438 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003439 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003440
3441 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003442}
3443
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003444bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003445 VkDevice device,
3446 VkBufferView* pView,
3447 VkResult result)
3448{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003449
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003450 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003451 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452 }
3453
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003454 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003455 {
3456 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003457 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3458 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003459 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003460
3461 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003462}
3463
3464VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3465 VkDevice device,
3466 const VkBufferViewCreateInfo* pCreateInfo,
3467 VkBufferView* pView)
3468{
3469 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003470
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003471 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3472
3473 PostCreateBufferView(device, pView, result);
3474
3475 return result;
3476}
3477
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003478bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003479 VkDevice device,
3480 const VkImageCreateInfo* pCreateInfo)
3481{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003482 if(pCreateInfo != nullptr)
3483 {
3484 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003485 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003486 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003487 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003488 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003489 }
3490 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3491 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3492 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003493 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003494 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003495 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003496 }
3497 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3498 pCreateInfo->format > VK_FORMAT_END_RANGE)
3499 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003500 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003501 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003502 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003503 }
3504 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3505 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3506 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003507 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003508 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003509 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003510 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003511 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3512 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003513 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003514 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3515 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003516 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003517 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003518 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003519 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003520 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003521 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003522
3523 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003524}
3525
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003526bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527 VkDevice device,
3528 VkImage* pImage,
3529 VkResult result)
3530{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003531
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003532 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003533 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003534 }
3535
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003536 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003537 {
3538 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003539 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3540 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003541 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003542
3543 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003544}
3545
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003546VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3547 VkDevice device,
3548 const VkImageCreateInfo* pCreateInfo,
3549 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003550{
3551 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003552
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003553 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3554
3555 PostCreateImage(device, pImage, result);
3556
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003557 return result;
3558}
3559
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003560bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003561 VkDevice device,
3562 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003563{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003564 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003565 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06003566 if ((pSubresource->aspect &
3567 (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 -06003568 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003569 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003570 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003571 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003573 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003574
3575 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003576}
3577
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003578bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003579 VkDevice device,
3580 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003581 VkSubresourceLayout* pLayout)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003582{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003583
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003584
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003585 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003586 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003587 }
3588
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003589 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003590}
3591
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003592VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003593 VkDevice device,
3594 VkImage image,
3595 const VkImageSubresource* pSubresource,
3596 VkSubresourceLayout* pLayout)
3597{
3598 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003599
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003600 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003601
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003602 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003603}
3604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003605bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003606 VkDevice device,
3607 const VkImageViewCreateInfo* pCreateInfo)
3608{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003609 if(pCreateInfo != nullptr)
3610 {
3611 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003612 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003613 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003614 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003615 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003616 }
3617 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3618 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3619 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003620 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003621 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003622 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003623 }
3624 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3625 pCreateInfo->format > VK_FORMAT_END_RANGE)
3626 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003627 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003628 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003629 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003630 }
3631 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3632 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3633 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003634 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003635 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003636 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003637 }
3638 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3639 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3640 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003641 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003642 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003643 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003644 }
3645 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3646 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3647 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003648 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003649 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003650 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003651 }
3652 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3653 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3654 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003655 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003656 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003657 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003658 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003659 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003660
3661 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003662}
3663
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003664bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003665 VkDevice device,
3666 VkImageView* pView,
3667 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003668{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003669
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003670 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003671 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003672 }
3673
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003674 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003675 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003676 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003677 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3678 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003679 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003680
3681 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003682}
3683
3684VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3685 VkDevice device,
3686 const VkImageViewCreateInfo* pCreateInfo,
3687 VkImageView* pView)
3688{
3689 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003690
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003691 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3692
3693 PostCreateImageView(device, pView, result);
3694
3695 return result;
3696}
3697
Michael Lentine6715e522015-09-15 14:59:14 -05003698bool PreCreateShaderModule(
3699 VkDevice device,
3700 const VkShaderModuleCreateInfo* pCreateInfo)
3701{
3702 if(pCreateInfo) {
3703 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3704 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3705 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3706 return false;
3707 }
3708 if(!pCreateInfo->pCode) {
3709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3710 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3711 return false;
3712 }
3713 } else {
3714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3715 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3716 return false;
3717 }
3718
3719 return true;
3720}
3721
3722bool PostCreateShaderModule(
3723 VkDevice device,
3724 VkShaderModule* pShaderModule,
3725 VkResult result)
3726{
3727 if(result < VK_SUCCESS) {
3728 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3729 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3730 return false;
3731 }
3732
3733 return true;
3734}
3735
3736VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3737 VkDevice device,
3738 const VkShaderModuleCreateInfo* pCreateInfo,
3739 VkShaderModule* pShaderModule)
3740{
3741 PreCreateShaderModule(device, pCreateInfo);
3742 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3743 PostCreateShaderModule(device, pShaderModule, result);
3744 return result;
3745}
3746
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003747bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003748 VkDevice device,
3749 const VkShaderCreateInfo* pCreateInfo)
3750{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003751 if(pCreateInfo != nullptr)
3752 {
3753 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003754 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003755 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003756 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003757 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003758 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003759 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003760 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003761 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003762 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003763
3764 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003765}
3766
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003768 VkDevice device,
3769 VkShader* pShader,
3770 VkResult result)
3771{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003772
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003773 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003774 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003775 }
3776
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003777 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003778 {
3779 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003780 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3781 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003782 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003783
3784 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003785}
3786
3787VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3788 VkDevice device,
3789 const VkShaderCreateInfo* pCreateInfo,
3790 VkShader* pShader)
3791{
3792 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003793
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003794 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3795
3796 PostCreateShader(device, pShader, result);
3797
3798 return result;
3799}
3800
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003801bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003802 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003803 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003804{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003805 if(pCreateInfo != nullptr)
3806 {
3807 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003808 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003809 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003810 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003811 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003812 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003813 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003814 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003815 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003816 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003817
3818 return true;
3819}
3820
3821bool PostCreatePipelineCache(
3822 VkDevice device,
3823 VkPipelineCache* pPipelineCache,
3824 VkResult result)
3825{
3826
3827 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003828 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003829 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003830
3831 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003832 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003833 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06003834 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3835 return false;
3836 }
3837
3838 return true;
3839}
3840
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003841VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003842 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003843 const VkPipelineCacheCreateInfo* pCreateInfo,
3844 VkPipelineCache* pPipelineCache)
3845{
3846 PreCreatePipelineCache(device, pCreateInfo);
3847
3848 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3849
3850 PostCreatePipelineCache(device, pPipelineCache, result);
3851
3852 return result;
3853}
3854
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003855bool PostGetPipelineCacheSize(
3856 VkDevice device,
3857 VkPipelineCache pipelineCache)
3858{
3859
3860
3861 return true;
3862}
3863
3864VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
3865 VkDevice device,
3866 VkPipelineCache pipelineCache)
3867{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06003868 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003869
3870 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06003871
3872 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003873}
3874
3875bool PostGetPipelineCacheData(
3876 VkDevice device,
3877 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003878 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003879 void* pData,
3880 VkResult result)
3881{
3882
3883
3884 if(pData != nullptr)
3885 {
3886 }
3887
3888 if(result < VK_SUCCESS)
3889 {
3890 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3891 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3892 return false;
3893 }
3894
3895 return true;
3896}
3897
3898VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3899 VkDevice device,
3900 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003901 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003902 void* pData)
3903{
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003904 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, dataSize, pData);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003905
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003906 PostGetPipelineCacheData(device, pipelineCache, dataSize, pData, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003907
3908 return result;
3909}
3910
3911bool PreMergePipelineCaches(
3912 VkDevice device,
3913 const VkPipelineCache* pSrcCaches)
3914{
3915 if(pSrcCaches != nullptr)
3916 {
3917 }
3918
3919 return true;
3920}
3921
3922bool PostMergePipelineCaches(
3923 VkDevice device,
3924 VkPipelineCache destCache,
3925 uint32_t srcCacheCount,
3926 VkResult result)
3927{
3928
3929
3930
3931 if(result < VK_SUCCESS)
3932 {
3933 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3935 return false;
3936 }
3937
3938 return true;
3939}
3940
3941VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3942 VkDevice device,
3943 VkPipelineCache destCache,
3944 uint32_t srcCacheCount,
3945 const VkPipelineCache* pSrcCaches)
3946{
3947 PreMergePipelineCaches(device, pSrcCaches);
3948
3949 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
3950
3951 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
3952
3953 return result;
3954}
3955
3956bool PreCreateGraphicsPipelines(
3957 VkDevice device,
3958 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3959{
3960 if(pCreateInfos != nullptr)
3961 {
3962 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3963 {
3964 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3965 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3966 return false;
3967 }
3968 if(pCreateInfos->pStages != nullptr)
3969 {
3970 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3971 {
3972 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3973 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3974 return false;
3975 }
Courtney Goeltzenleuchter8e2f0972015-10-21 17:08:06 -06003976 if((pCreateInfos->pStages->stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
3977 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
3978 VK_SHADER_STAGE_GEOMETRY_BIT |
3979 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003980 {
3981 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3982 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
3983 return false;
3984 }
3985 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3986 {
3987 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
3988 {
3989 }
3990 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3991 {
3992 }
3993 }
3994 }
3995 if(pCreateInfos->pVertexInputState != nullptr)
3996 {
3997 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3998 {
3999 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4000 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4001 return false;
4002 }
4003 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4004 {
4005 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4006 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4007 {
4008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4009 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4010 return false;
4011 }
4012 }
4013 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4014 {
4015 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4016 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4017 {
4018 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4019 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4020 return false;
4021 }
4022 }
4023 }
4024 if(pCreateInfos->pInputAssemblyState != nullptr)
4025 {
4026 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4027 {
4028 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4029 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4030 return false;
4031 }
4032 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4033 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4034 {
4035 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4036 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4037 return false;
4038 }
4039 }
4040 if(pCreateInfos->pTessellationState != nullptr)
4041 {
4042 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4043 {
4044 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4045 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4046 return false;
4047 }
4048 }
4049 if(pCreateInfos->pViewportState != nullptr)
4050 {
4051 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4052 {
4053 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4054 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4055 return false;
4056 }
4057 }
4058 if(pCreateInfos->pRasterState != nullptr)
4059 {
4060 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4061 {
4062 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4063 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4064 return false;
4065 }
4066 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4067 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4068 {
4069 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4070 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4071 return false;
4072 }
4073 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4074 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4075 {
4076 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4077 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4078 return false;
4079 }
4080 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4081 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4082 {
4083 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4084 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4085 return false;
4086 }
4087 }
4088 if(pCreateInfos->pMultisampleState != nullptr)
4089 {
4090 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4091 {
4092 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4093 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4094 return false;
4095 }
4096 }
4097 if(pCreateInfos->pDepthStencilState != nullptr)
4098 {
4099 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4100 {
4101 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4102 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4103 return false;
4104 }
4105 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4106 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4107 {
4108 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4109 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4110 return false;
4111 }
4112 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4113 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4114 {
4115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4116 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4117 return false;
4118 }
4119 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4120 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4121 {
4122 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4123 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4124 return false;
4125 }
4126 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4127 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4128 {
4129 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4130 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4131 return false;
4132 }
4133 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4134 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4135 {
4136 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4137 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4138 return false;
4139 }
4140 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4141 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4142 {
4143 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4144 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4145 return false;
4146 }
4147 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4148 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4149 {
4150 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4151 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4152 return false;
4153 }
4154 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4155 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4156 {
4157 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4158 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4159 return false;
4160 }
4161 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4162 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4163 {
4164 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4165 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4166 return false;
4167 }
4168 }
4169 if(pCreateInfos->pColorBlendState != nullptr)
4170 {
4171 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4172 {
4173 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4174 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4175 return false;
4176 }
Michael Lentine6d033602015-10-06 14:55:54 -07004177 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4178 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004179 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4180 {
4181 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4182 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4183 return false;
4184 }
Michael Lentined833b882015-09-15 14:59:56 -05004185 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004186 {
4187 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4188 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4189 {
4190 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4191 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4192 return false;
4193 }
4194 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4195 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4196 {
4197 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4198 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4199 return false;
4200 }
4201 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4202 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4203 {
4204 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4205 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4206 return false;
4207 }
4208 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4209 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4210 {
4211 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4212 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4213 return false;
4214 }
4215 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4216 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4217 {
4218 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4219 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4220 return false;
4221 }
4222 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4223 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4224 {
4225 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4226 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4227 return false;
4228 }
4229 }
4230 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004231 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4232 {
4233 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4234 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4235 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004236 }
4237
4238 return true;
4239}
4240
4241bool PostCreateGraphicsPipelines(
4242 VkDevice device,
4243 VkPipelineCache pipelineCache,
4244 uint32_t count,
4245 VkPipeline* pPipelines,
4246 VkResult result)
4247{
4248
4249
4250
4251 if(pPipelines != nullptr)
4252 {
4253 }
4254
4255 if(result < VK_SUCCESS)
4256 {
4257 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4258 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4259 return false;
4260 }
4261
4262 return true;
4263}
4264
4265VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4266 VkDevice device,
4267 VkPipelineCache pipelineCache,
4268 uint32_t count,
4269 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4270 VkPipeline* pPipelines)
4271{
4272 PreCreateGraphicsPipelines(device, pCreateInfos);
4273
4274 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4275
4276 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4277
4278 return result;
4279}
4280
4281bool PreCreateComputePipelines(
4282 VkDevice device,
4283 const VkComputePipelineCreateInfo* pCreateInfos)
4284{
4285 if(pCreateInfos != nullptr)
4286 {
4287 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4288 {
4289 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4290 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4291 return false;
4292 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004293 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004294 {
4295 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4296 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4297 return false;
4298 }
Courtney Goeltzenleuchter8e2f0972015-10-21 17:08:06 -06004299 if((pCreateInfos->stage.stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
4300 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
4301 VK_SHADER_STAGE_GEOMETRY_BIT |
4302 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004303 {
4304 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4305 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4306 return false;
4307 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004308 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004309 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004310 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004311 {
4312 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004313 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004314 {
4315 }
4316 }
4317 }
4318
4319 return true;
4320}
4321
4322bool PostCreateComputePipelines(
4323 VkDevice device,
4324 VkPipelineCache pipelineCache,
4325 uint32_t count,
4326 VkPipeline* pPipelines,
4327 VkResult result)
4328{
4329
4330
4331
4332 if(pPipelines != nullptr)
4333 {
4334 }
4335
4336 if(result < VK_SUCCESS)
4337 {
4338 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4339 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4340 return false;
4341 }
4342
4343 return true;
4344}
4345
4346VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4347 VkDevice device,
4348 VkPipelineCache pipelineCache,
4349 uint32_t count,
4350 const VkComputePipelineCreateInfo* pCreateInfos,
4351 VkPipeline* pPipelines)
4352{
4353 PreCreateComputePipelines(device, pCreateInfos);
4354
4355 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4356
4357 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4358
4359 return result;
4360}
4361
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004362bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004363 VkDevice device,
4364 const VkPipelineLayoutCreateInfo* pCreateInfo)
4365{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004366 if(pCreateInfo != nullptr)
4367 {
4368 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004369 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004370 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004371 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4372 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004373 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004374 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004375 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004376 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004377 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004378 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004379 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004380 }
4381
4382 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004383}
4384
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004385bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004386 VkDevice device,
4387 VkPipelineLayout* pPipelineLayout,
4388 VkResult result)
4389{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004390
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004391 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004392 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004393 }
4394
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004395 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004396 {
4397 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004398 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4399 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004400 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004401
4402 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004403}
4404
4405VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4406 VkDevice device,
4407 const VkPipelineLayoutCreateInfo* pCreateInfo,
4408 VkPipelineLayout* pPipelineLayout)
4409{
4410 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004411
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004412 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4413
4414 PostCreatePipelineLayout(device, pPipelineLayout, result);
4415
4416 return result;
4417}
4418
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004419bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004420 VkDevice device,
4421 const VkSamplerCreateInfo* pCreateInfo)
4422{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004423 if(pCreateInfo != nullptr)
4424 {
4425 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004426 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004427 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004428 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004429 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004430 }
4431 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4432 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4433 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004434 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004435 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004436 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004437 }
4438 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4439 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4440 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004441 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004442 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004443 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004444 }
4445 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4446 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4447 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004448 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004449 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004450 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004451 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004452 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4453 pCreateInfo->addressModeU > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004454 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004455 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004456 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004457 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004458 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004459 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4460 pCreateInfo->addressModeV > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004461 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004462 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004463 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004464 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004465 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004466 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4467 pCreateInfo->addressModeW > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004468 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004469 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004470 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004471 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004472 }
4473 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4474 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4475 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004476 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004477 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004478 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004479 }
4480 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4481 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4482 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004483 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004484 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004485 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004486 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004487 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004488
4489 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004490}
4491
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004492bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004493 VkDevice device,
4494 VkSampler* pSampler,
4495 VkResult result)
4496{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004497
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004498 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004499 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004500 }
4501
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004502 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004503 {
4504 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004505 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4506 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004507 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004508
4509 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004510}
4511
4512VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4513 VkDevice device,
4514 const VkSamplerCreateInfo* pCreateInfo,
4515 VkSampler* pSampler)
4516{
4517 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004518
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004519 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4520
4521 PostCreateSampler(device, pSampler, result);
4522
4523 return result;
4524}
4525
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004526bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004527 VkDevice device,
4528 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4529{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004530 if(pCreateInfo != nullptr)
4531 {
4532 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004533 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004534 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004535 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004536 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004537 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004538 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004539 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004540 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4541 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4542 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004543 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004544 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004545 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004546 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004547 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004548 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004549 }
4550 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004551 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004552
4553 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004554}
4555
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004556bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004557 VkDevice device,
4558 VkDescriptorSetLayout* pSetLayout,
4559 VkResult result)
4560{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004561
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004562 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004563 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004564 }
4565
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004566 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004567 {
4568 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004569 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4570 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004571 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004572
4573 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004574}
4575
4576VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4577 VkDevice device,
4578 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4579 VkDescriptorSetLayout* pSetLayout)
4580{
4581 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004582
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004583 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4584
4585 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4586
4587 return result;
4588}
4589
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004590bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004591 VkDevice device,
4592 const VkDescriptorPoolCreateInfo* pCreateInfo)
4593{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004594 if(pCreateInfo != nullptr)
4595 {
4596 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004597 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004598 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004599 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004600 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004601 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004602 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004603 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004604 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4605 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4606 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004607 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004608 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004609 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004610 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004611 }
4612 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004613
4614 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004615}
4616
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004617bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004618 VkDevice device,
4619 VkDescriptorPoolUsage poolUsage,
4620 uint32_t maxSets,
4621 VkDescriptorPool* pDescriptorPool,
4622 VkResult result)
4623{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004624
4625 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
4626 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
4627 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004628 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004629 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004630 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004631 }
4632
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004633 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004634
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004635 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004636 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004637 }
4638
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004639 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004640 {
4641 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004642 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4643 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004644 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004645
4646 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004647}
4648
4649VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4650 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004651 const VkDescriptorPoolCreateInfo* pCreateInfo,
4652 VkDescriptorPool* pDescriptorPool)
4653{
4654 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004655
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004656 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004657
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004658 PostCreateDescriptorPool(device, pCreateInfo->poolUsage, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004659
4660 return result;
4661}
4662
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004663bool PostResetDescriptorPool(
4664 VkDevice device,
4665 VkDescriptorPool descriptorPool,
4666 VkResult result)
4667{
4668
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004669
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004670 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004671 {
4672 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004673 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4674 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004675 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004676
4677 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004678}
4679
4680VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4681 VkDevice device,
4682 VkDescriptorPool descriptorPool)
4683{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004684 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
4685
4686 PostResetDescriptorPool(device, descriptorPool, result);
4687
4688 return result;
4689}
4690
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004691bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004692 VkDevice device,
4693 const VkDescriptorSetLayout* pSetLayouts)
4694{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004695 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004696 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004697 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004698
4699 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004700}
4701
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004702bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004703 VkDevice device,
4704 VkDescriptorPool descriptorPool,
4705 VkDescriptorSetUsage setUsage,
4706 uint32_t count,
4707 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004708 VkResult result)
4709{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004710
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004711
4712 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
4713 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
4714 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004715 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004716 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004717 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004718 }
4719
4720
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004721 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004722 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004723 }
4724
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004725 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004726 {
4727 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004728 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4729 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004730 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004731
4732 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004733}
4734
4735VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4736 VkDevice device,
4737 VkDescriptorPool descriptorPool,
4738 VkDescriptorSetUsage setUsage,
4739 uint32_t count,
4740 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004741 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004742{
4743 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004744
Cody Northropc8aa4a52015-08-03 12:47:29 -06004745 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004746
Cody Northropc8aa4a52015-08-03 12:47:29 -06004747 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004748
4749 return result;
4750}
4751
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004752bool PreFreeDescriptorSets(
4753 VkDevice device,
4754 const VkDescriptorSet* pDescriptorSets)
4755{
4756 if(pDescriptorSets != nullptr)
4757 {
4758 }
4759
4760 return true;
4761}
4762
4763bool PostFreeDescriptorSets(
4764 VkDevice device,
4765 VkDescriptorPool descriptorPool,
4766 uint32_t count,
4767 VkResult result)
4768{
4769
4770
4771
4772 if(result < VK_SUCCESS)
4773 {
4774 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4776 return false;
4777 }
4778
4779 return true;
4780}
4781
4782VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4783 VkDevice device,
4784 VkDescriptorPool descriptorPool,
4785 uint32_t count,
4786 const VkDescriptorSet* pDescriptorSets)
4787{
4788 PreFreeDescriptorSets(device, pDescriptorSets);
4789
4790 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4791
4792 PostFreeDescriptorSets(device, descriptorPool, count, result);
4793
4794 return result;
4795}
4796
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004797bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004798 VkDevice device,
4799 const VkWriteDescriptorSet* pDescriptorWrites,
4800 const VkCopyDescriptorSet* pDescriptorCopies)
4801{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004802 if(pDescriptorWrites != nullptr)
4803 {
4804 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004805 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004806 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004807 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004808 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004809 }
4810 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4811 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4812 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004813 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004814 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004815 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004816 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004817 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004818 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004819 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4820 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
4821 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004823 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004824 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004825 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004826 }
4827 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004828
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004829 if(pDescriptorCopies != nullptr)
4830 {
4831 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004832 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004833 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004834 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004835 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004836 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004837 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004838
4839 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004840}
4841
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004842VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004843 VkDevice device,
4844 uint32_t writeCount,
4845 const VkWriteDescriptorSet* pDescriptorWrites,
4846 uint32_t copyCount,
4847 const VkCopyDescriptorSet* pDescriptorCopies)
4848{
4849 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004850
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004851 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004852}
4853
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004854bool PreCreateFramebuffer(
4855 VkDevice device,
4856 const VkFramebufferCreateInfo* pCreateInfo)
4857{
4858 if(pCreateInfo != nullptr)
4859 {
4860 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4861 {
4862 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4863 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4864 return false;
4865 }
4866 if(pCreateInfo->pAttachments != nullptr)
4867 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004868 }
4869 }
4870
4871 return true;
4872}
4873
4874bool PostCreateFramebuffer(
4875 VkDevice device,
4876 VkFramebuffer* pFramebuffer,
4877 VkResult result)
4878{
4879
4880 if(pFramebuffer != nullptr)
4881 {
4882 }
4883
4884 if(result < VK_SUCCESS)
4885 {
4886 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4887 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4888 return false;
4889 }
4890
4891 return true;
4892}
4893
4894VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4895 VkDevice device,
4896 const VkFramebufferCreateInfo* pCreateInfo,
4897 VkFramebuffer* pFramebuffer)
4898{
4899 PreCreateFramebuffer(device, pCreateInfo);
4900
4901 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
4902
4903 PostCreateFramebuffer(device, pFramebuffer, result);
4904
4905 return result;
4906}
4907
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004908bool PreCreateRenderPass(
4909 VkDevice device,
4910 const VkRenderPassCreateInfo* pCreateInfo)
4911{
4912 if(pCreateInfo != nullptr)
4913 {
4914 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4915 {
4916 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4917 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4918 return false;
4919 }
4920 if(pCreateInfo->pAttachments != nullptr)
4921 {
4922 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
4923 {
4924 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4925 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
4926 return false;
4927 }
4928 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4929 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4930 {
4931 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4932 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4933 return false;
4934 }
4935 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4936 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4937 {
4938 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4939 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4940 return false;
4941 }
4942 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4943 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4944 {
4945 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4946 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4947 return false;
4948 }
4949 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4950 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4951 {
4952 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4953 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4954 return false;
4955 }
4956 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4957 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4958 {
4959 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4960 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4961 return false;
4962 }
4963 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4964 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4965 {
4966 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4967 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4968 return false;
4969 }
4970 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4971 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4972 {
4973 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4974 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4975 return false;
4976 }
4977 }
4978 if(pCreateInfo->pSubpasses != nullptr)
4979 {
4980 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
4981 {
4982 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4983 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
4984 return false;
4985 }
4986 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4987 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4988 {
4989 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4990 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4991 return false;
4992 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004993 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004994 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004995 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4996 pCreateInfo->pSubpasses->pInputAttachments->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->pInputAttachments->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->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005004 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005005 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5006 pCreateInfo->pSubpasses->pColorAttachments->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->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005010 return false;
5011 }
5012 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005013 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005014 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005015 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5016 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005017 {
5018 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005019 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005020 return false;
5021 }
5022 }
5023 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5024 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
5025 {
5026 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5027 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
5028 return false;
5029 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005030 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005031 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005032 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5033 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005034 {
5035 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005036 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005037 return false;
5038 }
5039 }
5040 }
5041 if(pCreateInfo->pDependencies != nullptr)
5042 {
5043 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5044 {
5045 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5046 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5047 return false;
5048 }
5049 }
5050 }
5051
5052 return true;
5053}
5054
5055bool PostCreateRenderPass(
5056 VkDevice device,
5057 VkRenderPass* pRenderPass,
5058 VkResult result)
5059{
5060
5061 if(pRenderPass != nullptr)
5062 {
5063 }
5064
5065 if(result < VK_SUCCESS)
5066 {
5067 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5068 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5069 return false;
5070 }
5071
5072 return true;
5073}
5074
5075VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5076 VkDevice device,
5077 const VkRenderPassCreateInfo* pCreateInfo,
5078 VkRenderPass* pRenderPass)
5079{
5080 PreCreateRenderPass(device, pCreateInfo);
5081
5082 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5083
5084 PostCreateRenderPass(device, pRenderPass, result);
5085
5086 return result;
5087}
5088
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005089bool PostGetRenderAreaGranularity(
5090 VkDevice device,
5091 VkRenderPass renderPass,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005092 VkExtent2D* pGranularity)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005093{
5094
5095
5096 if(pGranularity != nullptr)
5097 {
5098 }
5099
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005100 return true;
5101}
5102
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005103VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005104 VkDevice device,
5105 VkRenderPass renderPass,
5106 VkExtent2D* pGranularity)
5107{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005108 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005109
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005110 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005111}
5112
5113bool PreCreateCommandPool(
5114 VkDevice device,
5115 const VkCmdPoolCreateInfo* pCreateInfo)
5116{
5117 if(pCreateInfo != nullptr)
5118 {
5119 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5120 {
5121 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5122 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5123 return false;
5124 }
5125 }
5126
5127 return true;
5128}
5129
5130bool PostCreateCommandPool(
5131 VkDevice device,
5132 VkCmdPool* pCmdPool,
5133 VkResult result)
5134{
5135
5136 if(pCmdPool != nullptr)
5137 {
5138 }
5139
5140 if(result < VK_SUCCESS)
5141 {
5142 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5143 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5144 return false;
5145 }
5146
5147 return true;
5148}
5149
5150VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5151 VkDevice device,
5152 const VkCmdPoolCreateInfo* pCreateInfo,
5153 VkCmdPool* pCmdPool)
5154{
5155 PreCreateCommandPool(device, pCreateInfo);
5156
5157 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5158
5159 PostCreateCommandPool(device, pCmdPool, result);
5160
5161 return result;
5162}
5163
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005164bool PostResetCommandPool(
5165 VkDevice device,
5166 VkCmdPool cmdPool,
5167 VkCmdPoolResetFlags flags,
5168 VkResult result)
5169{
5170
5171
5172
5173 if(result < VK_SUCCESS)
5174 {
5175 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5176 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5177 return false;
5178 }
5179
5180 return true;
5181}
5182
5183VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5184 VkDevice device,
5185 VkCmdPool cmdPool,
5186 VkCmdPoolResetFlags flags)
5187{
5188 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5189
5190 PostResetCommandPool(device, cmdPool, flags, result);
5191
5192 return result;
5193}
5194
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005195bool PreCreateCommandBuffer(
5196 VkDevice device,
5197 const VkCmdBufferCreateInfo* pCreateInfo)
5198{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005199 if(pCreateInfo != nullptr)
5200 {
5201 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005202 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005203 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005204 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005205 return false;
5206 }
5207 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5208 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5209 {
5210 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005211 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005212 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005213 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005214 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005215
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005216 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005217}
5218
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005219bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005220 VkDevice device,
5221 VkCmdBuffer* pCmdBuffer,
5222 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005223{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005224
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005225 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005226 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005227 }
5228
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005229 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005230 {
5231 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005232 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5233 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005234 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005235
5236 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005237}
5238
5239VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
5240 VkDevice device,
5241 const VkCmdBufferCreateInfo* pCreateInfo,
5242 VkCmdBuffer* pCmdBuffer)
5243{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005244 PreCreateCommandBuffer(device, pCreateInfo);
5245
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005246 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
5247
5248 PostCreateCommandBuffer(device, pCmdBuffer, result);
5249
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005250 return result;
5251}
5252
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005253bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005254 VkCmdBuffer cmdBuffer,
5255 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005256{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005257 if(pBeginInfo != nullptr)
5258 {
5259 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005260 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005261 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005262 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005263 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005264 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005265 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005266
5267 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005268}
5269
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005270bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005271 VkCmdBuffer cmdBuffer,
5272 VkResult result)
5273{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005274
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005275 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005276 {
5277 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005278 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5279 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005280 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005281
5282 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005283}
5284
5285VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5286 VkCmdBuffer cmdBuffer,
5287 const VkCmdBufferBeginInfo* pBeginInfo)
5288{
5289 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005290
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005291 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5292
5293 PostBeginCommandBuffer(cmdBuffer, result);
5294
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005295 return result;
5296}
5297
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005298bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005299 VkCmdBuffer cmdBuffer,
5300 VkResult result)
5301{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005302
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005303 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005304 {
5305 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005306 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5307 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005308 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005309
5310 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005311}
5312
5313VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5314 VkCmdBuffer cmdBuffer)
5315{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005316 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5317
5318 PostEndCommandBuffer(cmdBuffer, result);
5319
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005320 return result;
5321}
5322
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005323bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005324 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005325 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005326 VkResult result)
5327{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005328
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005329
5330 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005331 {
5332 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005333 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5334 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005335 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005336
5337 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005338}
5339
5340VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005341 VkCmdBuffer cmdBuffer,
5342 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005343{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005344 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005345
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005346 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005347
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005348 return result;
5349}
5350
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005351bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005352 VkCmdBuffer cmdBuffer,
5353 VkPipelineBindPoint pipelineBindPoint,
5354 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005355{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005356
5357 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5358 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5359 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005360 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005361 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005362 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005363 }
5364
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005365
5366 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005367}
5368
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005369VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5370 VkCmdBuffer cmdBuffer,
5371 VkPipelineBindPoint pipelineBindPoint,
5372 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005373{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005374 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5375
5376 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5377}
5378
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005379VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005380{
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005381 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5382}
5383
5384VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5385{
5386 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005387}
5388
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005389VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005390{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005391 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005392}
5393
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005394VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005395{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005396 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005397}
5398
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005399VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005400{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005401 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northropf5bd2252015-08-17 11:10:49 -06005402}
5403
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005404VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005405{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005406 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005407}
5408
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005409VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005410{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005411 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005412}
5413
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005414VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005415{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005416 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005417}
5418
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005419VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005420{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005421 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005422}
5423
5424bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005425 VkCmdBuffer cmdBuffer,
5426 const VkDescriptorSet* pDescriptorSets,
5427 const uint32_t* pDynamicOffsets)
5428{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005429 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005430 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005431 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005432
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005433 if(pDynamicOffsets != nullptr)
5434 {
5435 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005436
5437 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005438}
5439
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005440bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005441 VkCmdBuffer cmdBuffer,
5442 VkPipelineBindPoint pipelineBindPoint,
5443 VkPipelineLayout layout,
5444 uint32_t firstSet,
5445 uint32_t setCount,
5446 uint32_t dynamicOffsetCount)
5447{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005448
5449 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5450 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5451 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005452 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005453 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005454 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005455 }
5456
5457
5458
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005459
5460
5461 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005462}
5463
5464VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5465 VkCmdBuffer cmdBuffer,
5466 VkPipelineBindPoint pipelineBindPoint,
5467 VkPipelineLayout layout,
5468 uint32_t firstSet,
5469 uint32_t setCount,
5470 const VkDescriptorSet* pDescriptorSets,
5471 uint32_t dynamicOffsetCount,
5472 const uint32_t* pDynamicOffsets)
5473{
5474 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005475
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005476 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5477
5478 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5479}
5480
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005481bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005482 VkCmdBuffer cmdBuffer,
5483 VkBuffer buffer,
5484 VkDeviceSize offset,
5485 VkIndexType indexType)
5486{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005487
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005488
5489
5490 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5491 indexType > VK_INDEX_TYPE_END_RANGE)
5492 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005493 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005494 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005495 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005496 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005497
5498 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005499}
5500
5501VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5502 VkCmdBuffer cmdBuffer,
5503 VkBuffer buffer,
5504 VkDeviceSize offset,
5505 VkIndexType indexType)
5506{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005507 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5508
5509 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5510}
5511
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005512bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005513 VkCmdBuffer cmdBuffer,
5514 const VkBuffer* pBuffers,
5515 const VkDeviceSize* pOffsets)
5516{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005517 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005518 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519 }
5520
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005521 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005522 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005523 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005524
5525 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005526}
5527
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005528bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529 VkCmdBuffer cmdBuffer,
5530 uint32_t startBinding,
5531 uint32_t bindingCount)
5532{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005533
5534
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005535
5536 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005537}
5538
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06005539VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005540 VkCmdBuffer cmdBuffer,
5541 uint32_t startBinding,
5542 uint32_t bindingCount,
5543 const VkBuffer* pBuffers,
5544 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005545{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005546 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005547
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005548 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5549
5550 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005551}
5552
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005553bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005554 VkCmdBuffer cmdBuffer,
5555 uint32_t firstVertex,
5556 uint32_t vertexCount,
5557 uint32_t firstInstance,
5558 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005559{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005560
5561
5562
5563
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005564
5565 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005566}
5567
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005568VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5569 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005570 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005571 uint32_t instanceCount,
5572 uint32_t firstVertex,
5573 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005574{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005575 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005576
5577 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005578}
5579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005580bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005581 VkCmdBuffer cmdBuffer,
5582 uint32_t firstIndex,
5583 uint32_t indexCount,
5584 int32_t vertexOffset,
5585 uint32_t firstInstance,
5586 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005587{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005588
5589
5590
5591
5592
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005593
5594 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005595}
5596
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005597VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5598 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005599 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005600 uint32_t instanceCount,
5601 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005602 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005603 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005604{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005605 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005606
5607 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5608}
5609
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005610bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005611 VkCmdBuffer cmdBuffer,
5612 VkBuffer buffer,
5613 VkDeviceSize offset,
5614 uint32_t count,
5615 uint32_t stride)
5616{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005617
5618
5619
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005620
5621
5622 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005623}
5624
5625VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5626 VkCmdBuffer cmdBuffer,
5627 VkBuffer buffer,
5628 VkDeviceSize offset,
5629 uint32_t count,
5630 uint32_t stride)
5631{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005632 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5633
5634 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5635}
5636
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005637bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005638 VkCmdBuffer cmdBuffer,
5639 VkBuffer buffer,
5640 VkDeviceSize offset,
5641 uint32_t count,
5642 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005643{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005644
5645
5646
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005647
5648
5649 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005650}
5651
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005652VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5653 VkCmdBuffer cmdBuffer,
5654 VkBuffer buffer,
5655 VkDeviceSize offset,
5656 uint32_t count,
5657 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005658{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005659 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5660
5661 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5662}
5663
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005664bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005665 VkCmdBuffer cmdBuffer,
5666 uint32_t x,
5667 uint32_t y,
5668 uint32_t z)
5669{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005670
5671
5672
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005673
5674 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005675}
5676
5677VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5678 VkCmdBuffer cmdBuffer,
5679 uint32_t x,
5680 uint32_t y,
5681 uint32_t z)
5682{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005683 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5684
5685 PostCmdDispatch(cmdBuffer, x, y, z);
5686}
5687
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005688bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005689 VkCmdBuffer cmdBuffer,
5690 VkBuffer buffer,
5691 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005692{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005693
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005694
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005695
5696 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005697}
5698
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005699VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5700 VkCmdBuffer cmdBuffer,
5701 VkBuffer buffer,
5702 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005703{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005704 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5705
5706 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005707}
5708
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005709bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005710 VkCmdBuffer cmdBuffer,
5711 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005712{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005713 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005714 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005715 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005716
5717 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005718}
5719
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005720bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005721 VkCmdBuffer cmdBuffer,
5722 VkBuffer srcBuffer,
5723 VkBuffer destBuffer,
5724 uint32_t regionCount)
5725{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005726
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005727
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005728
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005729
5730 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005731}
5732
5733VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5734 VkCmdBuffer cmdBuffer,
5735 VkBuffer srcBuffer,
5736 VkBuffer destBuffer,
5737 uint32_t regionCount,
5738 const VkBufferCopy* pRegions)
5739{
5740 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005741
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005742 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5743
5744 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5745}
5746
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005747bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005748 VkCmdBuffer cmdBuffer,
5749 const VkImageCopy* pRegions)
5750{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005751 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005752 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005753 if ((pRegions->srcSubresource.aspect &
5754 (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 -06005755 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005756 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005757 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005758 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005759 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005760 if ((pRegions->destSubresource.aspect &
5761 (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 -06005762 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005763 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005764 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005765 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005766 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005767 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005768
5769 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005770}
5771
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005772bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005773 VkCmdBuffer cmdBuffer,
5774 VkImage srcImage,
5775 VkImageLayout srcImageLayout,
5776 VkImage destImage,
5777 VkImageLayout destImageLayout,
5778 uint32_t regionCount)
5779{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005780
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005781
5782 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5783 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5784 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005785 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005786 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005787 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005788 }
5789
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005790
5791 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5792 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5793 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005794 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005795 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005796 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005797 }
5798
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005799
5800 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005801}
5802
5803VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5804 VkCmdBuffer cmdBuffer,
5805 VkImage srcImage,
5806 VkImageLayout srcImageLayout,
5807 VkImage destImage,
5808 VkImageLayout destImageLayout,
5809 uint32_t regionCount,
5810 const VkImageCopy* pRegions)
5811{
5812 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005813
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005814 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5815
5816 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5817}
5818
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005819bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005820 VkCmdBuffer cmdBuffer,
5821 const VkImageBlit* pRegions)
5822{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005823 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005824 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005825 if ((pRegions->srcSubresource.aspect &
5826 (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 -06005827 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005828 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005829 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005830 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005831 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005832 if ((pRegions->destSubresource.aspect &
5833 (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 -06005834 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005835 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005836 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005837 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005838 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005839 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005840
5841 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005842}
5843
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005844bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005845 VkCmdBuffer cmdBuffer,
5846 VkImage srcImage,
5847 VkImageLayout srcImageLayout,
5848 VkImage destImage,
5849 VkImageLayout destImageLayout,
5850 uint32_t regionCount,
5851 VkTexFilter filter)
5852{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005853
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005854
5855 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5856 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5857 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005858 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005859 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005860 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005861 }
5862
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005863
5864 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5865 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5866 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005867 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005868 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005869 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005870 }
5871
5872
5873 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
5874 filter > VK_TEX_FILTER_END_RANGE)
5875 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005876 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005877 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005878 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005879 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005880
5881 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005882}
5883
5884VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
5885 VkCmdBuffer cmdBuffer,
5886 VkImage srcImage,
5887 VkImageLayout srcImageLayout,
5888 VkImage destImage,
5889 VkImageLayout destImageLayout,
5890 uint32_t regionCount,
5891 const VkImageBlit* pRegions,
5892 VkTexFilter filter)
5893{
5894 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005895
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005896 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
5897
5898 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
5899}
5900
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005901bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005902 VkCmdBuffer cmdBuffer,
5903 const VkBufferImageCopy* pRegions)
5904{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005905 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005906 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005907 if ((pRegions->imageSubresource.aspect &
5908 (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 -06005909 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005910 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005911 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005912 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005913 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005914 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005915
5916 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005917}
5918
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005919bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005920 VkCmdBuffer cmdBuffer,
5921 VkBuffer srcBuffer,
5922 VkImage destImage,
5923 VkImageLayout destImageLayout,
5924 uint32_t regionCount)
5925{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005926
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005927
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005928
5929 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5930 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5931 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005932 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005933 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005934 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005935 }
5936
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005937
5938 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005939}
5940
5941VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
5942 VkCmdBuffer cmdBuffer,
5943 VkBuffer srcBuffer,
5944 VkImage destImage,
5945 VkImageLayout destImageLayout,
5946 uint32_t regionCount,
5947 const VkBufferImageCopy* pRegions)
5948{
5949 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005950
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005951 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
5952
5953 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
5954}
5955
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005956bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005957 VkCmdBuffer cmdBuffer,
5958 const VkBufferImageCopy* pRegions)
5959{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005960 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005961 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005962 if ((pRegions->imageSubresource.aspect &
5963 (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 -06005964 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005965 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005966 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005967 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005968 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005969 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005970
5971 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005972}
5973
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005974bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005975 VkCmdBuffer cmdBuffer,
5976 VkImage srcImage,
5977 VkImageLayout srcImageLayout,
5978 VkBuffer destBuffer,
5979 uint32_t regionCount)
5980{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005981
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005982
5983 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5984 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5985 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005986 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005987 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005988 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005989 }
5990
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005991
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005992
5993 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005994}
5995
5996VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
5997 VkCmdBuffer cmdBuffer,
5998 VkImage srcImage,
5999 VkImageLayout srcImageLayout,
6000 VkBuffer destBuffer,
6001 uint32_t regionCount,
6002 const VkBufferImageCopy* pRegions)
6003{
6004 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006005
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006006 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
6007
6008 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
6009}
6010
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006011bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006012 VkCmdBuffer cmdBuffer,
6013 const uint32_t* pData)
6014{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006015 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006016 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006017 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006018
6019 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006020}
6021
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006022bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006023 VkCmdBuffer cmdBuffer,
6024 VkBuffer destBuffer,
6025 VkDeviceSize destOffset,
6026 VkDeviceSize dataSize)
6027{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006028
6029
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006030
6031
6032 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006033}
6034
6035VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6036 VkCmdBuffer cmdBuffer,
6037 VkBuffer destBuffer,
6038 VkDeviceSize destOffset,
6039 VkDeviceSize dataSize,
6040 const uint32_t* pData)
6041{
6042 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006043
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006044 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6045
6046 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6047}
6048
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006049bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006050 VkCmdBuffer cmdBuffer,
6051 VkBuffer destBuffer,
6052 VkDeviceSize destOffset,
6053 VkDeviceSize fillSize,
6054 uint32_t data)
6055{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006056
6057
6058
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006059
6060
6061 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006062}
6063
6064VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6065 VkCmdBuffer cmdBuffer,
6066 VkBuffer destBuffer,
6067 VkDeviceSize destOffset,
6068 VkDeviceSize fillSize,
6069 uint32_t data)
6070{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006071 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6072
6073 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6074}
6075
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006076bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006077 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12006078 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006079 const VkImageSubresourceRange* pRanges)
6080{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006081 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006082 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006083 }
6084
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006085 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006086 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006087 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006088 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006089
6090 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006091}
6092
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006093bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006094 VkCmdBuffer cmdBuffer,
6095 VkImage image,
6096 VkImageLayout imageLayout,
6097 uint32_t rangeCount)
6098{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006099
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006100
6101 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6102 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6103 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006104 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006105 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006106 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006107 }
6108
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006109
6110 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006111}
6112
6113VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6114 VkCmdBuffer cmdBuffer,
6115 VkImage image,
6116 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12006117 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006118 uint32_t rangeCount,
6119 const VkImageSubresourceRange* pRanges)
6120{
6121 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006122
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006123 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6124
6125 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6126}
6127
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006128bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006129 VkCmdBuffer cmdBuffer,
6130 const VkImageSubresourceRange* pRanges)
6131{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006132 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006133 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006134 /*
6135 * TODO: How do we validation pRanges->aspectMask?
6136 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6137 * VK_IMAGE_ASPECT_STENCIL_BIT.
6138 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006139 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006140
6141 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006142}
6143
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006144bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006145 VkCmdBuffer cmdBuffer,
6146 VkImage image,
6147 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006148 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006149 uint32_t rangeCount)
6150{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006151
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006152
6153 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6154 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6155 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006156 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006157 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006158 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006159 }
6160
6161
6162
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006163
6164 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006165}
6166
Chris Forbes2951d7d2015-06-22 17:21:59 +12006167VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006168 VkCmdBuffer cmdBuffer,
6169 VkImage image,
6170 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006171 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006172 uint32_t rangeCount,
6173 const VkImageSubresourceRange* pRanges)
6174{
Chris Forbes2951d7d2015-06-22 17:21:59 +12006175 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006176
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006177 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006178
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006179 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006180}
6181
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006182bool PreCmdClearAttachments(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006183 VkCmdBuffer cmdBuffer,
6184 const VkClearColorValue* pColor,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06006185 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006186{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006187 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006188 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006189 }
6190
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006191 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006192 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006193 }
6194
6195 return true;
6196}
6197
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006198VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6199 VkCmdBuffer cmdBuffer,
6200 uint32_t attachmentCount,
6201 const VkClearAttachment* pAttachments,
6202 uint32_t rectCount,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06006203 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006204{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006205 for (uint32_t i = 0; i < attachmentCount; i++) {
6206 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006207 }
6208
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006209 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006210}
6211
6212bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006213 VkCmdBuffer cmdBuffer,
6214 const VkImageResolve* pRegions)
6215{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006216 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006217 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006218 if ((pRegions->srcSubresource.aspect &
6219 (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 -06006220 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006221 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006222 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006223 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006224 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006225 if ((pRegions->destSubresource.aspect &
6226 (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 -06006227 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006228 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006229 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006230 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006231 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006232 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006233
6234 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006235}
6236
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006237bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006238 VkCmdBuffer cmdBuffer,
6239 VkImage srcImage,
6240 VkImageLayout srcImageLayout,
6241 VkImage destImage,
6242 VkImageLayout destImageLayout,
6243 uint32_t regionCount)
6244{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006245
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006246
6247 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6248 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6249 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006250 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006251 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006252 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006253 }
6254
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006255
6256 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6257 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6258 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006259 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006260 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006261 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006262 }
6263
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006264
6265 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006266}
6267
6268VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6269 VkCmdBuffer cmdBuffer,
6270 VkImage srcImage,
6271 VkImageLayout srcImageLayout,
6272 VkImage destImage,
6273 VkImageLayout destImageLayout,
6274 uint32_t regionCount,
6275 const VkImageResolve* pRegions)
6276{
6277 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006278
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006279 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6280
6281 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6282}
6283
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006284bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006285 VkCmdBuffer cmdBuffer,
6286 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006287 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006288{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006289
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006290
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006291
6292 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006293}
6294
6295VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6296 VkCmdBuffer cmdBuffer,
6297 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006298 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006299{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006300 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006301
Tony Barbourc2e987e2015-06-29 16:20:35 -06006302 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006303}
6304
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006305bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006306 VkCmdBuffer cmdBuffer,
6307 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006308 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006309{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006310
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006311
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006312
6313 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006314}
6315
6316VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6317 VkCmdBuffer cmdBuffer,
6318 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006319 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006320{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006321 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006322
Tony Barbourc2e987e2015-06-29 16:20:35 -06006323 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006324}
6325
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006326bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006327 VkCmdBuffer cmdBuffer,
6328 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006329 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006330{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006331 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006332 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006333 }
6334
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006335 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006336 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006337 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006338
6339 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006340}
6341
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006342bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006343 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006344 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006345 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006346 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006347 uint32_t memBarrierCount)
6348{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006349
Tony Barbourc2e987e2015-06-29 16:20:35 -06006350
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006351
6352
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006353
6354 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006355}
6356
6357VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6358 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006359 uint32_t eventCount,
6360 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006361 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006362 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006363 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006364 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006365{
6366 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006367
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006368 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006369
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006370 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006371}
6372
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006373bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006374 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006375 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006376{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006377 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006378 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006379 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006380
6381 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006382}
6383
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006384bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006385 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006386 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006387 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006388 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006389 uint32_t memBarrierCount)
6390{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006391
Tony Barbourc2e987e2015-06-29 16:20:35 -06006392
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006393
6394
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006395
6396 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006397}
6398
6399VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6400 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006401 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006402 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006403 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006404 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006405 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006406{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006407 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006408
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006409 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006410
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006411 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006412}
6413
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006414bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006415 VkCmdBuffer cmdBuffer,
6416 VkQueryPool queryPool,
6417 uint32_t slot,
6418 VkQueryControlFlags flags)
6419{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006420
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006421
6422
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006423
6424 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006425}
6426
6427VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6428 VkCmdBuffer cmdBuffer,
6429 VkQueryPool queryPool,
6430 uint32_t slot,
6431 VkQueryControlFlags flags)
6432{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006433 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6434
6435 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6436}
6437
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006438bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006439 VkCmdBuffer cmdBuffer,
6440 VkQueryPool queryPool,
6441 uint32_t slot)
6442{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006443
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006444
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006445
6446 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006447}
6448
6449VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6450 VkCmdBuffer cmdBuffer,
6451 VkQueryPool queryPool,
6452 uint32_t slot)
6453{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006454 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6455
6456 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6457}
6458
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006459bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006460 VkCmdBuffer cmdBuffer,
6461 VkQueryPool queryPool,
6462 uint32_t startQuery,
6463 uint32_t queryCount)
6464{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006465
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006466
6467
6468
6469 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006470}
6471
6472VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6473 VkCmdBuffer cmdBuffer,
6474 VkQueryPool queryPool,
6475 uint32_t startQuery,
6476 uint32_t queryCount)
6477{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006478 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6479
6480 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6481}
6482
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006483bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006484 VkCmdBuffer cmdBuffer,
6485 VkTimestampType timestampType,
6486 VkBuffer destBuffer,
6487 VkDeviceSize destOffset)
6488{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006489
6490 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6491 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6492 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006493 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006494 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006495 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006496 }
6497
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006498
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006499
6500 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006501}
6502
6503VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6504 VkCmdBuffer cmdBuffer,
6505 VkTimestampType timestampType,
6506 VkBuffer destBuffer,
6507 VkDeviceSize destOffset)
6508{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006509 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6510
6511 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6512}
6513
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006514bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006515 VkCmdBuffer cmdBuffer,
6516 VkQueryPool queryPool,
6517 uint32_t startQuery,
6518 uint32_t queryCount,
6519 VkBuffer destBuffer,
6520 VkDeviceSize destOffset,
6521 VkDeviceSize destStride,
6522 VkQueryResultFlags flags)
6523{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006524
6525
6526
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006527
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006528
6529
6530
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006531
6532 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006533}
6534
Jeremy Hayescf469132015-04-17 10:36:53 -06006535VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006536 VkCmdBuffer cmdBuffer,
6537 VkQueryPool queryPool,
6538 uint32_t startQuery,
6539 uint32_t queryCount,
6540 VkBuffer destBuffer,
6541 VkDeviceSize destOffset,
6542 VkDeviceSize destStride,
6543 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006544{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006545 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
6546
6547 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006548}
6549
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006550bool PreCmdPushConstants(
6551 VkCmdBuffer cmdBuffer,
6552 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006553{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006554 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006555 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006556 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006557
6558 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006559}
6560
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006561bool PostCmdPushConstants(
6562 VkCmdBuffer cmdBuffer,
6563 VkPipelineLayout layout,
6564 VkShaderStageFlags stageFlags,
6565 uint32_t start,
6566 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006567{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006568
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006569
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006570
6571
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006572
6573 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006574}
6575
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006576VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6577 VkCmdBuffer cmdBuffer,
6578 VkPipelineLayout layout,
6579 VkShaderStageFlags stageFlags,
6580 uint32_t start,
6581 uint32_t length,
6582 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006583{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006584 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006585
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006586 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006587
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006588 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006589}
6590
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006591bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006592 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006593 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006594{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006595 if(pRenderPassBegin != nullptr)
6596 {
6597 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006598 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006599 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006600 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006601 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006602 }
Cody Northropc332eef2015-08-04 11:51:03 -06006603 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006604 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006605 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006606 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006607
6608 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006609}
6610
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006611bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006612 VkCmdBuffer cmdBuffer,
6613 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006614{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006615
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006616 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6617 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6618 {
6619 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6620 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6621 return false;
6622 }
6623
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006624 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006625}
6626
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006627VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6628 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006629 const VkRenderPassBeginInfo* pRenderPassBegin,
6630 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006631{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006632 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6633
Chia-I Wuc278df82015-07-07 11:50:03 +08006634 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006635
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006636 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006637}
6638
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006639bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08006640 VkCmdBuffer cmdBuffer,
6641 VkRenderPassContents contents)
6642{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006643
6644 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006645 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006646 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006647 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006648 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6649 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006650 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006651
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006652 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006653}
6654
6655VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6656 VkCmdBuffer cmdBuffer,
6657 VkRenderPassContents contents)
6658{
Chia-I Wuc278df82015-07-07 11:50:03 +08006659 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6660
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006661 PostCmdNextSubpass(cmdBuffer, contents);
6662}
6663
6664bool PostCmdEndRenderPass(
6665 VkCmdBuffer cmdBuffer)
6666{
6667
6668 return true;
6669}
6670
6671VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6672 VkCmdBuffer cmdBuffer)
6673{
6674 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6675
6676 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006677}
6678
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006679bool PreCmdExecuteCommands(
6680 VkCmdBuffer cmdBuffer,
6681 const VkCmdBuffer* pCmdBuffers)
6682{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006683 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006684 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006685 }
6686
6687 return true;
6688}
6689
6690bool PostCmdExecuteCommands(
6691 VkCmdBuffer cmdBuffer,
6692 uint32_t cmdBuffersCount)
6693{
6694
6695
6696 return true;
6697}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006698
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006699VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006700 VkCmdBuffer cmdBuffer,
6701 uint32_t cmdBuffersCount,
6702 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006703{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006704 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6705
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006706 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6707
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006708 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006709}
6710
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006711VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006712{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006713 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006714 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006715 }
6716
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006717 /* loader uses this to force layer initialization; device object is wrapped */
6718 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006719 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006720 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006721 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006722
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006723 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006724 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006725 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006726 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006727 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006728 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006730 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006731 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006732 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006733 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006734 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006735 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006736 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006737 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006738 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006739 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006740 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006741 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006742 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006743 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006744 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006745 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006746 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006747 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006748 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006749 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006750 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006751 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006752 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006753 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006754 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006755 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006756 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006757 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006758 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006759 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006760 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006761 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006762 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006763 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006764 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006765 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006766 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006767 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006768 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006769 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006770 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006771 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006772 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006773 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006774 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006775 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006776 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006777 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006778 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006779 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006780 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine6715e522015-09-15 14:59:14 -05006781 if (!strcmp(funcName, "vkCreateShaderModule"))
6782 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006783 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006784 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006785 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006786 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006787 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006788 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006789 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006790 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006791 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006792 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006793 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006794 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006795 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006796 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006797 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006798 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006799 if (!strcmp(funcName, "vkCmdSetViewport"))
6800 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006801 if (!strcmp(funcName, "vkCmdSetScissor"))
6802 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006803 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6804 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6805 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6806 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6807 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6808 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6809 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6810 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6811 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6812 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6813 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6814 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6815 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6816 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006817 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006818 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006819 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006820 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006821 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006822 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006823 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006824 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006825 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006826 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006827 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006828 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006829 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006830 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006831 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006832 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006833 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006834 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006835 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006836 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006837 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006838 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006839 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006840 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006841 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006842 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006843 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006844 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006845 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006846 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006847 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006848 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006849 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006850 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006851 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006852 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006853 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006854 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006855 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006856 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006857 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006858 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006859 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006860 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006861 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006862 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006863 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006864 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006865 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006866 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006867 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006868 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006869 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006870 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006871 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006872 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006873 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006874 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006875 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006876 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006877 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006878 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006879 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006880 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006881 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006882 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006883 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006884 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006885 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006886 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08006887 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006888 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006889
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006890 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006891 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006892 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006893 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006894 }
6895}
6896
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006897VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006898{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006899 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006900 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006901 }
6902
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006903 /* loader uses this to force layer initialization; instance object is wrapped */
6904 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006905 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006906 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006907 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006908
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006909 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006910 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006911 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006912 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006913 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006914 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006915 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006916 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006917 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006918 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06006919 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006920 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06006921 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6922 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6923 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6924 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6925 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6926 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6927 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6928 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006929
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006930 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006931 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006932 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006933 return fptr;
6934
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006935 {
6936 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6937 return NULL;
6938 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6939 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006940}