blob: 4b93577f65d5e66575ae76304613c037f21f5496 [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
Michael Lentine6715e522015-09-15 14:59:14 -05005 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
24 */
25
26#include <stdio.h>
27#include <stdlib.h>
28#include <string.h>
29
30#include <iostream>
31#include <string>
32#include <sstream>
Mark Lobodzinski3723c512015-05-26 10:58:40 -050033#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060034#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060035
Tobin Ehlis7a51d902015-07-03 10:34:49 -060036#include "vk_loader_platform.h"
Tobin Ehlis2d1d9702015-07-03 09:42:57 -060037#include "vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060038#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060039#include "vk_enum_validate_helper.h"
40#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060041
Tobin Ehlis56d204a2015-07-03 10:15:26 -060042#include "vk_layer_table.h"
43#include "vk_layer_data.h"
44#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060045#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060046
Cody Northrop73bb6572015-09-28 15:09:32 -060047struct layer_data {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060048 debug_report_data *report_data;
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060049 std::vector<VkDbgMsgCallback> logging_callback;
Cody Northrop73bb6572015-09-28 15:09:32 -060050
51 layer_data() :
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060052 report_data(nullptr)
Cody Northrop73bb6572015-09-28 15:09:32 -060053 {};
54};
Mark Lobodzinski3723c512015-05-26 10:58:40 -050055
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060056static std::unordered_map<void*, layer_data*> layer_data_map;
57static device_table_map pc_device_table_map;
58static instance_table_map pc_instance_table_map;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060059
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060060// "my instance data"
61debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060062{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060063 dispatch_key key = get_dispatch_key(object);
Tobin Ehlis8354e022015-09-01 11:46:36 -060064 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060065#if DISPATCH_MAP_DEBUG
66 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
67#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060068 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060069
70 return data->report_data;
71}
72
73// "my device data"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060074debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060075{
76 dispatch_key key = get_dispatch_key(object);
77 layer_data *data = get_my_data_ptr(key, layer_data_map);
78#if DISPATCH_MAP_DEBUG
79 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
80#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060081 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060082 return data->report_data;
83}
84
85static void InitParamChecker(layer_data *data)
86{
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060087 VkDbgMsgCallback callback;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060088 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
89
90 uint32_t debug_action = 0;
91 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
92 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
93 {
94 FILE *log_output = NULL;
95 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb4b6e7c2015-09-15 09:55:54 -060096 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060097 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void *) log_output, &callback);
98 data->logging_callback.push_back(callback);
99 }
100
101 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
102 layer_create_msg_callback(data->report_data, report_flags, win32_debug_output_msg, NULL, &callback);
103 data->logging_callback.push_back(callback);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600104 }
105}
106
107VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
108 VkInstance instance,
109 VkFlags msgFlags,
110 const PFN_vkDbgMsgCallback pfnMsgCallback,
111 void* pUserData,
112 VkDbgMsgCallback* pMsgCallback)
113{
114 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
115 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
116
117 if (result == VK_SUCCESS)
118 {
119 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
120 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
121 }
122
123 return result;
124}
125
126VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
127 VkInstance instance,
128 VkDbgMsgCallback msgCallback)
129{
130 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
131 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
132
133 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
134 layer_destroy_msg_callback(data->report_data, msgCallback);
135
136 return result;
137}
138
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600139static const VkLayerProperties pc_global_layers[] = {
140 {
141 "ParamChecker",
142 VK_API_VERSION,
143 VK_MAKE_VERSION(0, 1, 0),
144 "Validation layer: ParamChecker",
145 }
146};
Tony Barbour426b9052015-06-24 16:06:58 -0600147
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600148VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600149 const char *pLayerName,
150 uint32_t *pCount,
151 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600152{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600153 /* ParamChecker does not have any global extensions */
154 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600155}
156
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600157VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600158 uint32_t *pCount,
159 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600160{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600161 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
162 pc_global_layers,
163 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600164}
165
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600166VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600167 VkPhysicalDevice physicalDevice,
168 const char* pLayerName,
169 uint32_t* pCount,
170 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600171{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600172 /* ParamChecker does not have any physical device extensions */
173 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayescf469132015-04-17 10:36:53 -0600174}
175
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600176VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600177 VkPhysicalDevice physicalDevice,
178 uint32_t* pCount,
179 VkLayerProperties* pProperties)
180{
181 /* ParamChecker's physical device layers are the same as global */
182 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
183 pCount, pProperties);
184}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600185
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600186// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600187
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600188static
189std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600190{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600191 switch(enumerator)
192 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600193 case VK_RESULT_MAX_ENUM:
194 {
195 return "VK_RESULT_MAX_ENUM";
196 break;
197 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600198 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600199 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600200 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600201 break;
202 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600203 case VK_ERROR_INCOMPATIBLE_DRIVER:
204 {
205 return "VK_ERROR_INCOMPATIBLE_DRIVER";
206 break;
207 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600208 case VK_ERROR_MEMORY_MAP_FAILED:
209 {
210 return "VK_ERROR_MEMORY_MAP_FAILED";
211 break;
212 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600213 case VK_INCOMPLETE:
214 {
215 return "VK_INCOMPLETE";
216 break;
217 }
218 case VK_ERROR_OUT_OF_HOST_MEMORY:
219 {
220 return "VK_ERROR_OUT_OF_HOST_MEMORY";
221 break;
222 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600223 case VK_ERROR_INITIALIZATION_FAILED:
224 {
225 return "VK_ERROR_INITIALIZATION_FAILED";
226 break;
227 }
228 case VK_NOT_READY:
229 {
230 return "VK_NOT_READY";
231 break;
232 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600233 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
234 {
235 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
236 break;
237 }
238 case VK_EVENT_SET:
239 {
240 return "VK_EVENT_SET";
241 break;
242 }
243 case VK_TIMEOUT:
244 {
245 return "VK_TIMEOUT";
246 break;
247 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600248 case VK_EVENT_RESET:
249 {
250 return "VK_EVENT_RESET";
251 break;
252 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600253 case VK_SUCCESS:
254 {
255 return "VK_SUCCESS";
256 break;
257 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600258 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600259 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600260 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600261 break;
262 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600263 case VK_ERROR_DEVICE_LOST:
264 {
265 return "VK_ERROR_DEVICE_LOST";
266 break;
267 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600268 default:
269 {
270 return "unrecognized enumerator";
271 break;
272 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600273 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600274}
275
276static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600277bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
278{
Courtney Goeltzenleuchter75295792015-09-10 16:25:49 -0600279 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600280 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
281 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
282 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
283 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
284 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
285 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
286 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
287 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
288 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600289 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
290 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
291 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600292 if(enumerator & (~allFlags))
293 {
294 return false;
295 }
296
297 return true;
298}
299
300static
301std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
302{
303 if(!ValidateEnumerator(enumerator))
304 {
305 return "unrecognized enumerator";
306 }
307
308 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600309 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
310 {
311 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
312 }
313 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
314 {
315 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
316 }
317 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
318 {
319 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
320 }
321 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
322 {
323 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
324 }
325 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
326 {
327 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
328 }
329 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
330 {
331 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
332 }
333 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
334 {
335 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
336 }
337 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
338 {
339 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
340 }
341 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
342 {
343 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
344 }
345 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
346 {
347 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
348 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600349 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
350 {
351 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
352 }
353 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
354 {
355 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
356 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600357
358 std::string enumeratorString;
359 for(auto const& string : strings)
360 {
361 enumeratorString += string;
362
363 if(string != strings.back())
364 {
365 enumeratorString += '|';
366 }
367 }
368
369 return enumeratorString;
370}
371
372static
373bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
374{
375 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600376 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600377 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
378 VK_IMAGE_USAGE_STORAGE_BIT |
379 VK_IMAGE_USAGE_SAMPLED_BIT |
380 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
381 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600382 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600383 if(enumerator & (~allFlags))
384 {
385 return false;
386 }
387
388 return true;
389}
390
391static
392std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
393{
394 if(!ValidateEnumerator(enumerator))
395 {
396 return "unrecognized enumerator";
397 }
398
399 std::vector<std::string> strings;
400 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
401 {
402 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
403 }
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600404 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600405 {
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600406 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600407 }
408 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
409 {
410 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
411 }
412 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
413 {
414 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
415 }
416 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
417 {
418 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
419 }
420 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
421 {
422 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
423 }
424 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
425 {
426 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
427 }
428 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
429 {
430 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
431 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600432
433 std::string enumeratorString;
434 for(auto const& string : strings)
435 {
436 enumeratorString += string;
437
438 if(string != strings.back())
439 {
440 enumeratorString += '|';
441 }
442 }
443
444 return enumeratorString;
445}
446
447static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600448bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
449{
450 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
451 VK_QUEUE_DMA_BIT |
452 VK_QUEUE_COMPUTE_BIT |
453 VK_QUEUE_SPARSE_MEMMGR_BIT |
454 VK_QUEUE_GRAPHICS_BIT);
455 if(enumerator & (~allFlags))
456 {
457 return false;
458 }
459
460 return true;
461}
462
463static
464std::string EnumeratorString(VkQueueFlagBits const& enumerator)
465{
466 if(!ValidateEnumerator(enumerator))
467 {
468 return "unrecognized enumerator";
469 }
470
471 std::vector<std::string> strings;
472 if(enumerator & VK_QUEUE_EXTENDED_BIT)
473 {
474 strings.push_back("VK_QUEUE_EXTENDED_BIT");
475 }
476 if(enumerator & VK_QUEUE_DMA_BIT)
477 {
478 strings.push_back("VK_QUEUE_DMA_BIT");
479 }
480 if(enumerator & VK_QUEUE_COMPUTE_BIT)
481 {
482 strings.push_back("VK_QUEUE_COMPUTE_BIT");
483 }
484 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
485 {
486 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
487 }
488 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
489 {
490 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
491 }
492
493 std::string enumeratorString;
494 for(auto const& string : strings)
495 {
496 enumeratorString += string;
497
498 if(string != strings.back())
499 {
500 enumeratorString += '|';
501 }
502 }
503
504 return enumeratorString;
505}
506
507static
508bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
509{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600510 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600511 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
512 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
513 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
514 VK_MEMORY_PROPERTY_DEVICE_ONLY);
515 if(enumerator & (~allFlags))
516 {
517 return false;
518 }
519
520 return true;
521}
522
523static
524std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
525{
526 if(!ValidateEnumerator(enumerator))
527 {
528 return "unrecognized enumerator";
529 }
530
531 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600532 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
533 {
534 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
535 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600536 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
537 {
538 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
539 }
540 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
541 {
542 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
543 }
544 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
545 {
546 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
547 }
548 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
549 {
550 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
551 }
552
553 std::string enumeratorString;
554 for(auto const& string : strings)
555 {
556 enumeratorString += string;
557
558 if(string != strings.back())
559 {
560 enumeratorString += '|';
561 }
562 }
563
564 return enumeratorString;
565}
566
567static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600568bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600569{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600570 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600571 if(enumerator & (~allFlags))
572 {
573 return false;
574 }
575
576 return true;
577}
578
579static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600580std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600581{
582 if(!ValidateEnumerator(enumerator))
583 {
584 return "unrecognized enumerator";
585 }
586
587 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600588 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600589 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600590 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600591 }
592
593 std::string enumeratorString;
594 for(auto const& string : strings)
595 {
596 enumeratorString += string;
597
598 if(string != strings.back())
599 {
600 enumeratorString += '|';
601 }
602 }
603
604 return enumeratorString;
605}
606
607static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600608bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
609{
610 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
611 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
612 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
613 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600614 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600615 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600616 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600617
618 return true;
619}
620
621static
622std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
623{
624 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600625 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600626 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600627 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600628
629 std::vector<std::string> strings;
630 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600631 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600632 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600633 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600634 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600635 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600636 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600637 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600638 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600639 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600640 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600641 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600642
643 std::string enumeratorString;
644 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600645 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600646 enumeratorString += string;
647
648 if(string != strings.back())
649 {
650 enumeratorString += '|';
651 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600652 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600653
654 return enumeratorString;
655}
656
657static
658bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
659{
660 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
661 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600662 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600663 return false;
664 }
665
666 return true;
667}
668
669static
670std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
671{
672 if(!ValidateEnumerator(enumerator))
673 {
674 return "unrecognized enumerator";
675 }
676
677 std::vector<std::string> strings;
678 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
679 {
680 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
681 }
682
683 std::string enumeratorString;
684 for(auto const& string : strings)
685 {
686 enumeratorString += string;
687
688 if(string != strings.back())
689 {
690 enumeratorString += '|';
691 }
692 }
693
694 return enumeratorString;
695}
696
697static
698bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
699{
700 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
701 if(enumerator & (~allFlags))
702 {
703 return false;
704 }
705
706 return true;
707}
708
709static
710std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
711{
712 if(!ValidateEnumerator(enumerator))
713 {
714 return "unrecognized enumerator";
715 }
716
717 std::vector<std::string> strings;
718 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
719 {
720 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
721 }
722
723 std::string enumeratorString;
724 for(auto const& string : strings)
725 {
726 enumeratorString += string;
727
728 if(string != strings.back())
729 {
730 enumeratorString += '|';
731 }
732 }
733
734 return enumeratorString;
735}
736
737static
738bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
739{
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600740 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
741 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
742 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
743 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
749 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600751 if(enumerator & (~allFlags))
752 {
753 return false;
754 }
755
756 return true;
757}
758
759static
760std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
761{
762 if(!ValidateEnumerator(enumerator))
763 {
764 return "unrecognized enumerator";
765 }
766
767 std::vector<std::string> strings;
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600768 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600769 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600770 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600771 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600772 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600773 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600774 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600775 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600776 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600777 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600778 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600779 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600780 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600781 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600782 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600783 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600784 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600785 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600786 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600787 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600788 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600789 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600790 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600791 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600792 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600793 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600794 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600795 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600797 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600799 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600801 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600803 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600805 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600806 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600807 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600808 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600809 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600810 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600811 }
812
813 std::string enumeratorString;
814 for(auto const& string : strings)
815 {
816 enumeratorString += string;
817
818 if(string != strings.back())
819 {
820 enumeratorString += '|';
821 }
822 }
823
824 return enumeratorString;
825}
826
827static
828bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
829{
830 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
831 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
832 VK_QUERY_RESULT_WAIT_BIT |
833 VK_QUERY_RESULT_64_BIT |
834 VK_QUERY_RESULT_DEFAULT);
835 if(enumerator & (~allFlags))
836 {
837 return false;
838 }
839
840 return true;
841}
842
843static
844std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
845{
846 if(!ValidateEnumerator(enumerator))
847 {
848 return "unrecognized enumerator";
849 }
850
851 std::vector<std::string> strings;
852 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
853 {
854 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
855 }
856 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
857 {
858 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
859 }
860 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
861 {
862 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
863 }
864 if(enumerator & VK_QUERY_RESULT_64_BIT)
865 {
866 strings.push_back("VK_QUERY_RESULT_64_BIT");
867 }
868 if(enumerator & VK_QUERY_RESULT_DEFAULT)
869 {
870 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600871 }
872
873 std::string enumeratorString;
874 for(auto const& string : strings)
875 {
876 enumeratorString += string;
877
878 if(string != strings.back())
879 {
880 enumeratorString += '|';
881 }
882 }
883
884 return enumeratorString;
885}
886
887static
888bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
889{
890 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
891 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
892 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
893 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
894 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
895 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
896 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
897 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600898 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600899 if(enumerator & (~allFlags))
900 {
901 return false;
902 }
903
904 return true;
905}
906
907static
908std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
909{
910 if(!ValidateEnumerator(enumerator))
911 {
912 return "unrecognized enumerator";
913 }
914
915 std::vector<std::string> strings;
916 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
917 {
918 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
919 }
920 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
921 {
922 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
923 }
924 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
925 {
926 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
927 }
928 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
929 {
930 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
931 }
932 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
933 {
934 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
935 }
936 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
937 {
938 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
939 }
940 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
941 {
942 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
943 }
944 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
947 }
948 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
949 {
950 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
951 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600952
953 std::string enumeratorString;
954 for(auto const& string : strings)
955 {
956 enumeratorString += string;
957
958 if(string != strings.back())
959 {
960 enumeratorString += '|';
961 }
962 }
963
964 return enumeratorString;
965}
966
967static
968bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
969{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600970 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
971 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600972 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600973 if(enumerator & (~allFlags))
974 {
975 return false;
976 }
977
978 return true;
979}
980
981static
982std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
983{
984 if(!ValidateEnumerator(enumerator))
985 {
986 return "unrecognized enumerator";
987 }
988
989 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600990 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
991 {
992 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
993 }
994 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
995 {
996 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
997 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600998 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600999 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001000 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001001 }
1002
1003 std::string enumeratorString;
1004 for(auto const& string : strings)
1005 {
1006 enumeratorString += string;
1007
1008 if(string != strings.back())
1009 {
1010 enumeratorString += '|';
1011 }
1012 }
1013
1014 return enumeratorString;
1015}
1016
1017static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001018bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1019{
1020 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001021 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1022 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001023 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001024 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001025 if(enumerator & (~allFlags))
1026 {
1027 return false;
1028 }
1029
1030 return true;
1031}
1032
1033static
1034std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1035{
1036 if(!ValidateEnumerator(enumerator))
1037 {
1038 return "unrecognized enumerator";
1039 }
1040
1041 std::vector<std::string> strings;
1042 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1043 {
1044 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1045 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001046 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1047 {
1048 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1049 }
1050 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1051 {
1052 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1053 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001054 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1055 {
1056 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1057 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001058 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001059 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001060 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001061 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001062
1063 std::string enumeratorString;
1064 for(auto const& string : strings)
1065 {
1066 enumeratorString += string;
1067
1068 if(string != strings.back())
1069 {
1070 enumeratorString += '|';
1071 }
1072 }
1073
1074 return enumeratorString;
1075}
1076
1077static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001078bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001079{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001080 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1081 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001082 if(enumerator & (~allFlags))
1083 {
1084 return false;
1085 }
1086
1087 return true;
1088}
1089
1090static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001091std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001092{
1093 if(!ValidateEnumerator(enumerator))
1094 {
1095 return "unrecognized enumerator";
1096 }
1097
1098 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001099 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001100 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001101 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001102 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001103 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001104 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001105 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001106 }
1107
1108 std::string enumeratorString;
1109 for(auto const& string : strings)
1110 {
1111 enumeratorString += string;
1112
1113 if(string != strings.back())
1114 {
1115 enumeratorString += '|';
1116 }
1117 }
1118
1119 return enumeratorString;
1120}
1121
1122static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001123bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1124{
1125 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1126 VK_CHANNEL_B_BIT |
1127 VK_CHANNEL_G_BIT |
1128 VK_CHANNEL_R_BIT);
1129 if(enumerator & (~allFlags))
1130 {
1131 return false;
1132 }
1133
1134 return true;
1135}
1136
1137static
1138std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1139{
1140 if(!ValidateEnumerator(enumerator))
1141 {
1142 return "unrecognized enumerator";
1143 }
1144
1145 std::vector<std::string> strings;
1146 if(enumerator & VK_CHANNEL_A_BIT)
1147 {
1148 strings.push_back("VK_CHANNEL_A_BIT");
1149 }
1150 if(enumerator & VK_CHANNEL_B_BIT)
1151 {
1152 strings.push_back("VK_CHANNEL_B_BIT");
1153 }
1154 if(enumerator & VK_CHANNEL_G_BIT)
1155 {
1156 strings.push_back("VK_CHANNEL_G_BIT");
1157 }
1158 if(enumerator & VK_CHANNEL_R_BIT)
1159 {
1160 strings.push_back("VK_CHANNEL_R_BIT");
1161 }
1162
1163 std::string enumeratorString;
1164 for(auto const& string : strings)
1165 {
1166 enumeratorString += string;
1167
1168 if(string != strings.back())
1169 {
1170 enumeratorString += '|';
1171 }
1172 }
1173
1174 return enumeratorString;
1175}
1176
1177static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001178bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001179{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001180 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1181 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1182 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001183 if(enumerator & (~allFlags))
1184 {
1185 return false;
1186 }
1187
1188 return true;
1189}
1190
1191static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001192std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001193{
1194 if(!ValidateEnumerator(enumerator))
1195 {
1196 return "unrecognized enumerator";
1197 }
1198
1199 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001200 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001201 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001202 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1203 }
1204 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1205 {
1206 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1207 }
1208 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1209 {
1210 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001211 }
1212
1213 std::string enumeratorString;
1214 for(auto const& string : strings)
1215 {
1216 enumeratorString += string;
1217
1218 if(string != strings.back())
1219 {
1220 enumeratorString += '|';
1221 }
1222 }
1223
1224 return enumeratorString;
1225}
1226
1227static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001228bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001229{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001230 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1231 VK_SHADER_STAGE_FRAGMENT_BIT |
1232 VK_SHADER_STAGE_GEOMETRY_BIT |
1233 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001234 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1235 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001236 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001237 if(enumerator & (~allFlags))
1238 {
1239 return false;
1240 }
1241
1242 return true;
1243}
1244
1245static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001246std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001247{
1248 if(!ValidateEnumerator(enumerator))
1249 {
1250 return "unrecognized enumerator";
1251 }
1252
1253 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001254 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001255 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001256 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001257 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001258 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001259 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001260 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001261 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001262 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001263 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001264 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1265 }
1266 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1267 {
1268 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1269 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001270 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001271 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001272 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001273 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001274 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001275 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001276 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001277 }
1278 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1279 {
1280 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001281 }
1282
1283 std::string enumeratorString;
1284 for(auto const& string : strings)
1285 {
1286 enumeratorString += string;
1287
1288 if(string != strings.back())
1289 {
1290 enumeratorString += '|';
1291 }
1292 }
1293
1294 return enumeratorString;
1295}
1296
1297static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001298bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001299{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001300 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1301 VK_PIPELINE_STAGE_HOST_BIT |
1302 VK_PIPELINE_STAGE_TRANSFER_BIT |
1303 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1304 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1305 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001306 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001307 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001308 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1309 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1310 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001311 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001312 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1313 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1314 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1315 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001316 if(enumerator & (~allFlags))
1317 {
1318 return false;
1319 }
1320
1321 return true;
1322}
1323
1324static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001325std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001326{
1327 if(!ValidateEnumerator(enumerator))
1328 {
1329 return "unrecognized enumerator";
1330 }
1331
1332 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001333 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001334 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001335 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001336 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001337 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001338 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001339 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001340 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001341 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001342 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001343 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001344 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001345 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001346 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001347 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001348 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001349 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001350 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001351 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001352 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001353 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001354 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001355 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001356 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001357 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001358 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001359 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001360 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001361 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001362 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001363 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001364 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001365 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001366 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001367 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001368 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001369 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001370 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001371 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1372 }
1373 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1374 {
1375 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1376 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001377 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001378 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001379 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001380 }
1381 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1382 {
1383 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1384 }
1385 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1386 {
1387 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1388 }
1389 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1390 {
1391 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1392 }
1393 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1394 {
1395 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001396 }
1397
1398 std::string enumeratorString;
1399 for(auto const& string : strings)
1400 {
1401 enumeratorString += string;
1402
1403 if(string != strings.back())
1404 {
1405 enumeratorString += '|';
1406 }
1407 }
1408
1409 return enumeratorString;
1410}
1411
1412static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001413bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001414{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001415 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1416 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1417 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1418 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1419 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001420 if(enumerator & (~allFlags))
1421 {
1422 return false;
1423 }
1424
1425 return true;
1426}
1427
1428static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001429std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001430{
1431 if(!ValidateEnumerator(enumerator))
1432 {
1433 return "unrecognized enumerator";
1434 }
1435
1436 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001438 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001440 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001441 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001442 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001443 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001444 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001445 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001446 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1448 }
1449 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1450 {
1451 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1452 }
1453 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1454 {
1455 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001456 }
1457
1458 std::string enumeratorString;
1459 for(auto const& string : strings)
1460 {
1461 enumeratorString += string;
1462
1463 if(string != strings.back())
1464 {
1465 enumeratorString += '|';
1466 }
1467 }
1468
1469 return enumeratorString;
1470}
1471
1472static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001473bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001474{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001475 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1476 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1477 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1478 VK_MEMORY_INPUT_SHADER_READ_BIT |
1479 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1480 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1481 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1482 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1483 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1484 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001485 if(enumerator & (~allFlags))
1486 {
1487 return false;
1488 }
1489
1490 return true;
1491}
1492
1493static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001494std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001495{
1496 if(!ValidateEnumerator(enumerator))
1497 {
1498 return "unrecognized enumerator";
1499 }
1500
1501 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001502 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001503 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001504 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1505 }
1506 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1507 {
1508 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1509 }
1510 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1511 {
1512 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1513 }
1514 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1515 {
1516 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1517 }
1518 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1519 {
1520 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1521 }
1522 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1523 {
1524 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1525 }
1526 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1527 {
1528 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1529 }
1530 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1531 {
1532 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1533 }
1534 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1535 {
1536 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1537 }
1538 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1539 {
1540 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001541 }
1542
1543 std::string enumeratorString;
1544 for(auto const& string : strings)
1545 {
1546 enumeratorString += string;
1547
1548 if(string != strings.back())
1549 {
1550 enumeratorString += '|';
1551 }
1552 }
1553
1554 return enumeratorString;
1555}
1556
1557static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001558bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001559{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001560 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1561 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001562 if(enumerator & (~allFlags))
1563 {
1564 return false;
1565 }
1566
1567 return true;
1568}
1569
1570static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001571std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001572{
1573 if(!ValidateEnumerator(enumerator))
1574 {
1575 return "unrecognized enumerator";
1576 }
1577
1578 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001579 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001580 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001581 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001582 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001583 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001584 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001585 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001586 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001587
1588 std::string enumeratorString;
1589 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001590 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001591 enumeratorString += string;
1592
1593 if(string != strings.back())
1594 {
1595 enumeratorString += '|';
1596 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001597 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001598
1599 return enumeratorString;
1600}
1601
1602static
1603bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1604{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001605 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001606 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001607 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001608 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001609 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001610
1611 return true;
1612}
1613
1614static
1615std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1616{
1617 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001618 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001619 return "unrecognized enumerator";
1620 }
1621
1622 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001623 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001624 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001625 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001626 }
1627
1628 std::string enumeratorString;
1629 for(auto const& string : strings)
1630 {
1631 enumeratorString += string;
1632
1633 if(string != strings.back())
1634 {
1635 enumeratorString += '|';
1636 }
1637 }
1638
1639 return enumeratorString;
1640}
1641
1642static
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001643bool ValidateEnumerator(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001644{
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001645 VkCmdBufferUsageFlags allFlags = (VkCmdBufferUsageFlags)(VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1646 VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1647 VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001648 if(enumerator & (~allFlags))
1649 {
1650 return false;
1651 }
1652
1653 return true;
1654}
1655
1656static
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001657std::string EnumeratorString(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001658{
1659 if(!ValidateEnumerator(enumerator))
1660 {
1661 return "unrecognized enumerator";
1662 }
1663
1664 std::vector<std::string> strings;
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001665 if(enumerator & VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001666 {
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001667 strings.push_back("VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001668 }
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001669 if(enumerator & VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001670 {
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001671 strings.push_back("VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001672 }
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001673 if(enumerator & VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001674 {
Courtney Goeltzenleuchtera32436b2015-10-21 18:11:04 -06001675 strings.push_back("VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001676 }
1677
1678 std::string enumeratorString;
1679 for(auto const& string : strings)
1680 {
1681 enumeratorString += string;
1682
1683 if(string != strings.back())
1684 {
1685 enumeratorString += '|';
1686 }
1687 }
1688
1689 return enumeratorString;
1690}
1691
1692static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001693bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001694{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001695 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001696 if(enumerator & (~allFlags))
1697 {
1698 return false;
1699 }
1700
1701 return true;
1702}
1703
1704static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001705std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001706{
1707 if(!ValidateEnumerator(enumerator))
1708 {
1709 return "unrecognized enumerator";
1710 }
1711
1712 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001713 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001714 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001715 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001716 }
1717
1718 std::string enumeratorString;
1719 for(auto const& string : strings)
1720 {
1721 enumeratorString += string;
1722
1723 if(string != strings.back())
1724 {
1725 enumeratorString += '|';
1726 }
1727 }
1728
1729 return enumeratorString;
1730}
1731
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001732static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001733bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001734{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001735 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1736 VK_IMAGE_ASPECT_STENCIL_BIT |
1737 VK_IMAGE_ASPECT_DEPTH_BIT |
1738 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001739 if(enumerator & (~allFlags))
1740 {
1741 return false;
1742 }
1743
1744 return true;
1745}
1746
1747static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001748std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001749{
1750 if(!ValidateEnumerator(enumerator))
1751 {
1752 return "unrecognized enumerator";
1753 }
1754
1755 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001756 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001757 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001758 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1759 }
1760 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1761 {
1762 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1763 }
1764 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1765 {
1766 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1767 }
1768 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1769 {
1770 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1771 }
1772
1773 std::string enumeratorString;
1774 for(auto const& string : strings)
1775 {
1776 enumeratorString += string;
1777
1778 if(string != strings.back())
1779 {
1780 enumeratorString += '|';
1781 }
1782 }
1783
1784 return enumeratorString;
1785}
1786
1787static
1788bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1789{
1790 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1791 if(enumerator & (~allFlags))
1792 {
1793 return false;
1794 }
1795
1796 return true;
1797}
1798
1799static
1800std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1801{
1802 if(!ValidateEnumerator(enumerator))
1803 {
1804 return "unrecognized enumerator";
1805 }
1806
1807 std::vector<std::string> strings;
1808 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1809 {
1810 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001811 }
1812
1813 std::string enumeratorString;
1814 for(auto const& string : strings)
1815 {
1816 enumeratorString += string;
1817
1818 if(string != strings.back())
1819 {
1820 enumeratorString += '|';
1821 }
1822 }
1823
1824 return enumeratorString;
1825}
1826
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001827VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1828 const VkInstanceCreateInfo* pCreateInfo,
1829 VkInstance* pInstance)
1830{
1831 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1832 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1833
1834 if (result == VK_SUCCESS) {
1835 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1836 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001837 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001838
1839 InitParamChecker(data);
1840 }
1841
1842 return result;
1843}
1844
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001845VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001846 VkInstance instance)
1847{
1848 // Grab the key before the instance is destroyed.
1849 dispatch_key key = get_dispatch_key(instance);
1850 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001851 pTable->DestroyInstance(instance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001852
1853 // Clean up logging callback, if any
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001854 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1855 while (my_data->logging_callback.size() > 0) {
1856 VkDbgMsgCallback callback = my_data->logging_callback.back();
1857 layer_destroy_msg_callback(my_data->report_data, callback);
1858 my_data->logging_callback.pop_back();
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001859 }
1860
1861 layer_debug_report_destroy_instance(mid(instance));
1862 layer_data_map.erase(pTable);
1863
1864 pc_instance_table_map.erase(key);
1865 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001866}
1867
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001868bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001869 VkInstance instance,
1870 uint32_t* pPhysicalDeviceCount,
1871 VkPhysicalDevice* pPhysicalDevices,
1872 VkResult result)
1873{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001874
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001875 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001876 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001877 }
1878
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001879 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001880 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001881 }
1882
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001883 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001884 {
1885 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001886 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1887 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001888 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001889
1890 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001891}
1892
1893VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1894 VkInstance instance,
1895 uint32_t* pPhysicalDeviceCount,
1896 VkPhysicalDevice* pPhysicalDevices)
1897{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001898 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1899
1900 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1901
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001902 return result;
1903}
1904
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001905bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001906 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001907 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001908{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001909
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001910 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001911 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001912 }
1913
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001914 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001915}
1916
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001917VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001918 VkPhysicalDevice physicalDevice,
1919 VkPhysicalDeviceFeatures* pFeatures)
1920{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001921 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001922
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001923 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001924}
1925
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001926bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001927 VkPhysicalDevice physicalDevice,
1928 VkFormat format,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001929 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001930{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001931
1932 if(format < VK_FORMAT_BEGIN_RANGE ||
1933 format > VK_FORMAT_END_RANGE)
1934 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001935 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001936 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001937 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001938 }
1939
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001940 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001941 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001942 }
1943
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001944 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001945}
1946
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001947VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001948 VkPhysicalDevice physicalDevice,
1949 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001950 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001951{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001952 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001953
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001954 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001955}
1956
1957bool PostGetPhysicalDeviceImageFormatProperties(
1958 VkPhysicalDevice physicalDevice,
1959 VkFormat format,
1960 VkImageType type,
1961 VkImageTiling tiling,
1962 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001963 VkImageCreateFlags flags,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001964 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001965{
1966
1967 if(format < VK_FORMAT_BEGIN_RANGE ||
1968 format > VK_FORMAT_END_RANGE)
1969 {
1970 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1971 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1972 return false;
1973 }
1974
1975 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1976 type > VK_IMAGE_TYPE_END_RANGE)
1977 {
1978 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1979 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1980 return false;
1981 }
1982
1983 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1984 tiling > VK_IMAGE_TILING_END_RANGE)
1985 {
1986 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1987 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1988 return false;
1989 }
1990
1991
1992 if(pImageFormatProperties != nullptr)
1993 {
1994 }
1995
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001996 return true;
1997}
1998
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001999VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002000 VkPhysicalDevice physicalDevice,
2001 VkFormat format,
2002 VkImageType type,
2003 VkImageTiling tiling,
2004 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002005 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002006 VkImageFormatProperties* pImageFormatProperties)
2007{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002008 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002009
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002010 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002011}
2012
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002013bool PostGetPhysicalDeviceProperties(
2014 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002015 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002016{
2017
2018 if(pProperties != nullptr)
2019 {
2020 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2021 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2022 {
2023 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2024 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2025 return false;
2026 }
2027 }
2028
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002029 return true;
2030}
2031
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002032VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002033 VkPhysicalDevice physicalDevice,
2034 VkPhysicalDeviceProperties* pProperties)
2035{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002036 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002037
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002038 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002039}
2040
Cody Northropef72e2a2015-08-03 17:04:53 -06002041bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002042 VkPhysicalDevice physicalDevice,
2043 uint32_t* pCount,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002044 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002045{
2046
Cody Northropef72e2a2015-08-03 17:04:53 -06002047 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002048 {
2049 }
2050
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002051 if(pQueueProperties != nullptr)
2052 {
2053 }
2054
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002055 return true;
2056}
2057
Courtney Goeltzenleuchter8148af02015-10-27 11:19:02 -06002058VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002059 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002060 uint32_t* pCount,
2061 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002062{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002063 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002064
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002065 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002066}
2067
2068bool PostGetPhysicalDeviceMemoryProperties(
2069 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002070 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002071{
2072
2073 if(pMemoryProperties != nullptr)
2074 {
2075 }
2076
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002077 return true;
2078}
2079
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002080VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002081 VkPhysicalDevice physicalDevice,
2082 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2083{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002084 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002085
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002086 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002087}
2088
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002089VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2090 VkPhysicalDevice physicalDevice,
2091 const VkDeviceCreateInfo* pCreateInfo,
2092 VkDevice* pDevice)
2093{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002094 /*
2095 * NOTE: The loader fills in the ICD's device object in *pDevice.
2096 * Use that object to get the dispatch table.
2097 *
2098 * NOTE: We do not validate physicalDevice or any dispatchable
2099 * object as the first parameter. We couldn't get here if it was wrong!
2100 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002101 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002102 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2103 if(result == VK_SUCCESS)
2104 {
2105 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2106 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2107 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2108 }
2109
2110 return result;
2111}
2112
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002113VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002114 VkDevice device)
2115{
2116 layer_debug_report_destroy_device(device);
2117
2118 dispatch_key key = get_dispatch_key(device);
2119#if DISPATCH_MAP_DEBUG
2120 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2121#endif
2122
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002123 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002124 pc_device_table_map.erase(key);
2125 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002126}
2127
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002128bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002129 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002130 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002131 uint32_t queueIndex,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002132 VkQueue* pQueue)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002133{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002134
2135
2136
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002137 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002138 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002139 }
2140
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002141 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002142}
2143
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002144VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002145 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002146 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002147 uint32_t queueIndex,
2148 VkQueue* pQueue)
2149{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002150 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002151
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002152 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002153}
2154
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002155bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002156 VkQueue queue,
2157 const VkCmdBuffer* pCmdBuffers)
2158{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002159 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002160 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002161 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002162
2163 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002164}
2165
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002166bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002167 VkQueue queue,
2168 uint32_t cmdBufferCount,
2169 VkFence fence,
2170 VkResult result)
2171{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002172
2173
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002174
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002175 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002176 {
2177 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002178 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2179 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002180 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002181
2182 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002183}
2184
2185VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2186 VkQueue queue,
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002187 uint32_t submitCount,
2188 const VkSubmitInfo* pSubmitInfo,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002189 VkFence fence)
2190{
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002191 for (uint32_t i = 0; i < submitCount; i++) {
2192 PreQueueSubmit(queue, pSubmitInfo[i].pCommandBuffers);
2193 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002194
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002195 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmitInfo, fence);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002196
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002197 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002198
2199 return result;
2200}
2201
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002202bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002203 VkQueue queue,
2204 VkResult result)
2205{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002206
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002207 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002208 {
2209 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002210 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2211 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002212 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002213
2214 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002215}
2216
2217VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2218 VkQueue queue)
2219{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002220 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2221
2222 PostQueueWaitIdle(queue, result);
2223
2224 return result;
2225}
2226
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002227bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002228 VkDevice device,
2229 VkResult result)
2230{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002231
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002232 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002233 {
2234 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2236 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002237 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002238
2239 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002240}
2241
2242VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2243 VkDevice device)
2244{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002245 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2246
2247 PostDeviceWaitIdle(device, result);
2248
2249 return result;
2250}
2251
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002252bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002253 VkDevice device,
2254 const VkMemoryAllocInfo* pAllocInfo)
2255{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002256 if(pAllocInfo != nullptr)
2257 {
2258 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002259 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002260 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002261 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002262 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002263 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002264 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002265
2266 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002267}
2268
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002269bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002270 VkDevice device,
2271 VkDeviceMemory* pMem,
2272 VkResult result)
2273{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002274
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002275 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002276 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002277 }
2278
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002279 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002280 {
2281 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2283 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002284 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002285
2286 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002287}
2288
2289VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2290 VkDevice device,
2291 const VkMemoryAllocInfo* pAllocInfo,
2292 VkDeviceMemory* pMem)
2293{
2294 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002295
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002296 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2297
2298 PostAllocMemory(device, pMem, result);
2299
2300 return result;
2301}
2302
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002303bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002304 VkDevice device,
2305 VkDeviceMemory mem,
2306 VkDeviceSize offset,
2307 VkDeviceSize size,
2308 VkMemoryMapFlags flags,
2309 void** ppData,
2310 VkResult result)
2311{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002312
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002313
2314
2315
2316
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002317 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002318 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002319 }
2320
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002321 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002322 {
2323 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2325 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002326 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002327
2328 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002329}
2330
2331VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2332 VkDevice device,
2333 VkDeviceMemory mem,
2334 VkDeviceSize offset,
2335 VkDeviceSize size,
2336 VkMemoryMapFlags flags,
2337 void** ppData)
2338{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002339 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2340
2341 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2342
2343 return result;
2344}
2345
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002346bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002347 VkDevice device,
2348 const VkMappedMemoryRange* pMemRanges)
2349{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002350 if(pMemRanges != nullptr)
2351 {
2352 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002353 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002354 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002355 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002356 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002357 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002358 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002359
2360 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002361}
2362
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002363bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002364 VkDevice device,
2365 uint32_t memRangeCount,
2366 VkResult result)
2367{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002368
2369
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002370 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002371 {
2372 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002373 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2374 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002375 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002376
2377 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002378}
2379
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002380VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002381 VkDevice device,
2382 uint32_t memRangeCount,
2383 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002384{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002385 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002386
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002387 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002388
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002389 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2390
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002391 return result;
2392}
2393
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002394bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002395 VkDevice device,
2396 const VkMappedMemoryRange* pMemRanges)
2397{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002398 if(pMemRanges != nullptr)
2399 {
2400 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002401 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002402 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002403 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002404 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002405 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002406 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002407
2408 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002409}
2410
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002411bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002412 VkDevice device,
2413 uint32_t memRangeCount,
2414 VkResult result)
2415{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002416
2417
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002418 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002419 {
2420 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2422 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002423 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002424
2425 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002426}
2427
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002428VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002429 VkDevice device,
2430 uint32_t memRangeCount,
2431 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002432{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002433 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002434
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002435 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002436
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002437 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2438
Tony Barbour859ceab2015-04-16 19:23:13 -06002439 return result;
2440}
2441
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002442bool PostGetDeviceMemoryCommitment(
2443 VkDevice device,
2444 VkDeviceMemory memory,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002445 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002446{
2447
2448
2449 if(pCommittedMemoryInBytes != nullptr)
2450 {
2451 }
2452
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002453 return true;
2454}
2455
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002456VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002457 VkDevice device,
2458 VkDeviceMemory memory,
2459 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002460{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002461 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002462
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002463 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002464}
2465
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002466bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002467 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002468 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002469 VkDeviceMemory mem,
2470 VkDeviceSize memOffset,
2471 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002472{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002473
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002474
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002475
2476
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002477 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002478 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002479 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2480 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2481 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002482 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002483
2484 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002485}
2486
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002487VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002488 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002489 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002490 VkDeviceMemory mem,
2491 VkDeviceSize memOffset)
2492{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002493 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002494
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002495 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002496
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002497 return result;
2498}
2499
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002500bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002501 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002502 VkImage image,
2503 VkDeviceMemory mem,
2504 VkDeviceSize memOffset,
2505 VkResult result)
2506{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002507
2508
2509
2510
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002511 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002512 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002513 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2514 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2515 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002516 }
2517
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002518 return true;
2519}
2520
2521VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2522 VkDevice device,
2523 VkImage image,
2524 VkDeviceMemory mem,
2525 VkDeviceSize memOffset)
2526{
2527 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2528
2529 PostBindImageMemory(device, image, mem, memOffset, result);
2530
2531 return result;
2532}
2533
2534bool PostGetBufferMemoryRequirements(
2535 VkDevice device,
2536 VkBuffer buffer,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002537 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002538{
2539
2540
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002541 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002542 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002543 }
2544
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002545 return true;
2546}
2547
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002548VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002549 VkDevice device,
2550 VkBuffer buffer,
2551 VkMemoryRequirements* pMemoryRequirements)
2552{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002553 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002554
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002555 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002556}
2557
2558bool PostGetImageMemoryRequirements(
2559 VkDevice device,
2560 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002561 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002562{
2563
2564
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002565 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002566 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002567 }
2568
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002569 return true;
2570}
2571
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002572VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002573 VkDevice device,
2574 VkImage image,
2575 VkMemoryRequirements* pMemoryRequirements)
2576{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002577 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002578
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002579 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580}
2581
2582bool PostGetImageSparseMemoryRequirements(
2583 VkDevice device,
2584 VkImage image,
2585 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002586 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002587{
2588
2589
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002590 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002591 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002592 }
2593
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002594 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002595 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002596 if ((pSparseMemoryRequirements->formatProps.aspect &
2597 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002598 {
2599 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002600 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002601 return false;
2602 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002603 }
2604
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002605 return true;
2606}
2607
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002608VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002609 VkDevice device,
2610 VkImage image,
2611 uint32_t* pNumRequirements,
2612 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2613{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002614 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002615
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002616 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002617}
2618
2619bool PostGetPhysicalDeviceSparseImageFormatProperties(
2620 VkPhysicalDevice physicalDevice,
2621 VkFormat format,
2622 VkImageType type,
2623 uint32_t samples,
2624 VkImageUsageFlags usage,
2625 VkImageTiling tiling,
2626 uint32_t* pNumProperties,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002627 VkSparseImageFormatProperties* pProperties)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002628{
2629
2630 if(format < VK_FORMAT_BEGIN_RANGE ||
2631 format > VK_FORMAT_END_RANGE)
2632 {
2633 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002634 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002635 return false;
2636 }
2637
2638 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2639 type > VK_IMAGE_TYPE_END_RANGE)
2640 {
2641 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002642 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002643 return false;
2644 }
2645
2646
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002647
2648 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2649 tiling > VK_IMAGE_TILING_END_RANGE)
2650 {
2651 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002652 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002653 return false;
2654 }
2655
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002656 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002657 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002658 }
2659
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002660 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002661 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002662 if ((pProperties->aspect &
2663 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002664 {
2665 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002666 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002667 return false;
2668 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002669 }
2670
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002671 return true;
2672}
2673
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002674VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002675 VkPhysicalDevice physicalDevice,
2676 VkFormat format,
2677 VkImageType type,
2678 uint32_t samples,
2679 VkImageUsageFlags usage,
2680 VkImageTiling tiling,
2681 uint32_t* pNumProperties,
2682 VkSparseImageFormatProperties* pProperties)
2683{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002684 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002685
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002686 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002687}
2688
2689bool PreQueueBindSparseBufferMemory(
2690 VkQueue queue,
2691 const VkSparseMemoryBindInfo* pBindInfo)
2692{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002693 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002694 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002695 }
2696
2697 return true;
2698}
2699
2700bool PostQueueBindSparseBufferMemory(
2701 VkQueue queue,
2702 VkBuffer buffer,
2703 uint32_t numBindings,
2704 VkResult result)
2705{
2706
2707
2708
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002709 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002710 {
2711 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2712 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2713 return false;
2714 }
2715
2716 return true;
2717}
2718
2719VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2720 VkQueue queue,
2721 VkBuffer buffer,
2722 uint32_t numBindings,
2723 const VkSparseMemoryBindInfo* pBindInfo)
2724{
2725 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2726
2727 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2728
2729 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2730
2731 return result;
2732}
2733
2734bool PreQueueBindSparseImageOpaqueMemory(
2735 VkQueue queue,
2736 const VkSparseMemoryBindInfo* pBindInfo)
2737{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002738 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002739 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002740 }
2741
2742 return true;
2743}
2744
2745bool PostQueueBindSparseImageOpaqueMemory(
2746 VkQueue queue,
2747 VkImage image,
2748 uint32_t numBindings,
2749 VkResult result)
2750{
2751
2752
2753
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002754 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002755 {
2756 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2757 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2758 return false;
2759 }
2760
2761 return true;
2762}
2763
2764VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2765 VkQueue queue,
2766 VkImage image,
2767 uint32_t numBindings,
2768 const VkSparseMemoryBindInfo* pBindInfo)
2769{
2770 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2771
2772 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2773
2774 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2775
2776 return result;
2777}
2778
2779bool PreQueueBindSparseImageMemory(
2780 VkQueue queue,
2781 const VkSparseImageMemoryBindInfo* pBindInfo)
2782{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002783 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002784 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002785 if ((pBindInfo->subresource.aspect &
2786 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002787 {
2788 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002789 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002790 return false;
2791 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002792 }
2793
2794 return true;
2795}
2796
2797bool PostQueueBindSparseImageMemory(
2798 VkQueue queue,
2799 VkImage image,
2800 uint32_t numBindings,
2801 VkResult result)
2802{
2803
2804
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002805
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002806 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002807 {
2808 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002809 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2810 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002811 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002812
2813 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002814}
2815
2816VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002817 VkQueue queue,
2818 VkImage image,
2819 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002820 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002821{
2822 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002823
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002824 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002825
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002826 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002827
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002828 return result;
2829}
2830
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002831bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002832 VkDevice device,
2833 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002834{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002835 if(pCreateInfo != nullptr)
2836 {
2837 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002838 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002840 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002841 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002842 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002843 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002844
2845 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002846}
2847
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002848bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002849 VkDevice device,
2850 VkFence* pFence,
2851 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002852{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002853
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002854 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002855 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002856 }
2857
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002858 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002859 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002860 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2862 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002863 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002864
2865 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002866}
2867
2868VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2869 VkDevice device,
2870 const VkFenceCreateInfo* pCreateInfo,
2871 VkFence* pFence)
2872{
2873 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002874
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002875 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
2876
2877 PostCreateFence(device, pFence, result);
2878
2879 return result;
2880}
2881
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002882bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002883 VkDevice device,
2884 const VkFence* pFences)
2885{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002886 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002887 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002888 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002889
2890 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002891}
2892
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002893bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002894 VkDevice device,
2895 uint32_t fenceCount,
2896 VkResult result)
2897{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002898
2899
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002900 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002901 {
2902 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002903 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2904 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002905 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002906
2907 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002908}
2909
2910VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2911 VkDevice device,
2912 uint32_t fenceCount,
2913 const VkFence* pFences)
2914{
2915 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002916
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002917 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2918
2919 PostResetFences(device, fenceCount, result);
2920
2921 return result;
2922}
2923
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002924bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002925 VkDevice device,
2926 VkFence fence,
2927 VkResult result)
2928{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002929
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002930
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002931 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002932 {
2933 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2935 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002936 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002937
2938 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002939}
2940
2941VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2942 VkDevice device,
2943 VkFence fence)
2944{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002945 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2946
2947 PostGetFenceStatus(device, fence, result);
2948
2949 return result;
2950}
2951
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002952bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002953 VkDevice device,
2954 const VkFence* pFences)
2955{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002956 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002957 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002958 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002959
2960 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002961}
2962
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002963bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002964 VkDevice device,
2965 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002966 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002967 uint64_t timeout,
2968 VkResult result)
2969{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002970
2971
2972
2973
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002974 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002975 {
2976 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002977 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2978 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002979 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002980
2981 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002982}
2983
2984VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2985 VkDevice device,
2986 uint32_t fenceCount,
2987 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002988 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002989 uint64_t timeout)
2990{
2991 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002992
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002993 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2994
2995 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2996
2997 return result;
2998}
2999
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003000bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003001 VkDevice device,
3002 const VkSemaphoreCreateInfo* pCreateInfo)
3003{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003004 if(pCreateInfo != nullptr)
3005 {
3006 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003007 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003009 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003010 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003011 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003012 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003013
3014 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003015}
3016
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003017bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003018 VkDevice device,
3019 VkSemaphore* pSemaphore,
3020 VkResult result)
3021{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003022
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003023 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003024 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003025 }
3026
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003027 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003028 {
3029 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003030 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3031 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003032 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003033
3034 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003035}
3036
3037VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3038 VkDevice device,
3039 const VkSemaphoreCreateInfo* pCreateInfo,
3040 VkSemaphore* pSemaphore)
3041{
3042 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003043
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003044 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3045
3046 PostCreateSemaphore(device, pSemaphore, result);
3047
3048 return result;
3049}
3050
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003051bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003052 VkQueue queue,
3053 VkSemaphore semaphore,
3054 VkResult result)
3055{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003056
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003057
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003058 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003059 {
3060 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003061 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3062 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003063 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003064
3065 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003066}
3067
3068VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3069 VkQueue queue,
3070 VkSemaphore semaphore)
3071{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003072 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3073
3074 PostQueueSignalSemaphore(queue, semaphore, result);
3075
3076 return result;
3077}
3078
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003079bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003080 VkQueue queue,
3081 VkSemaphore semaphore,
3082 VkResult result)
3083{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003084
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003085
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003086 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003087 {
3088 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003089 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3090 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003091 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003092
3093 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003094}
3095
3096VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3097 VkQueue queue,
3098 VkSemaphore semaphore)
3099{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003100 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3101
3102 PostQueueWaitSemaphore(queue, semaphore, result);
3103
3104 return result;
3105}
3106
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003107bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003108 VkDevice device,
3109 const VkEventCreateInfo* pCreateInfo)
3110{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003111 if(pCreateInfo != nullptr)
3112 {
3113 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003114 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003116 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003117 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003118 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003119 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003120
3121 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003122}
3123
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003124bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003125 VkDevice device,
3126 VkEvent* pEvent,
3127 VkResult result)
3128{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003129
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003130 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003131 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003132 }
3133
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003134 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003135 {
3136 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3138 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003139 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003140
3141 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003142}
3143
3144VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3145 VkDevice device,
3146 const VkEventCreateInfo* pCreateInfo,
3147 VkEvent* pEvent)
3148{
3149 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003150
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003151 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3152
3153 PostCreateEvent(device, pEvent, result);
3154
3155 return result;
3156}
3157
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003158bool PostGetEventStatus(
3159 VkDevice device,
3160 VkEvent event,
3161 VkResult result)
3162{
3163
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003164
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003165 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003166 {
3167 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003168 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3169 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003170 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003171
3172 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003173}
3174
3175VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3176 VkDevice device,
3177 VkEvent event)
3178{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003179 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3180
3181 PostGetEventStatus(device, event, result);
3182
3183 return result;
3184}
3185
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003186bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003187 VkDevice device,
3188 VkEvent event,
3189 VkResult result)
3190{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003191
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003192
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003193 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003194 {
3195 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003196 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3197 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003198 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003199
3200 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003201}
3202
3203VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3204 VkDevice device,
3205 VkEvent event)
3206{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003207 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3208
3209 PostSetEvent(device, event, result);
3210
3211 return result;
3212}
3213
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003214bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003215 VkDevice device,
3216 VkEvent event,
3217 VkResult result)
3218{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003219
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003220
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003221 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003222 {
3223 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003224 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3225 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003226 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003227
3228 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003229}
3230
3231VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3232 VkDevice device,
3233 VkEvent event)
3234{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003235 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3236
3237 PostResetEvent(device, event, result);
3238
3239 return result;
3240}
3241
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003242bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003243 VkDevice device,
3244 const VkQueryPoolCreateInfo* pCreateInfo)
3245{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003246 if(pCreateInfo != nullptr)
3247 {
3248 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003249 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003251 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003252 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003253 }
3254 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3255 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3256 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003258 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003259 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003260 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003261 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003262
3263 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003264}
3265
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003266bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003267 VkDevice device,
3268 VkQueryPool* pQueryPool,
3269 VkResult result)
3270{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003271
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003272 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003273 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003274 }
3275
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003276 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003277 {
3278 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3280 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003281 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003282
3283 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003284}
3285
3286VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3287 VkDevice device,
3288 const VkQueryPoolCreateInfo* pCreateInfo,
3289 VkQueryPool* pQueryPool)
3290{
3291 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003292
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003293 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3294
3295 PostCreateQueryPool(device, pQueryPool, result);
3296
3297 return result;
3298}
3299
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003300bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003301 VkDevice device,
3302 VkQueryPool queryPool,
3303 uint32_t startQuery,
3304 uint32_t queryCount,
3305 size_t* pDataSize,
3306 void* pData,
3307 VkQueryResultFlags flags,
3308 VkResult result)
3309{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003310
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003311
3312
3313
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003314 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003315 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003316 }
3317
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003318 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003319 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003320 }
3321
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003322
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003323 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003324 {
3325 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003326 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3327 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003328 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003329
3330 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003331}
3332
3333VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3334 VkDevice device,
3335 VkQueryPool queryPool,
3336 uint32_t startQuery,
3337 uint32_t queryCount,
3338 size_t* pDataSize,
3339 void* pData,
3340 VkQueryResultFlags flags)
3341{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003342 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3343
3344 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3345
3346 return result;
3347}
3348
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003349bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003350 VkDevice device,
3351 const VkBufferCreateInfo* pCreateInfo)
3352{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003353 if(pCreateInfo != nullptr)
3354 {
3355 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003356 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003357 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003358 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003359 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003360 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003361 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3362 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003363 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003365 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003366 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003367 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003368 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003369 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003370 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003371 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003372
3373 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003374}
3375
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003376bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003377 VkDevice device,
3378 VkBuffer* pBuffer,
3379 VkResult result)
3380{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003381
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003382 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003383 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003384 }
3385
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003386 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003387 {
3388 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003389 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3390 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003391 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003392
3393 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003394}
3395
3396VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3397 VkDevice device,
3398 const VkBufferCreateInfo* pCreateInfo,
3399 VkBuffer* pBuffer)
3400{
3401 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003402
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003403 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3404
3405 PostCreateBuffer(device, pBuffer, result);
3406
3407 return result;
3408}
3409
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003410bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003411 VkDevice device,
3412 const VkBufferViewCreateInfo* pCreateInfo)
3413{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003414 if(pCreateInfo != nullptr)
3415 {
3416 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003417 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003418 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003419 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003420 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003421 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003422 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3423 pCreateInfo->format > VK_FORMAT_END_RANGE)
3424 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003425 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003426 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003427 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003428 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003429 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003430
3431 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003432}
3433
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003434bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003435 VkDevice device,
3436 VkBufferView* pView,
3437 VkResult result)
3438{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003439
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003440 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003442 }
3443
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003444 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003445 {
3446 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003447 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3448 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003449 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003450
3451 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452}
3453
3454VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3455 VkDevice device,
3456 const VkBufferViewCreateInfo* pCreateInfo,
3457 VkBufferView* pView)
3458{
3459 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003460
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003461 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3462
3463 PostCreateBufferView(device, pView, result);
3464
3465 return result;
3466}
3467
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003468bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003469 VkDevice device,
3470 const VkImageCreateInfo* pCreateInfo)
3471{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003472 if(pCreateInfo != nullptr)
3473 {
3474 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003475 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003476 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003477 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003478 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003479 }
3480 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3481 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3482 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003483 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003484 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003485 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003486 }
3487 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3488 pCreateInfo->format > VK_FORMAT_END_RANGE)
3489 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003491 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003492 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003493 }
3494 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3495 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3496 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003497 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003498 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003499 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003500 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003501 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3502 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003503 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003504 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3505 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003506 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003507 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003508 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003509 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003510 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003511 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003512
3513 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003514}
3515
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003516bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003517 VkDevice device,
3518 VkImage* pImage,
3519 VkResult result)
3520{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003521
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003522 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003523 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003524 }
3525
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003526 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527 {
3528 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003529 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3530 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003531 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003532
3533 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003534}
3535
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003536VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3537 VkDevice device,
3538 const VkImageCreateInfo* pCreateInfo,
3539 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003540{
3541 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003542
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003543 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3544
3545 PostCreateImage(device, pImage, result);
3546
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003547 return result;
3548}
3549
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003550bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003551 VkDevice device,
3552 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003553{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003554 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003555 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06003556 if ((pSubresource->aspect &
3557 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003558 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003560 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003561 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003562 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003563 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003564
3565 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003566}
3567
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003568bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003569 VkDevice device,
3570 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003571 VkSubresourceLayout* pLayout)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003573
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003574
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003575 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003576 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003577 }
3578
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003579 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003580}
3581
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003582VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003583 VkDevice device,
3584 VkImage image,
3585 const VkImageSubresource* pSubresource,
3586 VkSubresourceLayout* pLayout)
3587{
3588 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003589
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003590 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003591
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003592 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003593}
3594
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003595bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003596 VkDevice device,
3597 const VkImageViewCreateInfo* pCreateInfo)
3598{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003599 if(pCreateInfo != nullptr)
3600 {
3601 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003602 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003603 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003604 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003605 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003606 }
3607 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3608 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3609 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003610 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003611 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003612 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003613 }
3614 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3615 pCreateInfo->format > VK_FORMAT_END_RANGE)
3616 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003617 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003618 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003619 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003620 }
3621 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3622 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3623 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003624 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003625 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003626 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003627 }
3628 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3629 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3630 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003631 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003632 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003633 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003634 }
3635 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3636 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3637 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003638 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003639 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003640 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003641 }
3642 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3643 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3644 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003645 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003646 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003647 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003648 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003649 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003650
3651 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003652}
3653
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003654bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003655 VkDevice device,
3656 VkImageView* pView,
3657 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003658{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003659
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003660 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003661 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003662 }
3663
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003664 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003665 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003666 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003667 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3668 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003669 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003670
3671 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003672}
3673
3674VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3675 VkDevice device,
3676 const VkImageViewCreateInfo* pCreateInfo,
3677 VkImageView* pView)
3678{
3679 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003680
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003681 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3682
3683 PostCreateImageView(device, pView, result);
3684
3685 return result;
3686}
3687
Michael Lentine6715e522015-09-15 14:59:14 -05003688bool PreCreateShaderModule(
3689 VkDevice device,
3690 const VkShaderModuleCreateInfo* pCreateInfo)
3691{
3692 if(pCreateInfo) {
3693 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3694 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3695 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3696 return false;
3697 }
3698 if(!pCreateInfo->pCode) {
3699 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3700 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3701 return false;
3702 }
3703 } else {
3704 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3705 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3706 return false;
3707 }
3708
3709 return true;
3710}
3711
3712bool PostCreateShaderModule(
3713 VkDevice device,
3714 VkShaderModule* pShaderModule,
3715 VkResult result)
3716{
3717 if(result < VK_SUCCESS) {
3718 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3719 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3720 return false;
3721 }
3722
3723 return true;
3724}
3725
3726VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3727 VkDevice device,
3728 const VkShaderModuleCreateInfo* pCreateInfo,
3729 VkShaderModule* pShaderModule)
3730{
3731 PreCreateShaderModule(device, pCreateInfo);
3732 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3733 PostCreateShaderModule(device, pShaderModule, result);
3734 return result;
3735}
3736
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003737bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003738 VkDevice device,
3739 const VkShaderCreateInfo* pCreateInfo)
3740{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003741 if(pCreateInfo != nullptr)
3742 {
3743 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003744 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003745 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003746 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003747 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003748 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003749 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003750 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003751 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003752 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003753
3754 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003755}
3756
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003757bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003758 VkDevice device,
3759 VkShader* pShader,
3760 VkResult result)
3761{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003762
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003763 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003764 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003765 }
3766
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003767 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003768 {
3769 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003770 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3771 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003772 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003773
3774 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003775}
3776
3777VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3778 VkDevice device,
3779 const VkShaderCreateInfo* pCreateInfo,
3780 VkShader* pShader)
3781{
3782 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003783
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003784 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3785
3786 PostCreateShader(device, pShader, result);
3787
3788 return result;
3789}
3790
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003791bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003792 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003793 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003794{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003795 if(pCreateInfo != nullptr)
3796 {
3797 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003798 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003799 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003800 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003801 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003802 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003803 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003804 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003805 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003806 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003807
3808 return true;
3809}
3810
3811bool PostCreatePipelineCache(
3812 VkDevice device,
3813 VkPipelineCache* pPipelineCache,
3814 VkResult result)
3815{
3816
3817 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003818 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003819 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003820
3821 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003822 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003823 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06003824 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3825 return false;
3826 }
3827
3828 return true;
3829}
3830
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003831VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003832 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003833 const VkPipelineCacheCreateInfo* pCreateInfo,
3834 VkPipelineCache* pPipelineCache)
3835{
3836 PreCreatePipelineCache(device, pCreateInfo);
3837
3838 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3839
3840 PostCreatePipelineCache(device, pPipelineCache, result);
3841
3842 return result;
3843}
3844
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003845bool PostGetPipelineCacheSize(
3846 VkDevice device,
3847 VkPipelineCache pipelineCache)
3848{
3849
3850
3851 return true;
3852}
3853
3854VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
3855 VkDevice device,
3856 VkPipelineCache pipelineCache)
3857{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06003858 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003859
3860 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06003861
3862 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003863}
3864
3865bool PostGetPipelineCacheData(
3866 VkDevice device,
3867 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003868 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003869 void* pData,
3870 VkResult result)
3871{
3872
3873
3874 if(pData != nullptr)
3875 {
3876 }
3877
3878 if(result < VK_SUCCESS)
3879 {
3880 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3881 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3882 return false;
3883 }
3884
3885 return true;
3886}
3887
3888VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3889 VkDevice device,
3890 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003891 size_t dataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003892 void* pData)
3893{
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003894 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, dataSize, pData);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003895
Courtney Goeltzenleuchter0ed02cf2015-10-16 09:58:26 -06003896 PostGetPipelineCacheData(device, pipelineCache, dataSize, pData, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003897
3898 return result;
3899}
3900
3901bool PreMergePipelineCaches(
3902 VkDevice device,
3903 const VkPipelineCache* pSrcCaches)
3904{
3905 if(pSrcCaches != nullptr)
3906 {
3907 }
3908
3909 return true;
3910}
3911
3912bool PostMergePipelineCaches(
3913 VkDevice device,
3914 VkPipelineCache destCache,
3915 uint32_t srcCacheCount,
3916 VkResult result)
3917{
3918
3919
3920
3921 if(result < VK_SUCCESS)
3922 {
3923 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3924 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3925 return false;
3926 }
3927
3928 return true;
3929}
3930
3931VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3932 VkDevice device,
3933 VkPipelineCache destCache,
3934 uint32_t srcCacheCount,
3935 const VkPipelineCache* pSrcCaches)
3936{
3937 PreMergePipelineCaches(device, pSrcCaches);
3938
3939 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
3940
3941 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
3942
3943 return result;
3944}
3945
3946bool PreCreateGraphicsPipelines(
3947 VkDevice device,
3948 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3949{
3950 if(pCreateInfos != nullptr)
3951 {
3952 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3953 {
3954 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3955 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3956 return false;
3957 }
3958 if(pCreateInfos->pStages != nullptr)
3959 {
3960 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3961 {
3962 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3963 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3964 return false;
3965 }
Courtney Goeltzenleuchter8e2f0972015-10-21 17:08:06 -06003966 if((pCreateInfos->pStages->stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
3967 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
3968 VK_SHADER_STAGE_GEOMETRY_BIT |
3969 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003970 {
3971 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3972 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
3973 return false;
3974 }
3975 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3976 {
3977 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
3978 {
3979 }
3980 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3981 {
3982 }
3983 }
3984 }
3985 if(pCreateInfos->pVertexInputState != nullptr)
3986 {
3987 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3988 {
3989 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3990 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3991 return false;
3992 }
3993 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3994 {
3995 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
3996 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
3997 {
3998 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3999 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4000 return false;
4001 }
4002 }
4003 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4004 {
4005 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4006 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4007 {
4008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4009 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4010 return false;
4011 }
4012 }
4013 }
4014 if(pCreateInfos->pInputAssemblyState != nullptr)
4015 {
4016 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4017 {
4018 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4019 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4020 return false;
4021 }
4022 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4023 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4024 {
4025 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4026 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4027 return false;
4028 }
4029 }
4030 if(pCreateInfos->pTessellationState != nullptr)
4031 {
4032 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4033 {
4034 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4035 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4036 return false;
4037 }
4038 }
4039 if(pCreateInfos->pViewportState != nullptr)
4040 {
4041 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4042 {
4043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4044 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4045 return false;
4046 }
4047 }
4048 if(pCreateInfos->pRasterState != nullptr)
4049 {
4050 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4051 {
4052 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4053 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4054 return false;
4055 }
4056 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4057 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4058 {
4059 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4060 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4061 return false;
4062 }
4063 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4064 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4065 {
4066 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4067 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4068 return false;
4069 }
4070 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4071 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4072 {
4073 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4074 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4075 return false;
4076 }
4077 }
4078 if(pCreateInfos->pMultisampleState != nullptr)
4079 {
4080 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4081 {
4082 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4083 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4084 return false;
4085 }
4086 }
4087 if(pCreateInfos->pDepthStencilState != nullptr)
4088 {
4089 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4090 {
4091 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4092 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4093 return false;
4094 }
4095 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4096 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4097 {
4098 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4099 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4100 return false;
4101 }
4102 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4103 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4104 {
4105 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4106 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4107 return false;
4108 }
4109 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4110 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4111 {
4112 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4113 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4114 return false;
4115 }
4116 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4117 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4118 {
4119 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4120 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4121 return false;
4122 }
4123 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4124 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4125 {
4126 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4127 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4128 return false;
4129 }
4130 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4131 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4132 {
4133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4134 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4135 return false;
4136 }
4137 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4138 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4139 {
4140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4141 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4142 return false;
4143 }
4144 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4145 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4146 {
4147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4148 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4149 return false;
4150 }
4151 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4152 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4153 {
4154 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4155 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4156 return false;
4157 }
4158 }
4159 if(pCreateInfos->pColorBlendState != nullptr)
4160 {
4161 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4162 {
4163 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4164 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4165 return false;
4166 }
Michael Lentine6d033602015-10-06 14:55:54 -07004167 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4168 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004169 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4170 {
4171 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4172 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4173 return false;
4174 }
Michael Lentined833b882015-09-15 14:59:56 -05004175 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004176 {
4177 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4178 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4179 {
4180 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4181 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4182 return false;
4183 }
4184 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4185 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4186 {
4187 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4188 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4189 return false;
4190 }
4191 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4192 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4193 {
4194 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4195 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4196 return false;
4197 }
4198 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4199 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4200 {
4201 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4202 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4203 return false;
4204 }
4205 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4206 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4207 {
4208 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4209 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4210 return false;
4211 }
4212 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4213 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4214 {
4215 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4216 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4217 return false;
4218 }
4219 }
4220 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004221 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4222 {
4223 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4224 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4225 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004226 }
4227
4228 return true;
4229}
4230
4231bool PostCreateGraphicsPipelines(
4232 VkDevice device,
4233 VkPipelineCache pipelineCache,
4234 uint32_t count,
4235 VkPipeline* pPipelines,
4236 VkResult result)
4237{
4238
4239
4240
4241 if(pPipelines != nullptr)
4242 {
4243 }
4244
4245 if(result < VK_SUCCESS)
4246 {
4247 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4248 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4249 return false;
4250 }
4251
4252 return true;
4253}
4254
4255VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4256 VkDevice device,
4257 VkPipelineCache pipelineCache,
4258 uint32_t count,
4259 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4260 VkPipeline* pPipelines)
4261{
4262 PreCreateGraphicsPipelines(device, pCreateInfos);
4263
4264 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4265
4266 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4267
4268 return result;
4269}
4270
4271bool PreCreateComputePipelines(
4272 VkDevice device,
4273 const VkComputePipelineCreateInfo* pCreateInfos)
4274{
4275 if(pCreateInfos != nullptr)
4276 {
4277 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4278 {
4279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4280 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4281 return false;
4282 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004283 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004284 {
4285 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4286 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4287 return false;
4288 }
Courtney Goeltzenleuchter8e2f0972015-10-21 17:08:06 -06004289 if((pCreateInfos->stage.stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
4290 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
4291 VK_SHADER_STAGE_GEOMETRY_BIT |
4292 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004293 {
4294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4295 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4296 return false;
4297 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004298 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004299 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004300 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004301 {
4302 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004303 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004304 {
4305 }
4306 }
4307 }
4308
4309 return true;
4310}
4311
4312bool PostCreateComputePipelines(
4313 VkDevice device,
4314 VkPipelineCache pipelineCache,
4315 uint32_t count,
4316 VkPipeline* pPipelines,
4317 VkResult result)
4318{
4319
4320
4321
4322 if(pPipelines != nullptr)
4323 {
4324 }
4325
4326 if(result < VK_SUCCESS)
4327 {
4328 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4329 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4330 return false;
4331 }
4332
4333 return true;
4334}
4335
4336VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4337 VkDevice device,
4338 VkPipelineCache pipelineCache,
4339 uint32_t count,
4340 const VkComputePipelineCreateInfo* pCreateInfos,
4341 VkPipeline* pPipelines)
4342{
4343 PreCreateComputePipelines(device, pCreateInfos);
4344
4345 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4346
4347 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4348
4349 return result;
4350}
4351
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004352bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004353 VkDevice device,
4354 const VkPipelineLayoutCreateInfo* pCreateInfo)
4355{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004356 if(pCreateInfo != nullptr)
4357 {
4358 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004359 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004360 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004361 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4362 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004363 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004364 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004365 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004366 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004367 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004368 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004369 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004370 }
4371
4372 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004373}
4374
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004375bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004376 VkDevice device,
4377 VkPipelineLayout* pPipelineLayout,
4378 VkResult result)
4379{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004380
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004381 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004382 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004383 }
4384
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004385 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004386 {
4387 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004388 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4389 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004390 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004391
4392 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004393}
4394
4395VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4396 VkDevice device,
4397 const VkPipelineLayoutCreateInfo* pCreateInfo,
4398 VkPipelineLayout* pPipelineLayout)
4399{
4400 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004401
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004402 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4403
4404 PostCreatePipelineLayout(device, pPipelineLayout, result);
4405
4406 return result;
4407}
4408
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004409bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004410 VkDevice device,
4411 const VkSamplerCreateInfo* pCreateInfo)
4412{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004413 if(pCreateInfo != nullptr)
4414 {
4415 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004416 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004417 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004418 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004419 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004420 }
4421 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4422 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4423 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004424 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004425 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004426 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004427 }
4428 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4429 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4430 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004431 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004432 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004433 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004434 }
4435 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4436 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4437 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004438 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004439 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004440 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004441 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004442 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4443 pCreateInfo->addressModeU > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004444 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004446 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004447 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004448 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004449 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4450 pCreateInfo->addressModeV > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004451 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004452 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004453 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004454 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004455 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004456 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4457 pCreateInfo->addressModeW > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004458 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004460 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004461 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004462 }
4463 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4464 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4465 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004466 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004467 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004468 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004469 }
4470 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4471 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4472 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004473 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004474 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004475 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004476 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004477 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004478
4479 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004480}
4481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004482bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004483 VkDevice device,
4484 VkSampler* pSampler,
4485 VkResult result)
4486{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004487
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004488 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004489 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004490 }
4491
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004492 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004493 {
4494 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004495 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4496 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004497 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004498
4499 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004500}
4501
4502VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4503 VkDevice device,
4504 const VkSamplerCreateInfo* pCreateInfo,
4505 VkSampler* pSampler)
4506{
4507 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004508
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004509 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4510
4511 PostCreateSampler(device, pSampler, result);
4512
4513 return result;
4514}
4515
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004516bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004517 VkDevice device,
4518 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4519{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004520 if(pCreateInfo != nullptr)
4521 {
4522 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004523 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004524 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004525 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004526 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004527 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004528 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004529 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004530 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4531 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4532 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004533 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004534 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004535 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004536 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004537 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004538 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004539 }
4540 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004541 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004542
4543 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004544}
4545
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004546bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004547 VkDevice device,
4548 VkDescriptorSetLayout* pSetLayout,
4549 VkResult result)
4550{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004551
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004552 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004553 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004554 }
4555
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004556 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004557 {
4558 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4560 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004561 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004562
4563 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004564}
4565
4566VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4567 VkDevice device,
4568 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4569 VkDescriptorSetLayout* pSetLayout)
4570{
4571 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004572
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004573 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4574
4575 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4576
4577 return result;
4578}
4579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004580bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004581 VkDevice device,
4582 const VkDescriptorPoolCreateInfo* pCreateInfo)
4583{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004584 if(pCreateInfo != nullptr)
4585 {
4586 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004587 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004588 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004589 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004590 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004591 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004592 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004593 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004594 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4595 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4596 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004597 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004598 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004599 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004600 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004601 }
4602 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004603
4604 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004605}
4606
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004607bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004608 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004609 uint32_t maxSets,
4610 VkDescriptorPool* pDescriptorPool,
4611 VkResult result)
4612{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004613
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004614 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004615
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004616 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004617 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004618 }
4619
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004620 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004621 {
4622 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004623 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4624 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004625 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004626
4627 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004628}
4629
4630VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4631 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004632 const VkDescriptorPoolCreateInfo* pCreateInfo,
4633 VkDescriptorPool* pDescriptorPool)
4634{
4635 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004636
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004637 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004638
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004639 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004640
4641 return result;
4642}
4643
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004644bool PostResetDescriptorPool(
4645 VkDevice device,
4646 VkDescriptorPool descriptorPool,
4647 VkResult result)
4648{
4649
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004650
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004651 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004652 {
4653 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004654 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4655 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004656 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004657
4658 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004659}
4660
4661VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4662 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004663 VkDescriptorPool descriptorPool,
4664 VkDescriptorPoolResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004665{
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004666 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004667
4668 PostResetDescriptorPool(device, descriptorPool, result);
4669
4670 return result;
4671}
4672
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004673bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004674 VkDevice device,
4675 const VkDescriptorSetLayout* pSetLayouts)
4676{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004677 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004678 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004679 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004680
4681 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004682}
4683
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004684bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004685 VkDevice device,
4686 VkDescriptorPool descriptorPool,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004687 uint32_t count,
4688 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004689 VkResult result)
4690{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004691
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004692
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004693 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004694 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004695 }
4696
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004697 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004698 {
4699 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004700 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4701 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004702 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004703
4704 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004705}
4706
4707VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4708 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004709 const VkDescriptorSetAllocInfo* pAllocInfo,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004710 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004711{
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004712 PreAllocDescriptorSets(device, pAllocInfo->pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004713
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004714 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, pAllocInfo, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004715
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004716 PostAllocDescriptorSets(device, pAllocInfo->descriptorPool, pAllocInfo->count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004717
4718 return result;
4719}
4720
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004721bool PreFreeDescriptorSets(
4722 VkDevice device,
4723 const VkDescriptorSet* pDescriptorSets)
4724{
4725 if(pDescriptorSets != nullptr)
4726 {
4727 }
4728
4729 return true;
4730}
4731
4732bool PostFreeDescriptorSets(
4733 VkDevice device,
4734 VkDescriptorPool descriptorPool,
4735 uint32_t count,
4736 VkResult result)
4737{
4738
4739
4740
4741 if(result < VK_SUCCESS)
4742 {
4743 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4744 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4745 return false;
4746 }
4747
4748 return true;
4749}
4750
4751VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4752 VkDevice device,
4753 VkDescriptorPool descriptorPool,
4754 uint32_t count,
4755 const VkDescriptorSet* pDescriptorSets)
4756{
4757 PreFreeDescriptorSets(device, pDescriptorSets);
4758
4759 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4760
4761 PostFreeDescriptorSets(device, descriptorPool, count, result);
4762
4763 return result;
4764}
4765
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004766bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004767 VkDevice device,
4768 const VkWriteDescriptorSet* pDescriptorWrites,
4769 const VkCopyDescriptorSet* pDescriptorCopies)
4770{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004771 if(pDescriptorWrites != nullptr)
4772 {
4773 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004774 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004776 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004777 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004778 }
4779 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4780 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4781 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004782 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004783 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004784 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004785 }
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004786 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4787 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4788 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004789 {
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004790 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4791 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004792 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004793 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004794 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004795 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004796 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004797 }
4798 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004799
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004800 if(pDescriptorCopies != nullptr)
4801 {
4802 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004803 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004804 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004805 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004806 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004807 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004808 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004809
4810 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004811}
4812
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004813VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004814 VkDevice device,
4815 uint32_t writeCount,
4816 const VkWriteDescriptorSet* pDescriptorWrites,
4817 uint32_t copyCount,
4818 const VkCopyDescriptorSet* pDescriptorCopies)
4819{
4820 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004821
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004822 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004823}
4824
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004825bool PreCreateFramebuffer(
4826 VkDevice device,
4827 const VkFramebufferCreateInfo* pCreateInfo)
4828{
4829 if(pCreateInfo != nullptr)
4830 {
4831 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4832 {
4833 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4834 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4835 return false;
4836 }
4837 if(pCreateInfo->pAttachments != nullptr)
4838 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004839 }
4840 }
4841
4842 return true;
4843}
4844
4845bool PostCreateFramebuffer(
4846 VkDevice device,
4847 VkFramebuffer* pFramebuffer,
4848 VkResult result)
4849{
4850
4851 if(pFramebuffer != nullptr)
4852 {
4853 }
4854
4855 if(result < VK_SUCCESS)
4856 {
4857 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4858 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4859 return false;
4860 }
4861
4862 return true;
4863}
4864
4865VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4866 VkDevice device,
4867 const VkFramebufferCreateInfo* pCreateInfo,
4868 VkFramebuffer* pFramebuffer)
4869{
4870 PreCreateFramebuffer(device, pCreateInfo);
4871
4872 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
4873
4874 PostCreateFramebuffer(device, pFramebuffer, result);
4875
4876 return result;
4877}
4878
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004879bool PreCreateRenderPass(
4880 VkDevice device,
4881 const VkRenderPassCreateInfo* pCreateInfo)
4882{
4883 if(pCreateInfo != nullptr)
4884 {
4885 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4886 {
4887 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4888 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4889 return false;
4890 }
4891 if(pCreateInfo->pAttachments != nullptr)
4892 {
4893 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
4894 {
4895 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4896 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
4897 return false;
4898 }
4899 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4900 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4901 {
4902 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4903 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4904 return false;
4905 }
4906 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4907 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4908 {
4909 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4910 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4911 return false;
4912 }
4913 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4914 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4915 {
4916 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4917 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4918 return false;
4919 }
4920 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4921 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4922 {
4923 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4924 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4925 return false;
4926 }
4927 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4928 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4929 {
4930 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4931 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4932 return false;
4933 }
4934 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4935 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4936 {
4937 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4938 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4939 return false;
4940 }
4941 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4942 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4943 {
4944 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4945 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4946 return false;
4947 }
4948 }
4949 if(pCreateInfo->pSubpasses != nullptr)
4950 {
4951 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
4952 {
4953 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4954 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
4955 return false;
4956 }
4957 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4958 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4959 {
4960 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4961 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4962 return false;
4963 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004964 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004965 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004966 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4967 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004968 {
4969 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004970 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004971 return false;
4972 }
4973 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004974 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004975 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004976 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4977 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004978 {
4979 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004980 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004981 return false;
4982 }
4983 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004984 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004985 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004986 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4987 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004988 {
4989 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004990 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004991 return false;
4992 }
4993 }
4994 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4995 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
4996 {
4997 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4998 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
4999 return false;
5000 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005001 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005002 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005003 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5004 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005005 {
5006 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005007 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005008 return false;
5009 }
5010 }
5011 }
5012 if(pCreateInfo->pDependencies != nullptr)
5013 {
5014 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5015 {
5016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5017 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5018 return false;
5019 }
5020 }
5021 }
5022
5023 return true;
5024}
5025
5026bool PostCreateRenderPass(
5027 VkDevice device,
5028 VkRenderPass* pRenderPass,
5029 VkResult result)
5030{
5031
5032 if(pRenderPass != nullptr)
5033 {
5034 }
5035
5036 if(result < VK_SUCCESS)
5037 {
5038 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5039 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5040 return false;
5041 }
5042
5043 return true;
5044}
5045
5046VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5047 VkDevice device,
5048 const VkRenderPassCreateInfo* pCreateInfo,
5049 VkRenderPass* pRenderPass)
5050{
5051 PreCreateRenderPass(device, pCreateInfo);
5052
5053 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5054
5055 PostCreateRenderPass(device, pRenderPass, result);
5056
5057 return result;
5058}
5059
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005060bool PostGetRenderAreaGranularity(
5061 VkDevice device,
5062 VkRenderPass renderPass,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005063 VkExtent2D* pGranularity)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005064{
5065
5066
5067 if(pGranularity != nullptr)
5068 {
5069 }
5070
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005071 return true;
5072}
5073
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005074VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005075 VkDevice device,
5076 VkRenderPass renderPass,
5077 VkExtent2D* pGranularity)
5078{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005079 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005080
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06005081 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005082}
5083
5084bool PreCreateCommandPool(
5085 VkDevice device,
5086 const VkCmdPoolCreateInfo* pCreateInfo)
5087{
5088 if(pCreateInfo != nullptr)
5089 {
5090 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5091 {
5092 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5093 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5094 return false;
5095 }
5096 }
5097
5098 return true;
5099}
5100
5101bool PostCreateCommandPool(
5102 VkDevice device,
5103 VkCmdPool* pCmdPool,
5104 VkResult result)
5105{
5106
5107 if(pCmdPool != nullptr)
5108 {
5109 }
5110
5111 if(result < VK_SUCCESS)
5112 {
5113 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5114 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5115 return false;
5116 }
5117
5118 return true;
5119}
5120
5121VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5122 VkDevice device,
5123 const VkCmdPoolCreateInfo* pCreateInfo,
5124 VkCmdPool* pCmdPool)
5125{
5126 PreCreateCommandPool(device, pCreateInfo);
5127
5128 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5129
5130 PostCreateCommandPool(device, pCmdPool, result);
5131
5132 return result;
5133}
5134
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005135bool PostResetCommandPool(
5136 VkDevice device,
5137 VkCmdPool cmdPool,
5138 VkCmdPoolResetFlags flags,
5139 VkResult result)
5140{
5141
5142
5143
5144 if(result < VK_SUCCESS)
5145 {
5146 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5148 return false;
5149 }
5150
5151 return true;
5152}
5153
5154VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5155 VkDevice device,
5156 VkCmdPool cmdPool,
5157 VkCmdPoolResetFlags flags)
5158{
5159 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5160
5161 PostResetCommandPool(device, cmdPool, flags, result);
5162
5163 return result;
5164}
5165
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005166bool PreCreateCommandBuffer(
5167 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005168 const VkCmdBufferAllocInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005169{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005170 if(pCreateInfo != nullptr)
5171 {
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005172 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005173 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005174 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005175 "vkAllocCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005176 return false;
5177 }
5178 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5179 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5180 {
5181 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005182 "vkAllocCommandBuffers parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005183 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005184 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005185 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005186
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005187 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005188}
5189
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005190bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005191 VkDevice device,
5192 VkCmdBuffer* pCmdBuffer,
5193 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005194{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005195
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005196 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005197 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005198 }
5199
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005200 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005201 {
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005202 std::string reason = "vkAllocCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005203 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5204 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005205 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005206
5207 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005208}
5209
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005210VK_LAYER_EXPORT VkResult VKAPI vkAllocCommandBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005211 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005212 const VkCmdBufferAllocInfo* pCreateInfo,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005213 VkCmdBuffer* pCmdBuffer)
5214{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005215 PreCreateCommandBuffer(device, pCreateInfo);
5216
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06005217 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocCommandBuffers(device, pCreateInfo, pCmdBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005218
5219 PostCreateCommandBuffer(device, pCmdBuffer, result);
5220
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005221 return result;
5222}
5223
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005224bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005225 VkCmdBuffer cmdBuffer,
5226 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005227{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005228 if(pBeginInfo != nullptr)
5229 {
5230 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005231 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005232 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005233 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005234 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005235 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005236 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005237
5238 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005239}
5240
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005241bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005242 VkCmdBuffer cmdBuffer,
5243 VkResult result)
5244{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005245
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005246 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005247 {
5248 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005249 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5250 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005251 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005252
5253 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005254}
5255
5256VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5257 VkCmdBuffer cmdBuffer,
5258 const VkCmdBufferBeginInfo* pBeginInfo)
5259{
5260 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005261
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005262 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5263
5264 PostBeginCommandBuffer(cmdBuffer, result);
5265
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005266 return result;
5267}
5268
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005269bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005270 VkCmdBuffer cmdBuffer,
5271 VkResult result)
5272{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005273
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005274 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005275 {
5276 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005277 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5278 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005279 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005280
5281 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005282}
5283
5284VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5285 VkCmdBuffer cmdBuffer)
5286{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005287 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5288
5289 PostEndCommandBuffer(cmdBuffer, result);
5290
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005291 return result;
5292}
5293
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005294bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005295 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005296 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005297 VkResult result)
5298{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005299
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005300
5301 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005302 {
5303 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005304 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5305 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005306 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005307
5308 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005309}
5310
5311VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005312 VkCmdBuffer cmdBuffer,
5313 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005314{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005315 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005316
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005317 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005318
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005319 return result;
5320}
5321
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005322bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005323 VkCmdBuffer cmdBuffer,
5324 VkPipelineBindPoint pipelineBindPoint,
5325 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005326{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005327
5328 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5329 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5330 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005331 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005332 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005333 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005334 }
5335
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005336
5337 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005338}
5339
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005340VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5341 VkCmdBuffer cmdBuffer,
5342 VkPipelineBindPoint pipelineBindPoint,
5343 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005344{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005345 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5346
5347 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5348}
5349
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005350VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005351{
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005352 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5353}
5354
5355VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5356{
5357 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005358}
5359
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005360VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005361{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005362 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005363}
5364
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005365VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005366{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005367 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005368}
5369
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005370VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005371{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005372 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northropf5bd2252015-08-17 11:10:49 -06005373}
5374
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005375VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005376{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005377 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005378}
5379
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005380VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005381{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005382 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005383}
5384
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005385VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005386{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005387 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005388}
5389
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005390VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005391{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005392 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005393}
5394
5395bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005396 VkCmdBuffer cmdBuffer,
5397 const VkDescriptorSet* pDescriptorSets,
5398 const uint32_t* pDynamicOffsets)
5399{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005400 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005401 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005402 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005403
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005404 if(pDynamicOffsets != nullptr)
5405 {
5406 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005407
5408 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005409}
5410
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005411bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005412 VkCmdBuffer cmdBuffer,
5413 VkPipelineBindPoint pipelineBindPoint,
5414 VkPipelineLayout layout,
5415 uint32_t firstSet,
5416 uint32_t setCount,
5417 uint32_t dynamicOffsetCount)
5418{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005419
5420 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5421 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5422 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005423 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005424 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005425 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005426 }
5427
5428
5429
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005430
5431
5432 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005433}
5434
5435VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5436 VkCmdBuffer cmdBuffer,
5437 VkPipelineBindPoint pipelineBindPoint,
5438 VkPipelineLayout layout,
5439 uint32_t firstSet,
5440 uint32_t setCount,
5441 const VkDescriptorSet* pDescriptorSets,
5442 uint32_t dynamicOffsetCount,
5443 const uint32_t* pDynamicOffsets)
5444{
5445 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005446
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005447 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5448
5449 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5450}
5451
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005452bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005453 VkCmdBuffer cmdBuffer,
5454 VkBuffer buffer,
5455 VkDeviceSize offset,
5456 VkIndexType indexType)
5457{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005458
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005459
5460
5461 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5462 indexType > VK_INDEX_TYPE_END_RANGE)
5463 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005464 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005465 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005466 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005467 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005468
5469 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005470}
5471
5472VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5473 VkCmdBuffer cmdBuffer,
5474 VkBuffer buffer,
5475 VkDeviceSize offset,
5476 VkIndexType indexType)
5477{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005478 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5479
5480 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5481}
5482
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005483bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005484 VkCmdBuffer cmdBuffer,
5485 const VkBuffer* pBuffers,
5486 const VkDeviceSize* pOffsets)
5487{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005488 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005489 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005490 }
5491
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005492 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005493 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005494 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005495
5496 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005497}
5498
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005499bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005500 VkCmdBuffer cmdBuffer,
5501 uint32_t startBinding,
5502 uint32_t bindingCount)
5503{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005504
5505
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005506
5507 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005508}
5509
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06005510VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005511 VkCmdBuffer cmdBuffer,
5512 uint32_t startBinding,
5513 uint32_t bindingCount,
5514 const VkBuffer* pBuffers,
5515 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005516{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005517 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005518
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5520
5521 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005522}
5523
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005524bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005525 VkCmdBuffer cmdBuffer,
5526 uint32_t firstVertex,
5527 uint32_t vertexCount,
5528 uint32_t firstInstance,
5529 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005530{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005531
5532
5533
5534
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005535
5536 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005537}
5538
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005539VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5540 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005541 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005542 uint32_t instanceCount,
5543 uint32_t firstVertex,
5544 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005545{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005546 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005547
5548 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005549}
5550
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005551bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005552 VkCmdBuffer cmdBuffer,
5553 uint32_t firstIndex,
5554 uint32_t indexCount,
5555 int32_t vertexOffset,
5556 uint32_t firstInstance,
5557 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005558{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005559
5560
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 vkCmdDrawIndexed(
5569 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005570 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005571 uint32_t instanceCount,
5572 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005573 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005574 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005575{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005576 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005577
5578 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5579}
5580
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005581bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005582 VkCmdBuffer cmdBuffer,
5583 VkBuffer buffer,
5584 VkDeviceSize offset,
5585 uint32_t count,
5586 uint32_t stride)
5587{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005588
5589
5590
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005591
5592
5593 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005594}
5595
5596VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5597 VkCmdBuffer cmdBuffer,
5598 VkBuffer buffer,
5599 VkDeviceSize offset,
5600 uint32_t count,
5601 uint32_t stride)
5602{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005603 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5604
5605 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5606}
5607
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005608bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005609 VkCmdBuffer cmdBuffer,
5610 VkBuffer buffer,
5611 VkDeviceSize offset,
5612 uint32_t count,
5613 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005614{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005615
5616
5617
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005618
5619
5620 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005621}
5622
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005623VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5624 VkCmdBuffer cmdBuffer,
5625 VkBuffer buffer,
5626 VkDeviceSize offset,
5627 uint32_t count,
5628 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005629{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005630 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5631
5632 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5633}
5634
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005635bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005636 VkCmdBuffer cmdBuffer,
5637 uint32_t x,
5638 uint32_t y,
5639 uint32_t z)
5640{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005641
5642
5643
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005644
5645 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005646}
5647
5648VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5649 VkCmdBuffer cmdBuffer,
5650 uint32_t x,
5651 uint32_t y,
5652 uint32_t z)
5653{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005654 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5655
5656 PostCmdDispatch(cmdBuffer, x, y, z);
5657}
5658
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005659bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005660 VkCmdBuffer cmdBuffer,
5661 VkBuffer buffer,
5662 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005663{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005664
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005665
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005666
5667 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005668}
5669
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005670VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5671 VkCmdBuffer cmdBuffer,
5672 VkBuffer buffer,
5673 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005674{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005675 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5676
5677 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005678}
5679
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005680bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005681 VkCmdBuffer cmdBuffer,
5682 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005683{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005684 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005685 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005686 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005687
5688 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005689}
5690
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005691bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005692 VkCmdBuffer cmdBuffer,
5693 VkBuffer srcBuffer,
5694 VkBuffer destBuffer,
5695 uint32_t regionCount)
5696{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005697
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005698
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005699
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005700
5701 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005702}
5703
5704VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5705 VkCmdBuffer cmdBuffer,
5706 VkBuffer srcBuffer,
5707 VkBuffer destBuffer,
5708 uint32_t regionCount,
5709 const VkBufferCopy* pRegions)
5710{
5711 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005712
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005713 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5714
5715 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5716}
5717
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005718bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005719 VkCmdBuffer cmdBuffer,
5720 const VkImageCopy* pRegions)
5721{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005722 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005723 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005724 if ((pRegions->srcSubresource.aspect &
5725 (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 -06005726 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005727 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005728 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005729 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005730 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005731 if ((pRegions->destSubresource.aspect &
5732 (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 -06005733 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005734 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005735 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005736 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005737 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005738 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005739
5740 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005741}
5742
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005743bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005744 VkCmdBuffer cmdBuffer,
5745 VkImage srcImage,
5746 VkImageLayout srcImageLayout,
5747 VkImage destImage,
5748 VkImageLayout destImageLayout,
5749 uint32_t regionCount)
5750{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005751
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005752
5753 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5754 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5755 {
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, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005758 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005759 }
5760
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005761
5762 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5763 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5764 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005765 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005766 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005767 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005768 }
5769
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005770
5771 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772}
5773
5774VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5775 VkCmdBuffer cmdBuffer,
5776 VkImage srcImage,
5777 VkImageLayout srcImageLayout,
5778 VkImage destImage,
5779 VkImageLayout destImageLayout,
5780 uint32_t regionCount,
5781 const VkImageCopy* pRegions)
5782{
5783 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005784
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005785 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5786
5787 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5788}
5789
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005790bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005791 VkCmdBuffer cmdBuffer,
5792 const VkImageBlit* pRegions)
5793{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005794 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005795 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005796 if ((pRegions->srcSubresource.aspect &
5797 (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 -06005798 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005799 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005800 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005801 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005803 if ((pRegions->destSubresource.aspect &
5804 (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 -06005805 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005806 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005807 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005808 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005809 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005810 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005811
5812 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005813}
5814
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005815bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005816 VkCmdBuffer cmdBuffer,
5817 VkImage srcImage,
5818 VkImageLayout srcImageLayout,
5819 VkImage destImage,
5820 VkImageLayout destImageLayout,
5821 uint32_t regionCount,
5822 VkTexFilter filter)
5823{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005824
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005825
5826 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5827 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5828 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005829 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005830 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005831 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005832 }
5833
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005834
5835 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5836 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5837 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005838 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005839 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005840 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005841 }
5842
5843
5844 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
5845 filter > VK_TEX_FILTER_END_RANGE)
5846 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005847 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005848 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005849 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005850 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005851
5852 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005853}
5854
5855VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
5856 VkCmdBuffer cmdBuffer,
5857 VkImage srcImage,
5858 VkImageLayout srcImageLayout,
5859 VkImage destImage,
5860 VkImageLayout destImageLayout,
5861 uint32_t regionCount,
5862 const VkImageBlit* pRegions,
5863 VkTexFilter filter)
5864{
5865 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005866
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005867 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
5868
5869 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
5870}
5871
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005872bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005873 VkCmdBuffer cmdBuffer,
5874 const VkBufferImageCopy* pRegions)
5875{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005876 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005877 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005878 if ((pRegions->imageSubresource.aspect &
5879 (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 -06005880 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005881 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005882 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005883 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005884 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005885 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005886
5887 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005888}
5889
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005890bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005891 VkCmdBuffer cmdBuffer,
5892 VkBuffer srcBuffer,
5893 VkImage destImage,
5894 VkImageLayout destImageLayout,
5895 uint32_t regionCount)
5896{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005897
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005898
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005899
5900 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5901 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5902 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005903 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005904 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005905 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005906 }
5907
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005908
5909 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005910}
5911
5912VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
5913 VkCmdBuffer cmdBuffer,
5914 VkBuffer srcBuffer,
5915 VkImage destImage,
5916 VkImageLayout destImageLayout,
5917 uint32_t regionCount,
5918 const VkBufferImageCopy* pRegions)
5919{
5920 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005921
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005922 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
5923
5924 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
5925}
5926
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005927bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005928 VkCmdBuffer cmdBuffer,
5929 const VkBufferImageCopy* pRegions)
5930{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005931 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005932 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005933 if ((pRegions->imageSubresource.aspect &
5934 (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 -06005935 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005936 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005937 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005938 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005939 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005940 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005941
5942 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005943}
5944
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005945bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005946 VkCmdBuffer cmdBuffer,
5947 VkImage srcImage,
5948 VkImageLayout srcImageLayout,
5949 VkBuffer destBuffer,
5950 uint32_t regionCount)
5951{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005952
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005953
5954 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5955 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5956 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005957 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005958 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005959 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005960 }
5961
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005962
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005963
5964 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005965}
5966
5967VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
5968 VkCmdBuffer cmdBuffer,
5969 VkImage srcImage,
5970 VkImageLayout srcImageLayout,
5971 VkBuffer destBuffer,
5972 uint32_t regionCount,
5973 const VkBufferImageCopy* pRegions)
5974{
5975 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005976
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005977 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
5978
5979 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
5980}
5981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005982bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005983 VkCmdBuffer cmdBuffer,
5984 const uint32_t* pData)
5985{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005986 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005987 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005988 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005989
5990 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005991}
5992
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005993bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005994 VkCmdBuffer cmdBuffer,
5995 VkBuffer destBuffer,
5996 VkDeviceSize destOffset,
5997 VkDeviceSize dataSize)
5998{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005999
6000
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006001
6002
6003 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006004}
6005
6006VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6007 VkCmdBuffer cmdBuffer,
6008 VkBuffer destBuffer,
6009 VkDeviceSize destOffset,
6010 VkDeviceSize dataSize,
6011 const uint32_t* pData)
6012{
6013 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006014
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006015 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6016
6017 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6018}
6019
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006020bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006021 VkCmdBuffer cmdBuffer,
6022 VkBuffer destBuffer,
6023 VkDeviceSize destOffset,
6024 VkDeviceSize fillSize,
6025 uint32_t data)
6026{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006027
6028
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 vkCmdFillBuffer(
6036 VkCmdBuffer cmdBuffer,
6037 VkBuffer destBuffer,
6038 VkDeviceSize destOffset,
6039 VkDeviceSize fillSize,
6040 uint32_t data)
6041{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006042 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6043
6044 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6045}
6046
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006047bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006048 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12006049 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006050 const VkImageSubresourceRange* pRanges)
6051{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006052 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006053 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006054 }
6055
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006056 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006057 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006058 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006059 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006060
6061 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006062}
6063
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006064bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006065 VkCmdBuffer cmdBuffer,
6066 VkImage image,
6067 VkImageLayout imageLayout,
6068 uint32_t rangeCount)
6069{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006070
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006071
6072 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6073 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6074 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006075 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006076 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006077 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006078 }
6079
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006080
6081 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006082}
6083
6084VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6085 VkCmdBuffer cmdBuffer,
6086 VkImage image,
6087 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12006088 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006089 uint32_t rangeCount,
6090 const VkImageSubresourceRange* pRanges)
6091{
6092 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006093
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006094 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6095
6096 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6097}
6098
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006099bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006100 VkCmdBuffer cmdBuffer,
6101 const VkImageSubresourceRange* pRanges)
6102{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006103 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006104 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006105 /*
6106 * TODO: How do we validation pRanges->aspectMask?
6107 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6108 * VK_IMAGE_ASPECT_STENCIL_BIT.
6109 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006110 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006111
6112 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006113}
6114
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006115bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006116 VkCmdBuffer cmdBuffer,
6117 VkImage image,
6118 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006119 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006120 uint32_t rangeCount)
6121{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006122
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006123
6124 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6125 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6126 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006127 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006128 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006129 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006130 }
6131
6132
6133
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006134
6135 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006136}
6137
Chris Forbes2951d7d2015-06-22 17:21:59 +12006138VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006139 VkCmdBuffer cmdBuffer,
6140 VkImage image,
6141 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006142 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006143 uint32_t rangeCount,
6144 const VkImageSubresourceRange* pRanges)
6145{
Chris Forbes2951d7d2015-06-22 17:21:59 +12006146 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006147
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006148 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006149
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006150 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006151}
6152
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006153bool PreCmdClearAttachments(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006154 VkCmdBuffer cmdBuffer,
6155 const VkClearColorValue* pColor,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06006156 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006157{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006158 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006159 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006160 }
6161
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006162 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006163 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006164 }
6165
6166 return true;
6167}
6168
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006169VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6170 VkCmdBuffer cmdBuffer,
6171 uint32_t attachmentCount,
6172 const VkClearAttachment* pAttachments,
6173 uint32_t rectCount,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06006174 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006175{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006176 for (uint32_t i = 0; i < attachmentCount; i++) {
6177 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006178 }
6179
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006180 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006181}
6182
6183bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006184 VkCmdBuffer cmdBuffer,
6185 const VkImageResolve* pRegions)
6186{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006187 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006188 {
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006189 if ((pRegions->srcSubresource.aspect &
6190 (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 -06006191 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006192 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006193 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006194 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006195 }
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06006196 if ((pRegions->destSubresource.aspect &
6197 (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 -06006198 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006199 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006200 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006201 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006202 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006203 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006204
6205 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006206}
6207
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006208bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006209 VkCmdBuffer cmdBuffer,
6210 VkImage srcImage,
6211 VkImageLayout srcImageLayout,
6212 VkImage destImage,
6213 VkImageLayout destImageLayout,
6214 uint32_t regionCount)
6215{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006216
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006217
6218 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6219 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6220 {
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, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006223 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006224 }
6225
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006226
6227 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6228 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6229 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006230 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006231 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006232 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006233 }
6234
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006235
6236 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006237}
6238
6239VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6240 VkCmdBuffer cmdBuffer,
6241 VkImage srcImage,
6242 VkImageLayout srcImageLayout,
6243 VkImage destImage,
6244 VkImageLayout destImageLayout,
6245 uint32_t regionCount,
6246 const VkImageResolve* pRegions)
6247{
6248 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006249
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006250 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6251
6252 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6253}
6254
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006255bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006256 VkCmdBuffer cmdBuffer,
6257 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006258 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006259{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006260
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006261
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006262
6263 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006264}
6265
6266VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6267 VkCmdBuffer cmdBuffer,
6268 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006269 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006270{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006271 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006272
Tony Barbourc2e987e2015-06-29 16:20:35 -06006273 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006274}
6275
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006276bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006277 VkCmdBuffer cmdBuffer,
6278 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006279 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006280{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006281
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006282
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006283
6284 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006285}
6286
6287VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6288 VkCmdBuffer cmdBuffer,
6289 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006290 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006291{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006292 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006293
Tony Barbourc2e987e2015-06-29 16:20:35 -06006294 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006295}
6296
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006297bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006298 VkCmdBuffer cmdBuffer,
6299 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006300 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006301{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006302 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006303 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006304 }
6305
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006306 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006307 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006308 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006309
6310 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006311}
6312
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006313bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006314 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006315 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006316 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006317 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006318 uint32_t memBarrierCount)
6319{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006320
Tony Barbourc2e987e2015-06-29 16:20:35 -06006321
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006322
6323
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006324
6325 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006326}
6327
6328VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6329 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006330 uint32_t eventCount,
6331 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006332 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006333 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006334 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006335 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006336{
6337 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006338
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006339 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006340
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006341 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006342}
6343
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006344bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006345 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006346 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006347{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006348 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006349 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006350 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006351
6352 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006353}
6354
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006355bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006356 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006357 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006358 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006359 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006360 uint32_t memBarrierCount)
6361{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006362
Tony Barbourc2e987e2015-06-29 16:20:35 -06006363
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006364
6365
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006366
6367 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006368}
6369
6370VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6371 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006372 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006373 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006374 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006375 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006376 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006377{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006378 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006379
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006380 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006381
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006382 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006383}
6384
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006385bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006386 VkCmdBuffer cmdBuffer,
6387 VkQueryPool queryPool,
6388 uint32_t slot,
6389 VkQueryControlFlags flags)
6390{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006391
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006392
6393
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006394
6395 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006396}
6397
6398VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6399 VkCmdBuffer cmdBuffer,
6400 VkQueryPool queryPool,
6401 uint32_t slot,
6402 VkQueryControlFlags flags)
6403{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006404 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6405
6406 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6407}
6408
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006409bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006410 VkCmdBuffer cmdBuffer,
6411 VkQueryPool queryPool,
6412 uint32_t slot)
6413{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006414
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006415
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006416
6417 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006418}
6419
6420VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6421 VkCmdBuffer cmdBuffer,
6422 VkQueryPool queryPool,
6423 uint32_t slot)
6424{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006425 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6426
6427 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6428}
6429
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006430bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006431 VkCmdBuffer cmdBuffer,
6432 VkQueryPool queryPool,
6433 uint32_t startQuery,
6434 uint32_t queryCount)
6435{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006436
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006437
6438
6439
6440 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006441}
6442
6443VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6444 VkCmdBuffer cmdBuffer,
6445 VkQueryPool queryPool,
6446 uint32_t startQuery,
6447 uint32_t queryCount)
6448{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006449 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6450
6451 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6452}
6453
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006454bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006455 VkCmdBuffer cmdBuffer,
6456 VkTimestampType timestampType,
6457 VkBuffer destBuffer,
6458 VkDeviceSize destOffset)
6459{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006460
6461 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6462 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6463 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006464 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006465 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006466 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006467 }
6468
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006469
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006470
6471 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006472}
6473
6474VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6475 VkCmdBuffer cmdBuffer,
6476 VkTimestampType timestampType,
6477 VkBuffer destBuffer,
6478 VkDeviceSize destOffset)
6479{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006480 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6481
6482 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6483}
6484
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006485bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006486 VkCmdBuffer cmdBuffer,
6487 VkQueryPool queryPool,
6488 uint32_t startQuery,
6489 uint32_t queryCount,
6490 VkBuffer destBuffer,
6491 VkDeviceSize destOffset,
6492 VkDeviceSize destStride,
6493 VkQueryResultFlags flags)
6494{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006495
6496
6497
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006498
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006499
6500
6501
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006502
6503 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006504}
6505
Jeremy Hayescf469132015-04-17 10:36:53 -06006506VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006507 VkCmdBuffer cmdBuffer,
6508 VkQueryPool queryPool,
6509 uint32_t startQuery,
6510 uint32_t queryCount,
6511 VkBuffer destBuffer,
6512 VkDeviceSize destOffset,
6513 VkDeviceSize destStride,
6514 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006515{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006516 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
6517
6518 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006519}
6520
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006521bool PreCmdPushConstants(
6522 VkCmdBuffer cmdBuffer,
6523 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006524{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006525 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006526 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006527 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006528
6529 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006530}
6531
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006532bool PostCmdPushConstants(
6533 VkCmdBuffer cmdBuffer,
6534 VkPipelineLayout layout,
6535 VkShaderStageFlags stageFlags,
6536 uint32_t start,
6537 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006538{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006539
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006540
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006541
6542
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006543
6544 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006545}
6546
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006547VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6548 VkCmdBuffer cmdBuffer,
6549 VkPipelineLayout layout,
6550 VkShaderStageFlags stageFlags,
6551 uint32_t start,
6552 uint32_t length,
6553 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006554{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006555 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006556
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006557 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006558
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006559 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006560}
6561
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006562bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006563 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006564 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006565{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006566 if(pRenderPassBegin != nullptr)
6567 {
6568 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006569 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006570 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006571 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006572 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006573 }
Cody Northropc332eef2015-08-04 11:51:03 -06006574 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006575 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006576 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006577 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006578
6579 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006580}
6581
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006582bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006583 VkCmdBuffer cmdBuffer,
6584 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006585{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006586
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006587 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6588 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6589 {
6590 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6591 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6592 return false;
6593 }
6594
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006595 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006596}
6597
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006598VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6599 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006600 const VkRenderPassBeginInfo* pRenderPassBegin,
6601 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006602{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006603 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6604
Chia-I Wuc278df82015-07-07 11:50:03 +08006605 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006606
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006607 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006608}
6609
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006610bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08006611 VkCmdBuffer cmdBuffer,
6612 VkRenderPassContents contents)
6613{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006614
6615 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006616 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006617 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006618 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006619 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6620 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006621 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006622
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006623 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006624}
6625
6626VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6627 VkCmdBuffer cmdBuffer,
6628 VkRenderPassContents contents)
6629{
Chia-I Wuc278df82015-07-07 11:50:03 +08006630 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6631
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006632 PostCmdNextSubpass(cmdBuffer, contents);
6633}
6634
6635bool PostCmdEndRenderPass(
6636 VkCmdBuffer cmdBuffer)
6637{
6638
6639 return true;
6640}
6641
6642VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6643 VkCmdBuffer cmdBuffer)
6644{
6645 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6646
6647 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006648}
6649
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006650bool PreCmdExecuteCommands(
6651 VkCmdBuffer cmdBuffer,
6652 const VkCmdBuffer* pCmdBuffers)
6653{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006654 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006655 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006656 }
6657
6658 return true;
6659}
6660
6661bool PostCmdExecuteCommands(
6662 VkCmdBuffer cmdBuffer,
6663 uint32_t cmdBuffersCount)
6664{
6665
6666
6667 return true;
6668}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006669
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006670VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006671 VkCmdBuffer cmdBuffer,
6672 uint32_t cmdBuffersCount,
6673 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006674{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006675 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6676
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006677 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6678
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006679 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006680}
6681
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006682VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006683{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006684 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006685 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006686 }
6687
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006688 /* loader uses this to force layer initialization; device object is wrapped */
6689 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006690 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006691 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006692 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006693
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006694 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006695 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006696 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006697 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006698 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006699 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006700 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006701 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006702 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006703 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006704 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006705 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006706 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006707 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006708 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006709 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006710 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006711 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006712 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006713 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006714 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006715 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006716 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006717 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006718 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006719 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006720 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006721 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006722 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006723 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006724 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006725 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006726 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006727 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006728 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006729 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006730 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006731 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006732 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006733 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006734 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006735 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006736 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006737 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006738 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006739 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006740 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006741 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006742 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006743 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006744 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006745 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006746 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006747 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006748 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006749 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006750 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006751 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine6715e522015-09-15 14:59:14 -05006752 if (!strcmp(funcName, "vkCreateShaderModule"))
6753 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006754 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006755 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006756 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006757 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006758 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006759 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006760 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006761 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006762 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006763 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006764 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006765 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006766 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006767 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006768 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006769 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006770 if (!strcmp(funcName, "vkCmdSetViewport"))
6771 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006772 if (!strcmp(funcName, "vkCmdSetScissor"))
6773 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006774 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6775 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6776 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6777 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6778 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6779 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6780 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6781 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6782 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6783 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6784 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6785 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6786 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6787 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06006788 if (!strcmp(funcName, "vkAllocCommandBuffers"))
6789 return (PFN_vkVoidFunction) vkAllocCommandBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006790 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006791 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006792 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006793 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006794 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006795 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006796 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006797 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006798 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006799 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006800 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006801 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006802 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006803 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006804 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006805 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006806 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006807 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006808 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006809 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006810 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006811 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006812 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006813 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006814 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006815 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006816 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006817 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006818 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006819 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006820 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006821 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006822 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006823 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006824 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006825 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006826 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006827 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006828 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006829 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006830 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006831 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006832 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006833 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006834 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006835 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006836 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006837 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006838 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006839 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006840 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006841 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006842 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006843 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006844 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006845 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006846 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006847 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006848 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006849 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006850 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006851 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006852 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006853 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006854 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006855 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006856 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006857 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08006858 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006859 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006860
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006861 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006862 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006863 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006864 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006865 }
6866}
6867
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006868VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006869{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006870 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006871 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006872 }
6873
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006874 /* loader uses this to force layer initialization; instance object is wrapped */
6875 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006876 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006877 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006878 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006879
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006880 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006881 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006882 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006883 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006884 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006885 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006886 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006887 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006888 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006889 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06006890 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006891 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06006892 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6893 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6894 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6895 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6896 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6897 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6898 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6899 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006900
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006901 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006902 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006903 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006904 return fptr;
6905
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006906 {
6907 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6908 return NULL;
6909 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6910 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006911}